欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Python圖片處理模塊PIL操作方法(pillow)

 更新時間:2020年04月07日 09:20:38   作者:灬魑魅魍魎灬  
這篇文章主要介紹了Python圖片處理模塊PIL操作方法(pillow),本文通過實例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下

一、PIL的基本概念:

PIL中所涉及的基本概念有如下幾個:通道(bands)、模式(mode)、尺寸(size)、坐標(biāo)系統(tǒng)(coordinate system)、調(diào)色板(palette)、信息(info)和濾波器(filters)。

1、通道

每張圖片都是由一個或者多個數(shù)據(jù)通道構(gòu)成。PIL允許在單張圖片中合成相同維數(shù)和深度的多個通道。

以RGB圖像為例,每張圖片都是由三個數(shù)據(jù)通道構(gòu)成,分別為R、G和B通道。而對于灰度圖像,則只有一個通道。

對于一張圖片的通道數(shù)量和名稱,可以通過方法getbands()來獲取。方法getbands()是Image模塊的方法,它會返回一個字符串元組(tuple)。該元組將包括每一個通道的名稱。

Python的元組與列表類似,不同之處在于元組的元素不能修改,元組使用小括號,列表使用方括號,元組創(chuàng)建很簡單,只需要在括號中添加元素,并使用逗號隔開即可。

方法getbands()的使用如下:

from PIL import Image
im = Image.open("xiao.png")
print(im.getbands())
輸出:
('R', 'G', 'B')

2、模式

圖像的模式定義了圖像的類型和像素的位寬。當(dāng)前支持如下模式:

1:1位像素,表示黑和白,但是存儲的時候每個像素存儲為8bit。
L:8位像素,表示黑和白。
P:8位像素,使用調(diào)色板映射到其他模式。
RGB:3x8位像素,為真彩色。
RGBA:4x8位像素,有透明通道的真彩色。
CMYK:4x8位像素,顏色分離。
YCbCr:3x8位像素,彩色視頻格式。
I:32位整型像素。
F:32位浮點型像素。
PIL也支持一些特殊的模式,包括RGBX(有padding的真彩色)和RGBa(有自左乘alpha的真彩色)。

可以通過mode屬性讀取圖像的模式。其返回值是包括上述模式的字符串。

屬性mode的使用如下:

from PIL import Image
im = Image.open("xiao.png")
print(im.mode)
輸出:
'RGB'

3、尺寸

通過size屬性可以獲取圖片的尺寸。這是一個二元組,包含水平和垂直方向上的像素數(shù)。

屬性mode的使用如下:

from PIL import Image
im = Image.open("xiao.png")
print(im.size)
輸出:
(670, 502)

4、坐標(biāo)系統(tǒng)

PIL使用笛卡爾像素坐標(biāo)系統(tǒng),坐標(biāo)(0,0)位于左上角。注意:坐標(biāo)值表示像素的角;位于坐標(biāo)(0,0)處的像素的中心實際上位于(0.5,0.5)。

坐標(biāo)經(jīng)常用于二元組(x,y)。長方形則表示為四元組,前面是左上角坐標(biāo)。例如,一個覆蓋800x600的像素圖像的長方形表示為(0,0,800,600)。

5、調(diào)色板

調(diào)色板模式("P")使用一個顏色調(diào)色板為每個像素定義具體的顏色值

6、信息

使用info屬性可以為一張圖片添加一些輔助信息。這個是字典對象。加載和保存圖像文件時,多少信息需要處理取決于文件格式。

屬性info的使用如下:

from PIL import Image
im = Image.open("xiao.png")
print(im.info)
輸出:
{}

7、濾波器

對于將多個輸入像素映射為一個輸出像素的幾何操作,PIL提供了4個不同的采樣濾波器:

