安裝Pillow
1
|
pip install pillow |
構建圖像
Image.open(fp, mode ='r' ):打開圖片文件,返回一個Image對象
- fp:圖片路徑
- mode:模式。如果給出,必須是r
1
2
|
from PIL import Image im = Image. open (path) |
Image.alpha_composite(im1, im2):在im1對象上的透明層復合im2,返回一個Image對象
- im1:Image對象1
- im2:Image對象2
1
2
3
4
|
from PIL import Image im1 = Image. open (path1) im2 = Image. open (path2) im3 = Image.alpha_composite(im1,im2) |
Image.blend(im1, im2, alpha):在兩個圖片對象之間進行插值,返回一個Image對象
- im1:Image對象1
- im2:Image對象2
- alpha:透明圖
如果alpha為0.0,則返回第一個圖像的副本。如果alpha為1.0,則返回第二個圖像的副本,基本的算法如下:
1
|
out = image1 * ( 1.0 - alpha ) + image2 * alpha |
Image.eval(image, *args):將函數應用于給定圖像的中每一個像素。請注意,該函數對每個可能的像素值都進行一次評估,因此您不能使用隨機組件或其他生成器。返回一個Image對象
- image:Image對象
- args:一個函數對象和該函數的一個取整參數
1
2
3
4
5
|
from PIL import Image def func(a): return a im1 = Image. open (path1) img = Image. eval (img1,func, 1 ) |
Image.merge(mode, bands):將一組單波段圖像合并成為一個多波段圖像。返回一個Image對象
- mode:用于輸出圖像的模式。支持的模式請看下方Pillow支持的模式表
- bands:輸出圖像中每個波段包含一個單波段圖像的序列
Image.new(mode, size, color=0):根據模式、大小和顏色創(chuàng)建一個新的Image對象。煩會一個Image對象
- mode:用于新圖像的模式。支持的模式請看下方Pillow支持的模式表
- size: 大小,元組類型,包含寬度與高度
- color:用于新圖像的顏色。傳入一個整數的單波段模式,或傳入一個元組的多波段模式,或者傳入一個ImageColor對象
1
2
3
4
5
6
7
8
9
10
|
from PIL import Image # 單個整數值 img = Image.new( "RGBA" ,( 1024 , 768 ), 215 ) # 元組 img = Image.new( "RGBA" ,( 1024 , 768 ),( 215 , 0 , 0 ) # ImageColor from PIL import ImageColor color = ImageColor.getrgb( "#FF0000" ) img = Image.new( "RGBA" ,( 1024 , 768 ),color) img.show() |
從上面代碼運行結果顯示是一個紅色,1024*768的圖像
圖像對象
alpha_composite(im, dest=(0,0), source=(0,0)):在Image對象中符合im,效果與類方法alpha_composite相似。無返回值
- im:Image對象
- dest:指定此(目標)圖像左上角的可選的長度為2的元組(左,上)
- source:蓋源圖像中左上角的長度為2的元組(左,上)或源矩形邊界的長度為4的元組(左,上,右,下)
- copy():復制此圖片
1
2
3
4
|
from PIL import Image img = Image.new( "RGBA" ,( 1024 , 768 ), 215 ) img_copy = img.copy() |
crop(box=None):返回此圖像的一個矩形區(qū)域,為一個Image對象
- box:裁剪矩形,為一個長度為4的元組(左,上,右,下)
1
2
3
|
from PIL import Image img = Image.new( "RGBA" ,( 1024 , 768 ), 215 ) img_copy = img.crop(box = ( 0 , 0 , 500 , 500 )) |
draft(mode, size):配置圖像文件加載器,以便返回盡可能接近給定模式和大小的圖像版本,無返回值
- mode:模式
- size:大小
filter(filter):使用給定的過濾器過濾此圖像,返回一個Image對象
- filter:過濾器
getbands():獲取此圖像中每個波段名稱的元組。返回一個tuple
1
2
3
4
|
from PIL import Image img = Image.new( "RGBA" ,( 1024 , 768 ), 215 ) print img.getbands() # ('R', 'G', 'B', 'A') |
getbbox():計算圖像中非零區(qū)域的邊界框,返回一個tuple
1
2
3
4
|
from PIL import Image img = Image.new( "RGBA" ,( 1024 , 768 ), 215 ) print img.getbbox() # (0, 0, 1024, 768) |
getcolors(maxcolors=256):返回此圖像中使用的顏色列表,返回一個計算與像素元組組成的元組列表
- maxcolors: 最大顏色數量,超過此值,當前方法將返回None
1
2
3
4
|
from PIL import Image img = Image.new( "RGBA" ,( 1024 , 768 ), 215 ) print img.getcolors() # [(786432, (215, 0, 0, 0))] |
getdata(band=None):以包含像素值的序列對象的形式返回此圖像的內容。返回一個可迭代對象。
- band:波段,默認是獲取所有。如果需要獲取單波段,傳入索引值(例如0從“RGB”圖像中獲得“R”波段)。
1
2
3
4
5
6
7
8
9
10
|
from PIL import Image img = Image.new( "RGBA" ,( 1024 , 768 ), 215 ) for item in img.getdata(): print item # 打印結果: ( 215 , 0 , 0 , 0 ) ( 215 , 0 , 0 , 0 ) ( 215 , 0 , 0 , 0 ) ... |
getextrema():獲取每個波段的最小和最大像素值。對于單波段圖像,返回一個長度為2的元組。對與多波段圖像,每個波段包含一個2元組。
1
2
3
4
|
from PIL import Image img = Image.new( "RGBA" ,( 1024 , 768 ), 215 ) print img.getextrema() # ((215, 215), (0, 0), (0, 0), (0, 0)) |
getpalette():返回圖像的調色板,返回一個list對象。如果沒有調色板,則返回None
1
2
3
4
|
from PIL import Image img = Image.new( "RGBA" ,( 1024 , 768 ), 215 ) print img.getpalette() # None |
getpixel(xy):返回給定位置的像素值,返回一個tuple
- xy:位置,以(x,y)給出的坐標。
1
2
3
4
|
from PIL import Image img = Image.new( "RGBA" ,( 1024 , 768 ), 215 ) print img.getpixel(( 500 , 500 )) # (215, 0, 0, 0) |
histogram(mask=None, extrema=None):返回圖像的直方圖。直方圖以像素計數列表的形式返回,返回一個列表。
- mask:掩碼
- extrema:極值
paste(im, box=None, mask=None):將im圖像粘貼到此圖像上面。無返回值
- box:box可以是圖像左上角的長度為2的元組(左,上)或長度為4的元組(左,上,右,下)
- mask:掩碼
1
2
3
4
5
6
7
|
import os from PIL import Image path1 = os.path.join(os.getcwd(), "23.png" ) img1 = Image. open (path1) img = Image.new( "RGBA" ,( 1024 , 768 ), 215 ) img1.paste(img) img1.show() |
putdata(data, scale=1.0, offset=0.0):將像素數據復制到此圖像上面。從圖像左上角開始,直到圖像或序列結束,無返回值。比例和偏移值用于調整序列值:pixel = value * scale + offset。
- data:一個圖像數據序列
- scale:縮放比例值
- offset:偏移量值
1
2
3
4
5
6
7
|
from PIL import Image img = Image.new( "RGBA" ,( 1024 , 768 ), 215 ) img_c = Image.new( "RGBA" ,( 1024 , 768 ), - 100 ) img.putdata(img_c.getdata()) img.show() |
putpalette(data, rawmode='RGB'):附加一個調色板到這個圖像。圖像的模式必須是P或者L。返回一個Image對象
- data:調色板序列
- rawmode:調色板的原始模式
1
2
3
4
5
6
7
|
from PIL import Image img = Image.new( "P" ,( 1024 , 768 ), 215 ) img_c = Image.new( "P" ,( 1024 , 768 ), - 100 ) img_c.putpalette(img.getpalette()) img_c.show() |
quantize(colors=256, method=None, kmeans=0, palette=None):將圖像轉換為具有指定數量的顏色的P模式圖像,返回一個Image對象
- colors:所需顏色的數量,<=256
- method:0:中值切割,1:最大覆蓋率,2:快速八叉樹,3:libimagequant
- kmeans:整數
- palette:量化給定的調色板
1
2
3
4
5
6
|
from PIL import Image img = Image.new( "RGBA" ,( 1024 , 768 ), 215 ) img_q = img.quantize(colors = 256 ,method = 2 ) print img_q # <PIL.Image.Image image mode=P size=1024x768 at 0x2BF7E80> |
resize(size, resample=0, box=None):返回此圖像的調整大小后的副本。返回一個Image對象
- size:以像素為單位的長度為2的元組(寬度,高度)
- resample:重采樣濾波器。可以設置為:Image.NEAREST、Image.BOX、Image.BILINEAR、Image.HAMMING、Image.BICUBIC或者Image.LANCZOS。如果省略,或者圖像模式為1或者P,則設置Image.NEAREST。
- box:一個浮點數組成的長度為4的元組,給出應該縮放的源圖像的區(qū)域。值應該在(0,0,寬度,高度)的矩形內。
1
2
3
4
5
6
|
from PIL import Image img = Image.new( "RGBA" ,( 1024 , 768 ), 215 ) img_r = img.resize(size = ( 500 , 500 )) print img_r # <PIL.Image.Image image mode=RGBA size=500x500 at 0x37A6E80> |
rotate(angle, resample=0, expand=0, ceter=None, translate=None):旋轉圖像,并返回旋轉后的圖像副本。返回Image對象
- angle:角度,逆時針旋轉
- resample:重采樣濾波器。可以是:Image.NEAREST、Image.BILINEAR或者Image.BICUBIC。如果省略,或者圖像模式為1或者P,則設置Image.NEAREST。
- expand:是否展開。如果為true,則展開輸出圖像以使其足夠大以容納整個旋轉后的圖像。如果為false或省略,使輸出圖像的大小與輸入圖像相同。
- center:旋轉中心,長度為2的元組(寬度,高度),原點是左上角,默認是圖像的中心
- translate:旋轉后。一個長度為2的元組(寬度,高度)
1
2
3
4
5
6
7
8
|
import os from PIL import Image path1 = os.path.join(os.getcwd(), "23.png" ) img1 = Image. open (path1) img_r = img1.rotate( 45 ,Image.BICUBIC) img_r.show() |
可以看到,圖像已經逆時針旋轉了45度
save(fp, format=None, **params):保存圖像到給定的文件名下。如果沒有指定格式,則可以使用文件擴展名來確定要使用的格式。無返回值
- fp:文件名或路徑
- format:可選的格式覆蓋
1
2
3
4
5
6
7
8
|
import os from PIL import Image path1 = os.path.join(os.getcwd(), "23.png" ) img1 = Image. open (path1) img_r = img1.rotate( 45 ,Image.BICUBIC) img_r.save(os.path.join(os.getcwd(), "rotate.png" )) |
seek(frame):在這個序列文件中尋找給定的幀。如果您在序列結束之外尋找方法,則會 引發(fā)EOFError異常。當序列文件被打開時,庫會自動尋找0幀。無返回值
- frame:幀號。從0開始
show(title=None, command=None):顯示這個圖像,此方法主要用于調試目的。無返回值
- title:在可能的情況下,用于圖像窗口的可選標題。
- command:用于顯示圖像的命令
split():將圖像分割成單獨的波段。該方法從圖像中返回一個單獨的圖像的元組。例如,拆分“RGB”圖像會創(chuàng)建三個新圖像,每個圖像都包含原始波段(紅色,綠色,藍色)之一的副本。返回一個tuple
1
2
3
4
5
6
7
|
from PIL import Image path1 = os.path.join(os.getcwd(), "23.png" ) img1 = Image. open (path1) data = img1.split() print data # (<PIL.Image.Image image mode=L size=3500x3500 at 0x2DEC438>, <PIL.Image.Image image mode=L size=3500x3500 at 0x2DEC860>, <PIL.Image.Image image mode=L size=3500x3500 at 0x2DEC898>, <PIL.Image.Image image mode=L size=3500x3500 at 0x2DEC8D0>) |
getchannel(channel):返回包含源圖像的單個通道的圖像。返回L模式的圖像,返回一個Image對象
- channel:返回什么頻道的圖像。可以是索引(“RGBA”的”R”通道為0)或通道名稱(“RGBA”的alpha通道為”A”)
1
2
3
4
5
6
7
8
|
from PIL import Image path1 = os.path.join(os.getcwd(), "23.png" ) img1 = Image. open (path1) im = img1.getchannel( 0 ) 或者: im = img1.getchannel( "R" ) |
tell():獲取當前的幀號。返回int
thumbnail(size, resample=3):將此圖像制作成縮略圖。該方法修改圖像以包含其本身的縮略圖版本,不大于給定尺寸。無返回值
- size:大小
- resample:重采樣濾波器。可以是:Image.NEAREST、Image.BILINEAR、Image.BICUBIC或者Image.LANCZOS。如果省略,則默認為Image.BICUBIC
1
2
3
4
5
6
7
|
from PIL import Image path1 = os.path.join(os.getcwd(), "23.png" ) img1 = Image. open (path1) img1.thumbnail(size = ( 500 , 500 ),resample = Image.BICUBIC) print img1 # <PIL.PngImagePlugin.PngImageFile image mode=RGBA size=500x500 at 0x311C3C8> |
tobitmap(name='image'):返回轉換為X11位圖的圖像。此方法只使用于模式為1的圖像,返回一個str
- name:用于位圖變量的前綴名稱
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
|
from PIL import Image img = Image.new( "1" ,( 1024 , 768 ), 215 ) data = img.tobitmap(name = 'abc' ) print data # 結果如下: """ #define abc_width 1024 #define abc_height 768 static char abc_bits[] = { 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ... }; """ |
tobytes(encoder_name='raw', *args):以圖像作為字節(jié)對象返回。為一個str對象
transpose(method):旋轉或翻轉圖像,返回旋轉或翻轉后的圖像副本,一個Image對象
- method:可以是:Image.FLIP_LEFT_RIGHT、Image.FLIP_TOP_BOTTOM、Image.ROTATE_90、Image.ROTATE_180、Image.ROTATE_270、Image.TRANSPOSE或者Image.TRANSVERSE
1
2
3
4
5
6
7
|
from PIL import Image path1 = os.path.join(os.getcwd(), "23.png" ) img1 = Image. open (path1) im = img1.transpose(Image.FLIP_LEFT_RIGHT) im.show() |
可以看出圖像已經翻轉了
close():關閉文件指針
圖像對象屬性
filename:源文件的文件名或路徑。只有通過open方法構建的圖像對象才具有此屬性
1
2
3
4
5
6
7
|
import os from PIL import Image path1 = os.path.join(os.getcwd(), "23.png" ) img = Image. open (path1) print img.filename # 、/aaa/bbb/ccc/23.png |
format:源文件的圖片格式。對于由庫自身創(chuàng)建的圖像,此屬性值為None
1
2
3
4
5
6
7
8
9
10
|
import os from PIL import Image path1 = os.path.join(os.getcwd(), "23.png" ) img = Image. open (path1) print img. format # PNG img = Image.new( "RGBA" ,( 1024 , 768 ), 215 ) print img. format # None |
mode:圖像模式。這是一個字符串,指定圖像使用的像素格式。
1
2
3
4
|
from PIL import Image img = Image.new( "RGBA" ,( 1024 , 768 ), 215 ) print img.mode # RGBA |
size:圖像大小,以像素為單位。大小以長度為2的元組(寬度,高度)給出。類型tuple
1
2
3
4
|
from PIL import Image img = Image.new( "RGBA" ,( 1024 , 768 ), 215 ) print img.size # (1024, 768) |
width:圖像寬度,以像素為單位。類型int
1
2
3
4
|
from PIL import Image img = Image.new( "RGBA" ,( 1024 , 768 ), 215 ) print img.width # 1024 |
height:圖像高度,以像素為單位。類型int
1
2
3
4
|
from PIL import Image img = Image.new( "RGBA" ,( 1024 , 768 ), 215 ) print img.height # 768 |
palette:調色板表。如果模式為P,這應該是ImagePalette類的一個實例。否則為None
1
2
3
4
5
6
7
|
from PIL import Image img = Image.new( "RGBA" ,( 1024 , 768 ), 215 ) print img.palette # None img = Image.new( "P" ,( 1024 , 768 ), 215 ) print img.palette # <PIL.ImagePalette.ImagePalette object at 0x0000000002EF9828> |
info:保存與圖像相關的數據的字典。這個字典被文件處理程序用來傳遞從文件讀取的各種非圖像信息。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
import os from PIL import Image path1 = os.path.join(os.getcwd(), "23.png" ) img = Image. open (path1) print img.info # 結果如下: ''' { 'chromaticity': (0.31269, 0.32899, 0.63999, 0.33001, 0.3, 0.6, 0.15, 0.05999), 'icc_profile': 'xxxx/...', 'dpi': (300, 300) } ''' img = Image.new( "RGBA" ,( 1024 , 768 ), 215 ) print img.info # {} |
Pillow支持的模式表
模式 | 說明 |
---|---|
1 | 1位像素,黑白,每字節(jié)一個像素存儲 |
L | 8位像素,黑白 |
P | 8位像素,使用調色板映射到任何其他模式 |
RGB | 3x8位像素,真彩色 |
RGBA | 4×8位像素,帶透明度掩模的真彩色 |
CMYK | 4x8位像素,分色 |
YCbCr | 3x8位像素,彩色視頻格式 |
LAB | 3×8位像素,L * a * b顏色空間 |
HSV | 3x8位像素,色調,飽和度,值顏色空間 |
I | 32位有符號整數像素 |
F | 32位浮點像素 |
更多關于Image的操作:http://pillow.readthedocs.io/en/latest/reference/Image.html
到此這篇關于Pillow使用Image篇的使用的文章就介紹到這了,更多相關Pillow Image篇內容請搜索服務器之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持服務器之家!
原文鏈接:https://blog.csdn.net/y472360651/article/details/79287371