1. 程式人生 > >Python圖片處理模組PIL(pillow)

Python圖片處理模組PIL(pillow)

本篇包含:一、Image類的屬性:1、Format   2、Mode   3、Size    4、Palette    5、Info

                  二、類的函式:1、New   2、Open   3、Blend   4、Composite   5、Eval   6、Frombuffer   7、Fromstring   8、Merge

                  三、Image類的方法:1、Convert   2、Copy   3、Crop   4、Draft   5、Filter   6、Fromstring   7、Getbands   8、Getbbox   9、Getcolors

                                                     10、Getdata     1 1、 Getextrema    12、Getpixel    13、Histogram    14、Load    15、Paste

一、PIL的基本概念:

PIL中所涉及的基本概念有如下幾個:通道(bands)、模式(mode)、尺寸(size)、座標系統(coordinate system)、調色盤(palette)、資訊(info)和濾波器(filters)。

1、  通道

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

以RGB影象為例,每張圖片都是由三個資料通道構成,分別為R、G和B通道。而對於灰度影象,則只有一個通道。

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

Python的元組與列表類似,不同之處在於元組的元素不能修改,元組使用小括號,列表使用方括號,元組建立很簡單,只需要在括號中新增元素,並使用逗號隔開即可。

方法getbands()的使用如下:

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

2、  模式

影象的模式定義了影象的型別和畫素的位寬。當前支援如下模式:

複製程式碼

1:1位畫素,表示黑和白,但是儲存的時候每個畫素儲存為8bit。
L:8位畫素,表示黑和白。
P:8位畫素,使用調色盤對映到其他模式。
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屬性可以獲取圖片的尺寸。這是一個二元組,包含水平和垂直方向上的畫素數。

屬性mode的使用如下:

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

4、  座標系統

PIL使用笛卡爾畫素座標系統,座標(0,0)位於左上角。注意:座標值表示畫素的角;位於座標(0,0)處的畫素的中心實際上位於(0.5,0.5)。

座標經常用於二元組(x,y)。長方形則表示為四元組,前面是左上角座標。例如,一個覆蓋800x600的畫素影象的長方形表示為(0,0,800,600)。

5、  調色盤

調色盤模式 ("P")使用一個顏色調色盤為每個畫素定義具體的顏色值

6、  資訊

使用info屬性可以為一張圖片新增一些輔助資訊。這個是字典物件。載入和儲存影象檔案時,多少資訊需要處理取決於檔案格式。

屬性info的使用如下:

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

7、  濾波器

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

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

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

方法resize()的使用如下:

複製程式碼

方法resize()的定義為:resize(size, filter=None)=> image
from 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)

複製程式碼

對引數filter不賦值的話,方法resize()預設使用NEAREST濾波器。如果要使用其他濾波器可以通過下面的方法來實現:

複製程式碼

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類有很多函式、方法及屬性,接下來將依次對image類的屬性、函式和方法進行介紹。

一、Image類的屬性

1、  Format

複製程式碼

定義:im.format ⇒ string or None
含義:原始檔的檔案格式。如果是由PIL建立的影象,則其檔案格式為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)
含義:影象的尺寸,按照畫素數計算。它的返回值為寬度和高度的二元組(width, height)。

4、  Palette

複製程式碼

定義:im.palette ⇒ palette or None
含義:顏色調色盤表格。如果影象的模式是“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
含義:儲存影象相關資料的字典。檔案控制代碼使用該字典傳遞從檔案中讀取的各種非影象資訊。大多數方法在返回新的影象時都會忽略這個字典;因為字典中的鍵並非標準化的,對於一個方法,它不能知道自己的操作如何影響這個字典。
     如果使用者需要這些資訊,需要在方法open()返回時儲存這個字典。

 二、類的函式:

1、  New

複製程式碼

定義:Image.new(mode,size) ⇒ image
     Image.new(mode, size, color) ⇒ image
含義:使用給定的變數mode和size生成新的影象。Size是給定的寬/高二元組,這是按照畫素數來計算的。對於單通道影象,變數color只給定一個值;對於多通道影象,變數color給定一個元組(每個通道對應一個值)。
     在版本1.1.4及其之後,使用者也可以用顏色的名稱,比如給變數color賦值為“red”。如果沒有對變數color賦值,影象內容將會被全部賦值為0(影象即為黑色)。如果變數color是空,影象將不會被初始化,即影象的內容全為0。
     這對向該影象複製或繪製某些內容是有用的。