NEAREST:最近濾波。從輸入圖像中選取最近的像素作為輸出像素。它忽略了所有其他的像素。
BILINEAR:雙線性濾波。在輸入圖像的2x2矩陣上進(jìn)行線性插值。注意:PIL的當(dāng)前版本,做下采樣時該濾波器使用了固定輸入模板。
BICUBIC:雙立方濾波。在輸入圖像的4x4矩陣上進(jìn)行立方插值。注意:PIL的當(dāng)前版本,做下采樣時該濾波器使用了固定輸入模板。
ANTIALIAS:平滑濾波。這是PIL 1.1.3版本中新的濾波器。對所有可以影響輸出像素的輸入像素進(jìn)行高質(zhì)量的重采樣濾波,以計算輸出像素值。在當(dāng)前的PIL版本中,這個濾波器只用于改變尺寸和縮略圖方法。
注意:在當(dāng)前的PIL版本中,ANTIALIAS濾波器是下采樣(例如,將一個大的圖像轉(zhuǎn)換為小圖)時唯一正確的濾波器。BILIEAR和BICUBIC濾波器使用固定的輸入模板,用于固定比例的幾何變換和上采樣是最好的。

Image模塊中的方法resize()和thumbnail()用到了濾波器。

方法resize()的使用如下:

方法resize()的定義為:resize(size, filter=None)=> imagefrom PIL import Image
im = Image.open("xiao.png")
print(im.size)im_resize = im.resize((256,256))print(im_resize.size)輸出:(670, 502)(256,256)

對參數(shù)filter不賦值的話,方法resize()默認(rèn)使用NEAREST濾波器。如果要使用其他濾波器可以通過下面的方法來實現(xiàn):

from PIL import Image
im = Image.open("xiao.png")
print(im.size)
im_resize0 = im.resize((256,256), Image.BILINEAR)
print(im_resize0.size)im_resize1 = im.resize((256,256), Image.BICUBIC)
print(im_resize1.size)im_resize2 = im.resize((256,256), Image.ANTIALIAS)
print(im_resize2.size)
輸出:(670, 502)(256,256)(256,256)(256,256)

二、Image模塊:

Image模塊是PIL中最重要的模塊,它有一個類叫做image,與模塊名稱相同。Image類有很多函數(shù)、方法及屬性,接下來將依次對image類的屬性、函數(shù)和方法進(jìn)行介紹。

一、Image類的屬性

1、Format

定義:im.format ⇒ string or None
含義:源文件的文件格式。如果是由PIL創(chuàng)建的圖像,則其文件格式為None。
例子:
from PIL import Image
im= Image.open("xiao.png")
print(im.format)
輸出:
'png'

2、Mode

定義:im.mode ⇒ string
含義:圖像的模式。這個字符串表明圖像所使用像素格式。該屬性典型的取值為“1”,“L”,“RGB”或“CMYK”。

3、Size

定義:im.size ⇒ (width, height)
含義:圖像的尺寸,按照像素數(shù)計算。它的返回值為寬度和高度的二元組(width, height)。

4、Palette

定義:im.palette ⇒ palette or None
含義:顏色調(diào)色板表格。如果圖像的模式是“P”,則返回ImagePalette類的實例;否則,將為None。
例子:
from PIL import Image
im = Image.open("jing.jpg")
print(im.mode)
print(im.palette)
輸出: 
RGB
None

5、Info

定義:im.info ⇒ dictionary
含義:存儲圖像相關(guān)數(shù)據(jù)的字典。文件句柄使用該字典傳遞從文件中讀取的各種非圖像信息。大多數(shù)方法在返回新的圖像時都會忽略這個字典;因為字典中的鍵并非標(biāo)準(zhǔn)化的,對于一個方法,它不能知道自己的操作如何影響這個字典。
     如果用戶需要這些信息,需要在方法open()返回時保存這個字典。

二、類的函數(shù):

1、New

定義:Image.new(mode,size) ⇒ image
 Image.new(mode, size, color) ⇒ image
含義:使用給定的變量mode和size生成新的圖像。Size是給定的寬/高二元組,這是按照像素數(shù)來計算的。對于單通道圖像,變量color只給定一個值;對于多通道圖像,變量color給定一個元組(每個通道對應(yīng)一個值)。 在版本1.1.4及其之后,用戶也可以用顏色的名稱,比如給變量color賦值為“red”。如果沒有對變量color賦值,圖像內(nèi)容將會被全部賦值為0(圖像即為黑色)。如果變量color是空,圖像將不會被初始化,即圖像的內(nèi)容全為0。 這對向該圖像復(fù)制或繪制某些內(nèi)容是有用的。
例子:
from PIL import Image
im= Image.new("RGB", (128, 128), "#FF0000")
im.save("test1.png") #圖像im為128x128大小的紅色圖像。
im= Image.new("RGB", (128, 128)) #圖像im為128x128大小的黑色圖像,因為變量color不賦值的話,圖像內(nèi)容被設(shè)置為0,即黑色。
im.save("test2.png")im= Image.new("RGB", (128, 128), "red") #圖像im為128x128大小的紅色圖像。im.save("test3.png")

2、Open

定義:Image.open(file) ⇒ image
 Image.open(file, mode) ⇒ image
含義:打開并確認(rèn)給定的圖像文件。這個是一個懶操作;該函數(shù)只會讀文件頭,而真實的圖像數(shù)據(jù)直到試圖處理該數(shù)據(jù)才會從文件讀?。ㄕ{(diào)用load()方法將強行加載圖像數(shù)據(jù))。如果變量mode被設(shè)置,那必須是“r”。
 用戶可以使用一個字符串(表示文件名稱的字符串)或者文件對象作為變量file的值。文件對象必須實現(xiàn)read(),seek()和tell()方法,并且以二進(jìn)制模式打開。
例子:
from PIL import Image
im = Image.open("xiao.png")

3、Blend

定義:Image.blend(image1,image2, alpha) ⇒ image
含義:使用給定的兩張圖像及透明度變量alpha,插值出一張新的圖像。這兩張圖像必須有一樣的尺寸和模式。
 合成公式為:out = image1 *(1.0 - alpha) + image2 * alpha
 如果變量alpha為0.0,將返回第一張圖像的拷貝。如果變量alpha為1.0,將返回第二張圖像的拷貝。對變量alpha的值沒有限制。

例子:
from PIL import Image
im1 = Image.open("jing.jpg")
im2 = Image.open("wu.jpg")
im = Image.blend(im1,im2,0.5)
im.save("he.jpg")

4、Composite

定義:Image.composite(image1,image2, mask) ⇒ image
含義:使用給定的兩張圖像及mask圖像作為透明度,插值出一張新的圖像。變量mask圖像的模式可以為“1”,“L”或者“RGBA”。所有圖像必須有相同的尺寸。
例子:
from PIL import Image
im1 = Image.open("jing.jpg")
im2 = Image.open("wu.jpg")
r,g,b = im1.split()
print(g.mode)
im = Image.composite(im1,im2,b)
im.save("he.jpg")
b.save("he1.jpg")

5、Eval

定義:Image.eval(image,function) ⇒ image
含義:使用變量function對應(yīng)的函數(shù)(該函數(shù)應(yīng)該有一個參數(shù))處理變量image所代表圖像中的每一個像素點。如果變量image所代表圖像有多個通道,那變量function對應(yīng)的函數(shù)作用于每一個通道。
 注意:變量function對每個像素只處理一次,所以不能使用隨機組件和其他生成器。
例子:

from PIL import Image
im = Image.open("jing.jpg")
def deffun(c):
 return c*0.89 #改變了亮度
im_eval = Image.eval(im,deffun) 
im_eval.save("gai.jpg")注:圖像im_eval與im01比較,其像素值均為im01的一半,則其亮度自然也會比im01暗一些。

6、Frombuffer

定義:Image.frombuffer(mode,size, data) ⇒ image
     Image.frombuffer(mode, size,data, decoder, parameters) ⇒ image