例子:
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不賦值的話,影象內容被設定為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
含義:開啟並確認給定的影象檔案。這個是一個懶操作;該函式只會讀檔案頭,而真實的影象資料直到試圖處理該資料才會從檔案讀取(呼叫load()方法將強行載入影象資料)。如果變數mode被設定,那必須是“r”。
     使用者可以使用一個字串(表示檔名稱的字串)或者檔案物件作為變數file的值。檔案物件必須實現read(),seek()和tell()方法,並且以二進位制模式開啟。
例子:
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對應的函式(該函式應該有一個引數)處理變數image所代表影象中的每一個畫素點。如果變數image所代表影象有多個通道,那變數function對應的函式作用於每一個通道。
     注意:變數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)使用標準的“raw”解碼器,從字串或者buffer物件中的畫素資料產生一個影象儲存。對於一些模式,這個影象儲存與原始的buffer(這意味著對原始buffer物件的改變體現在影象本身)共享記憶體。
      並非所有的模式都可以共享記憶體;支援的模式有“L”,“RGBX”,“RGBA”和“CMYK”。對於其他模式,這個函式與fromstring()函式一致。
注意:版本1.1.6及其以下,這個函式的預設情況與函式fromstring()不同。這有可能在將來的版本中改變,所以為了最大的可移植性,當使用“raw”解碼器時,推薦使用者寫出所有的引數,如下所示:
im =Image.frombuffer(mode, size, data, "raw", mode, 0, 1)
函式Image.frombuffer(mode,size, data, decoder, parameters)與函式fromstring()的呼叫一致。

複製程式碼

7、  Fromstring

定義:Image.fromstring(mode,size, data) ⇒ image
     Image.fromstring(mode, size,data, decoder, parameters) ⇒ image
含義:函式Image.fromstring(mode,size, data),使用標準的“raw”解碼器,從字串中的畫素資料產生一個影象儲存。
函式Image.fromstring(mode,size, data, decoder, parameters)也一樣,但是允許使用者使用PIL支援的任何畫素解碼器。更多資訊可以參考:Writing YourOwn File Decoder.
注意:這個函式只對畫素資料進行解碼,而不是整個影象。如果使用者的字串包含整個影象,可以將該字串包裹在StringIO物件中,使用函式open()來載入。

8、  Merge

複製程式碼

定義:Image.merge(mode,bands) ⇒ image
含義:使用一些單通道影象,建立一個新的影象。變數bands為一個影象的元組或者列表,每個通道的模式由變數mode描述。所有通道必須有相同的尺寸。
變數mode與變數bands的關係:
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類的新例項,這個例項對應於結果影象。

1、  Convert

複製程式碼

定義1:im.convert(mode)⇒ image
含義1:將當前影象轉換為其他模式,並且返回新的影象。
當從一個調色盤影象轉換時,這個方法通過這個調色盤來轉換畫素。如果不對變數mode賦值,該方法將會選擇一種模式,在沒有調色盤的情況下,使得影象和調色盤中的所有資訊都可以被表示出來。
當從一個顏色影象轉換為黑白影象時,PIL庫使用ITU-R601-2 luma轉換公式:
L = R * 299/1000 + G * 587/1000 + B * 114/1000
當轉換為2點陣圖像(模式“1”)時,源影象首先被轉換為黑白影象。結果資料中大於127的值被設定為白色,其他的設定為黑色;這樣影象會出現抖動。如果要使用其他閾值,更改閾值127,可以使用方法point()。
為了去掉影象抖動現象,可以使用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影象,轉換為“1”模式的im_c影象。

定義2:im.convert(“P”,**options) ⇒ image
含義2:這個與第一個方法定義一樣,但是當“RGB”影象轉換為8位調色盤影象時能更好的處理。可供選擇的選項為:
      Dither=. 控制顏色抖動。預設是FLOYDSTEINBERG,與鄰近的畫素一起承擔錯誤。不使能該功能,則賦值為NONE。
      Palette=. 控制調色盤的產生。預設是WEB,這是標準的216色的“web palette”。要使用優化的調色盤,則賦值為ADAPTIVE。
      Colors=. 當選項palette為ADAPTIVE時,控制用於調色盤的顏色數目。預設是最大值,即256種顏色。
 