含義:(New in PIL 1.1.4)使用標(biāo)準(zhǔn)的“raw”解碼器,從字符串或者buffer對象中的像素數(shù)據(jù)產(chǎn)生一個圖像存儲。對于一些模式,這個圖像存儲與原始的buffer(這意味著對原始buffer對象的改變體現(xiàn)在圖像本身)共享內(nèi)存。      并非所有的模式都可以共享內(nèi)存;支持的模式有“L”,“RGBX”,“RGBA”和“CMYK”。對于其他模式,這個函數(shù)與fromstring()函數(shù)一致。
注意:版本1.1.6及其以下,這個函數(shù)的默認(rèn)情況與函數(shù)fromstring()不同。這有可能在將來的版本中改變,所以為了最大的可移植性,當(dāng)使用“raw”解碼器時,推薦用戶寫出所有的參數(shù),如下所示:
im =Image.frombuffer(mode, size, data, "raw", mode, 0, 1)
函數(shù)Image.frombuffer(mode,size, data, decoder, parameters)與函數(shù)fromstring()的調(diào)用一致。

7、Fromstring

定義:Image.fromstring(mode,size, data) ⇒ image
     Image.fromstring(mode, size,data, decoder, parameters) ⇒ image
含義:函數(shù)Image.fromstring(mode,size, data),使用標(biāo)準(zhǔn)的“raw”解碼器,從字符串中的像素數(shù)據(jù)產(chǎn)生一個圖像存儲。
函數(shù)Image.fromstring(mode,size, data, decoder, parameters)也一樣,但是允許用戶使用PIL支持的任何像素解碼器。更多信息可以參考:Writing YourOwn File Decoder.
注意:這個函數(shù)只對像素數(shù)據(jù)進(jìn)行解碼,而不是整個圖像。如果用戶的字符串包含整個圖像,可以將該字符串包裹在StringIO對象中,使用函數(shù)open()來加載。

8、Merge

定義:Image.merge(mode,bands) ⇒ image
含義:使用一些單通道圖像,創(chuàng)建一個新的圖像。變量bands為一個圖像的元組或者列表,每個通道的模式由變量mode描述。所有通道必須有相同的尺寸。
變量mode與變量bands的關(guān)系:
len(ImageMode.getmode(mode).bands)= len(bands)
例子:
from PIL import Image
im1 = Image.open("jing.jpg")
im2 = Image.open("wu.jpg")
r1,g1,b1 = im1.split()
r2,g2,b2 = im2.split()
imgs =[r1,g2,b2]
im_merge = Image.merge("RGB",imgs)
im_merge.save("he.jpg")

三、Image類的方法

除非另作說明,Image類的所有方法都將返回一個Image類的新實例,這個實例對應(yīng)于結(jié)果圖像。

1、Convert

定義1:im.convert(mode)⇒ image
含義1:將當(dāng)前圖像轉(zhuǎn)換為其他模式,并且返回新的圖像。
當(dāng)從一個調(diào)色板圖像轉(zhuǎn)換時,這個方法通過這個調(diào)色板來轉(zhuǎn)換像素。如果不對變量mode賦值,該方法將會選擇一種模式,在沒有調(diào)色板的情況下,使得圖像和調(diào)色板中的所有信息都可以被表示出來。
當(dāng)從一個顏色圖像轉(zhuǎn)換為黑白圖像時,PIL庫使用ITU-R601-2 luma轉(zhuǎn)換公式:
L = R * 299/1000 + G * 587/1000 + B * 114/1000
當(dāng)轉(zhuǎn)換為2位圖像(模式“1”)時,源圖像首先被轉(zhuǎn)換為黑白圖像。結(jié)果數(shù)據(jù)中大于127的值被設(shè)置為白色,其他的設(shè)置為黑色;這樣圖像會出現(xiàn)抖動。如果要使用其他閾值,更改閾值127,可以使用方法point()。為了去掉圖像抖動現(xiàn)象,可以使用dither選項?!?
例子1:
from PIL import Image
im1 = Image.open("jing.jpg")
print(im1.mode)
im_c = im1.convert("1")
im_c.save("he.jpg")
print(im_c.mode)
輸出:1
注:將“RGB”模式的im01圖像,轉(zhuǎn)換為“1”模式的im_c圖像。

定義2:im.convert(“P”,**options) ⇒ image
含義2:這個與第一個方法定義一樣,但是當(dāng)“RGB”圖像轉(zhuǎn)換為8位調(diào)色板圖像時能更好的處理??晒┻x擇的選項為:
 Dither=. 控制顏色抖動。默認(rèn)是FLOYDSTEINBERG,與鄰近的像素一起承擔(dān)錯誤。不使能該功能,則賦值為NONE。
 Palette=. 控制調(diào)色板的產(chǎn)生。默認(rèn)是WEB,這是標(biāo)準(zhǔn)的216色的“web palette”。要使用優(yōu)化的調(diào)色板,則賦值為ADAPTIVE。
 Colors=. 當(dāng)選項palette為ADAPTIVE時,控制用于調(diào)色板的顏色數(shù)目。默認(rèn)是最大值,即256種顏色。
 
定義3:im.convert(mode,matrix) ⇒ image
含義3:使用轉(zhuǎn)換矩陣將一個“RGB”圖像轉(zhuǎn)換為“L”或者“RGB”圖像。變量matrix為4或者16元組。
例子3:下面的例子將一個RGB圖像(根據(jù)ITU-R709線性校準(zhǔn),使用D65亮度)轉(zhuǎn)換到CIE XYZ顏色空間:
from PIL import Image
im1 = Image.open("jing.jpg")
im1.mode
rgb2xyz = (
 0.412453, 0.357580, 0.180423, 0,
 0.212671, 0.715160, 0.072169, 0,
 0.019334, 0.119193, 0.950227, 0 )
im_c3 = im1.convert("L", rgb2xyz)
im_c3.save("he.jpg")
print(im_c3.mode)輸出:L

2、Copy

定義:im.copy() ⇒ image
含義:拷貝這個圖像。如果用戶想粘貼一些數(shù)據(jù)到這張圖,可以使用這個方法,但是原始圖像不會受到影響。

例子:
from PIL import Image
im1 = Image.open("jing.jpg")
im2 = im1.copy()
im2.save("he.jpg")
注:圖像im_copy和im01完全一樣。

3、Crop

定義:im.crop(box) ⇒ image
含義:從當(dāng)前的圖像中返回一個矩形區(qū)域的拷貝。變量box是一個四元組,定義了左、上、右和下的像素坐標(biāo)。
這是一個懶操作。對源圖像的改變可能或者可能不體現(xiàn)在裁減下來的圖像中。為了獲取一個分離的拷貝,對裁剪的拷貝調(diào)用方法load()。

例子:
from PIL import Image
im1 = Image.open("jing.jpg")
print(im1.size)
box = [0,0,650,400] #650(長)400(高)
im_crop = im1.crop(box)
im_crop.save("he.jpg")

4、Draft

定義:im.draft(mode,size)
含義:配置圖像文件加載器,使得返回一個與給定的模式和尺寸盡可能匹配的圖像的版本。例如,用戶可以使用這個方法,在加載一個彩色JPEG圖像時將其轉(zhuǎn)換為灰色圖像,或者從一個PCD文件中提取一個128x192的版本。
注意:這個方法會適時地修改圖像對象(精確地說,它會重新配置文件的讀取器)。如果圖像已經(jīng)被加載,那這個方法就沒有作用了。

例子:
from PIL import Image
im1 = Image.open("jing.jpg")
im_draft = im1.draft("L",(500,500))
print(im_draft.size)
im_draft.save("he.jpg")
輸出:
(650, 650)

5、 Filter

定義:im.filter(filter) ⇒ image
含義:返回一個使用給定濾波器處理過的圖像的拷貝??捎脼V波器需要參考ImageFilter模塊。

例子:
from PIL import Image,ImageFilter
im1 = Image.open("jing.jpg")
im_filter = im1.filter(ImageFilter.BLUR)
im_filter.save("he.jpg")
注:圖像im_filter比im01變得有些模糊了。

6、 Fromstring

定義:im.fromstring(data)
     im.fromstring(data, decoder,parameters)