定義3:im.convert(mode,matrix) ⇒ image
含義3:使用轉換矩陣將一個“RGB”影象轉換為“L”或者“RGB”影象。變數matrix為4或者16元組。
例子3:下面的例子將一個RGB影象(根據ITU-R709線性校準,使用D65亮度)轉換到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
含義:拷貝這個影象。如果使用者想貼上一些資料到這張圖,可以使用這個方法,但是原始影象不會受到影響。

例子:
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
含義:從當前的影象中返回一個矩形區域的拷貝。變數box是一個四元組,定義了左、上、右和下的畫素座標。
這是一個懶操作。對源影象的改變可能或者可能不體現在裁減下來的影象中。為了獲取一個分離的拷貝,對裁剪的拷貝呼叫方法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影象時將其轉換為灰色影象,或者從一個PCD檔案中提取一個128x192的版本。
注意:這個方法會適時地修改影象物件(精確地說,它會重新配置檔案的讀取器)。如果影象已經被載入,那這個方法就沒有作用了。

例子:
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
含義:返回一個使用給定濾波器處理過的影象的拷貝。可用濾波器需要參考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)
含義:與函式fromstring()一樣,但是這個方法會將data載入到當前的影象中。 

7、 Getbands

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

8、 Getbbox

複製程式碼

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

例子:
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是對應顏色在影象中出現的次數。
如果變數maxcolors的值被超過,該方法將停止計算並返回空。變數maxcolors預設值為256。為了保證使用者可以獲取影象中的所有顏色,you can pass in size[0]*size[1](請確保有足夠的記憶體做這件事)。

例子:
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物件形式返回影象的內容。這個sequence物件是扁平的,以便第一行的值直接跟在第零行的值後面,等等。
注意:這個方法返回的sequence物件是PIL內部資料型別,它只支援某些sequence操作,包括迭代和基礎sequence訪問。使用list(im.getdata()),將它轉換為普通的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)
422500        #這個值是長和高之積

注:Sequence物件的每一個元素對應一個畫素點的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
含義:返回給定位置的畫素值。如果影象為多通道,則返回一個元組。
注意:該方法執行比較慢;如果使用者需要使用python處理影象中較大部分資料,可以使用畫素訪問物件(見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表示座標,從0開始。

複製程式碼

13、     Histogram

複製程式碼

定義1:im.histogram()⇒ list
含義1:返回一個影象的直方圖。這個直方圖是關於畫素數量的list,影象中的每個象素值對應一個成員。如果影象有多個通道,所有通道的直方圖會連線起來(例如,“RGB”影象的直方圖有768個值)。
      二值影象(模式為“1”)當作灰度影象(模式為“L”)處理。

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

複製程式碼

14、      Load

複製程式碼

定義:im.load()
含義:為影象分配記憶體並從檔案中載入它(或者從源影象,對於懶操作)。正常情況下,使用者不需要呼叫這個方法,因為在第一次訪問影象時,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元組,或者是定義了左,上,右和下畫素座標的4元組,或者為空(與(0,0)一樣)。如果給定4元組,被貼上的影象的尺寸必須與區域尺寸一樣。
如果模式不匹配,被貼上的影象將被轉換為當前影象的模式。

例子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對應的區域。對於單通道影象,變數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)位置將出現一個300x100的白色方塊,對於多通道的影象,如果變數colour只給定一個數值,將只會應用於影象的第一個通道。如果是“RGB”模式的影象,將應用於紅色通道。

定義3:im.paste(image,box, mask)
含義3:與定義1一樣,但是它使用變數mask對應的模板影象來填充所對應的區域。可以使用模式為“1”、“L”或者“RGBA”的影象作為模板影象。模板影象的尺寸必須與變數image對應的影象尺寸一致。
      如果變數mask對應影象的值為255,則模板影象的值直接被拷貝過來;如果變數mask對應影象的值為0,則保持當前影象的原始值。變數mask對應影象的其他值,將對兩張影象的值進行透明融合。
注意:如果變數image對應的為“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)位置將出現一個半透明的100x100的方塊。

定義4:im.paste(colour,box, mask)
含義4:與定義3一樣,只是使用變數colour對應的單色來填充區域。

例子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)位置將出現一個100x100的綠色方塊。

複製程式碼