含義:與函數(shù)fromstring()一樣,但是這個方法會將data加載到當(dāng)前的圖像中。

7、 Getbands

定義:im.getbands()⇒ tuple of strings
含義:返回包括每個通道名稱的元組。例如,對于RGB圖像將返回(“R”,“G”,“B”)。

8、 Getbbox

定義:im.getbbox() ⇒ 4-tuple or None
含義:計算圖像非零區(qū)域的包圍盒。這個包圍盒是一個4元組,定義了左、上、右和下像素坐標(biāo)。如果圖像是空的,這個方法將返回空。

例子:
from PIL import Image
im1 = Image.open("jing.jpg")
print(im1.getbbox())
輸出:
(0, 0, 650, 650)

9、Getcolors

定義:im.getcolors() ⇒ a list of(count, color) tuples or None
 im.getcolors(maxcolors) ⇒ a list of (count, color) tuples or None
含義:(New in 1.1.5)返回一個(count,color)元組的無序list,其中count是對應(yīng)顏色在圖像中出現(xiàn)的次數(shù)。
如果變量maxcolors的值被超過,該方法將停止計算并返回空。變量maxcolors默認(rèn)值為256。為了保證用戶可以獲取圖像中的所有顏色,you can pass in size[0]*size[1](請確保有足夠的內(nèi)存做這件事)。

例子:
from PIL import Image
im1 = Image.open("test.png")
print(im1.getcolors(8888888))輸出:[(2, (255, 255, 255, 233)), (9, (0, 0, 0, 136)), (1, (0, 0, 0, 64)), (2, (0, 0, 0, 24)), (5, (0, 0, 0, 56)).......

10、 Getdata

定義:im.getdata() ⇒ sequence
含義:以包含像素值的sequence對象形式返回圖像的內(nèi)容。這個sequence對象是扁平的,以便第一行的值直接跟在第零行的值后面,等等。
注意:這個方法返回的sequence對象是PIL內(nèi)部數(shù)據(jù)類型,它只支持某些sequence操作,包括迭代和基礎(chǔ)sequence訪問。使用list(im.getdata()),將它轉(zhuǎn)換為普通的sequence。

例子:
from PIL import Image
im1 = Image.open("jing.jpg")
seq = im1.getdata()
print(seq[0])
seq0 = list(seq)
print(seq0[0])
print(len(seq0))
輸出:
(41, 183, 197)
(41, 183, 197)
 #這個值是長和高之積

注:Sequence對象的每一個元素對應(yīng)一個像素點的R、G和B三個值。

11、 Getextrema

定義:im.getextrema() ⇒ 2-tuple
含義:返回一個2元組,包括該圖像中的最小和最大值。

例子:
from PIL import Image
im1 = Image.open("jing.jpg")
print(im1.getextrema())
輸出:
((0, 255), (0,255), (0, 255)) 
該方法返回了R/G/B三個通道的最小和最大值的2元組。

12、 Getpixel

定義:im.getpixel(xy) ⇒ value or tuple
含義:返回給定位置的像素值。如果圖像為多通道,則返回一個元組。
注意:該方法執(zhí)行比較慢;如果用戶需要使用python處理圖像中較大部分?jǐn)?shù)據(jù),可以使用像素訪問對象(見load),或者方法getdata()。

例子:
from PIL import Image
im1 = Image.open("jing.jpg")
print(im1.getpixel((1,1)))
print(im1.getpixel((649,649)))
輸出:
(41, 183, 197)
(236, 210, 153)注:im.getpixel(xy)中的X,Y表示坐標(biāo),從0開始。

13、 Histogram

定義1:im.histogram()⇒ list
含義1:返回一個圖像的直方圖。這個直方圖是關(guān)于像素數(shù)量的list,圖像中的每個象素值對應(yīng)一個成員。如果圖像有多個通道,所有通道的直方圖會連接起來(例如,“RGB”圖像的直方圖有768個值)。
 二值圖像(模式為“1”)當(dāng)作灰度圖像(模式為“L”)處理。

例子1:
from PIL import Image
im1 = Image.open("jing.jpg")
ls = im1.histogram()
print(len(ls))
print(ls[767])
輸出:
1471

14、 Load

定義:im.load()
含義:為圖像分配內(nèi)存并從文件中加載它(或者從源圖像,對于懶操作)。正常情況下,用戶不需要調(diào)用這個方法,因為在第一次訪問圖像時,Image類會自動地加載打開的圖像。

 (New in 1.1.6)在1.1.6及以后的版本,方法load()返回一個用于讀取和修改像素的像素訪問對象。這個訪問對象像一個二維隊列,如:
 pix = im.load()
 print pix[x, y]
 pix[x, y] =value
 通過這個對象訪問比方法getpixel()和putpixel()快很多。

例子:
from PIL import Image
im1 = Image.open("jing.jpg")
lm_load = im1.load()
print(lm_load[649,649])
輸出:
(236, 210, 153)

15、Paste

定義1:im.paste(image,box)
含義1:將一張圖粘貼到另一張圖像上。變量box或者是一個給定左上角的2元組,或者是定義了左,上,右和下像素坐標(biāo)的4元組,或者為空(與(0,0)一樣)。如果給定4元組,被粘貼的圖像的尺寸必須與區(qū)域尺寸一樣。
如果模式不匹配,被粘貼的圖像將被轉(zhuǎn)換為當(dāng)前圖像的模式。

例子1:
from PIL import Image
im1 = Image.open("jing.jpg")
box = [0,0,200,200]
im_crop = im1.crop(box)
im1.paste(im_crop,(200,200,400,400)) #等價于im1.paste(im_crop,(200,200))
im1.save("he.jpg")

定義2:im.paste(colour,box)
含義2:它與定義1一樣,但是它使用同一種顏色填充變量box對應(yīng)的區(qū)域。對于單通道圖像,變量colour為單個顏色值;對于多通道,則為一個元組。

例子2:
from PIL import Image
im1 = Image.open("jing.jpg")
im1.paste((256,256,256),(200,100,500,200))
im1.save("he.jpg")
注:圖像im1的(200,100)位置將出現(xiàn)一個300x100的白色方塊,對于多通道的圖像,如果變量colour只給定一個數(shù)值,將只會應(yīng)用于圖像的第一個通道。如果是“RGB”模式的圖像,將應(yīng)用于紅色通道。

定義3:im.paste(image,box, mask)
含義3:與定義1一樣,但是它使用變量mask對應(yīng)的模板圖像來填充所對應(yīng)的區(qū)域。可以使用模式為“1”、“L”或者“RGBA”的圖像作為模板圖像。模板圖像的尺寸必須與變量image對應(yīng)的圖像尺寸一致。 如果變量mask對應(yīng)圖像的值為255,則模板圖像的值直接被拷貝過來;如果變量mask對應(yīng)圖像的值為0,則保持當(dāng)前圖像的原始值。變量mask對應(yīng)圖像的其他值,將對兩張圖像的值進(jìn)行透明融合。
注意:如果變量image對應(yīng)的為“RGBA”圖像,即粘貼的圖像模式為“RGBA”,則alpha通道被忽略。用戶可以使用同樣的圖像作為原圖像和模板圖像。

例子3:
from PIL import Image
im1 = Image.open("jing.jpg")
box = [100,100,200,200]
im_crop = im1.crop(box)
r,g,b = im_crop.split()
im1.paste(im_crop,(200,100,300,200),b)
im1.save("he.jpg")
注:在圖像im1的(0,0)位置將出現(xiàn)一個半透明的100x100的方塊。

定義4:im.paste(colour,box, mask)
含義4:與定義3一樣,只是使用變量colour對應(yīng)的單色來填充區(qū)域。
例子4:
from PIL import Image
im1 = Image.open("jing.jpg")
box = [100,100,200,200]
im_crop = im1.crop(box)
r,g,b = im_crop.split()
im1.paste((0,256,0),(200,100,300,200),b)
im1.save("he.jpg")
注:在圖像im1的(0,0)位置將出現(xiàn)一個100x100的綠色方塊。

總結(jié)

到此這篇關(guān)于Python圖片處理模塊PIL操作方法(pillow)的文章就介紹到這了,更多相關(guān)Python圖片處理模塊PIL內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Python面向?qū)ο蟪绦蛟O(shè)計多繼承和多態(tài)用法示例

    Python面向?qū)ο蟪绦蛟O(shè)計多繼承和多態(tài)用法示例

    這篇文章主要介紹了Python面向?qū)ο蟪绦蛟O(shè)計多繼承和多態(tài)用法,結(jié)合實例形式分析了Python面向?qū)ο蟪绦蛟O(shè)計中多繼承、多態(tài)的概念、原理、實現(xiàn)方法及相關(guān)操作注意事項,需要的朋友可以參考下
    2019-04-04
  • 用python生成一張壁紙實例代碼

    用python生成一張壁紙實例代碼

    大家好,本篇文章主要講的是用python生成一張壁紙實例代碼,感興趣的同學(xué)趕快來看一看吧,對你有幫助的話記得收藏一下
    2022-02-02
  • python2與python3的print及字符串格式化小結(jié)

    python2與python3的print及字符串格式化小結(jié)

    最近一直在用python寫程序,對于python的print一直很惱火,老是不按照預(yù)期輸出。今天特來總結(jié)一樣print和format,也希望能幫助大家徹底理解它們
    2018-11-11
  • Python 繪圖和可視化詳細(xì)介紹

    Python 繪圖和可視化詳細(xì)介紹

    這篇文章主要介紹了Python 繪圖和可視化詳細(xì)介紹的相關(guān)資料,需要的朋友可以參考下
    2017-02-02
  • python自動化實現(xiàn)登錄獲取圖片驗證碼功能

    python自動化實現(xiàn)登錄獲取圖片驗證碼功能

    這篇文章主要介紹了python自動化實現(xiàn)登錄獲取圖片驗證碼功能,本文通過實例截圖的形式給大家介紹的非常詳細(xì),具有一定的參考借鑒價值,需要的朋友可以參考下
    2019-11-11
  • Python的函數(shù)使用詳解

    Python的函數(shù)使用詳解

    大家好,本篇文章主要講的是Python的函數(shù)使用詳解,感興趣的同學(xué)趕快來看一看吧,對你有幫助的話記得收藏一下,方便下次瀏覽
    2021-12-12
  • Python簡明入門教程

    Python簡明入門教程

    這篇文章主要介紹了Python簡明入門教程,較為詳細(xì)的分析了Python的基本概念及語法基礎(chǔ),有助于Python初學(xué)者更好的掌握Python的基本語法與使用技巧,需要的朋友可以參考下
    2015-08-08
  • Python比較兩個日期的兩種方法詳解

    Python比較兩個日期的兩種方法詳解

    我們使用Python處理日期/時間的時候,經(jīng)常會遇到各種各樣的問題。本文為大家總結(jié)了兩個Python比較兩個日期的方法,需要的可以參考一下
    2022-07-07
  • Python的條件語句與運算符優(yōu)先級詳解

    Python的條件語句與運算符優(yōu)先級詳解

    這篇文章主要介紹了Python的條件語句與運算符優(yōu)先級,是Python入門學(xué)習(xí)中的基礎(chǔ)知識,需要的朋友可以參考下
    2015-10-10
  • Python中Pandas庫提供的函數(shù)pd.DataFrame的基本用法

    Python中Pandas庫提供的函數(shù)pd.DataFrame的基本用法

    pandas庫中的pd.DataFrame()函數(shù)用于創(chuàng)建一個DataFrame對象,它是一個二維表格數(shù)據(jù)結(jié)構(gòu),每列可以是不同的數(shù)據(jù)類型(數(shù)值、字符串、布爾值等),下面這篇文章主要給大家介紹了關(guān)于Python中Pandas庫提供的函數(shù)pd.DataFrame的基本用法,需要的朋友可以參考下
    2024-03-03

最新評論