第二篇 Python图片处理模块PIL(pillow)
生活随笔
收集整理的這篇文章主要介紹了
第二篇 Python图片处理模块PIL(pillow)
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
本篇包含:16、Point ? ?17、Putalpha ? ?18、Putdata ? ?19、Putpalette ? ?20、Putpixel ? ? ?21、Quantize ? ? 22、Resize ??23、Rotate ? ? 24、Save ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 25、Seek ? ?26、Show ??27、Split ? ?28、Tell ? ? 29、Thumbnail ? ?30、Tobitmap ? ??31、Transform ? ??32、Transpose ? ?33、Verify
16、??Point
定義1:im.point(table)? imageim.point(function) ? image 含義1:返回給定查找表對(duì)應(yīng)的圖像像素值的拷貝。變量table為圖像的每個(gè)通道設(shè)置256個(gè)值。如果使用變量function,其對(duì)應(yīng)函數(shù)應(yīng)該有一個(gè)參數(shù)。這個(gè)函數(shù)將對(duì)每個(gè)像素值使用一次,結(jié)果表格將應(yīng)用于圖像的所有通道。如果圖像的模式為“I(整數(shù))”或者“F(浮點(diǎn))”,用戶必須使用function方式,function必須按照下面的格式: argument * scale+ offset 例如: out = im.point(lambda i: i * 1.2 + 10) 用戶可以省略變量scale和offset。例子1: from PIL import Image im = Image.open("jing.png") im_point = im.point(lambda x:x*1.3+5) im_point.save("he.png") 注:圖像im_point_fun比原圖im01亮度增加了很多;因?yàn)閘ambda表達(dá)式中對(duì)原圖的每個(gè)像素點(diǎn)的值都做了增加操作。定義2:im.point(table,mode) ? imageim.point(function, mode) ? image 含義2:與定義1一樣,但是它會(huì)為輸出圖像指定一個(gè)新的模式。這個(gè)方法可以一步將模式為“L”和“P”的圖像轉(zhuǎn)換為模式為“1”的圖像。例子2: from PIL import Image im = Image.open("jing.png") r,g,b = im.split() im_point1 = r.point(lambda x:x*1.3+5,"1") print(im_point1.getpixel((0,0))) im_point1.save("he1.png") im_point2 = r.point(lambda x:0,"1") im_point2.save("he2.png") print(im_point2.getpixel((10,10)))輸出為:
6
0
圖像im_point1為全白圖 圖像im_point2為全黑圖
17、??Putalpha
定義:im.putalpha(band) 含義:將給定的通道拷貝到圖像的alpha層。此處的圖像模式必須為“RGBA”,變量band必須為“L”或者“1”。 (New in PIL 1.1.5)方法putalpha()也可以用于其他模式;圖像原地轉(zhuǎn)換為有alpha通道的模式(通常轉(zhuǎn)換為“LA”或者“RGBA”)。變量band要么為圖像,要么為顏色值(一個(gè)整數(shù))。例子: from PIL import Image im =Image.open("xiao.png") im1.mode im1.putalpha(100) print(im1.mode) print(im1.getpixel((0,0))) 輸出: 'RGB' 'RGBA' (11, 113, 198,100)18、??Putdata
定義:im.putdata(data)im.putdata(data, scale, offset)含義:從sequence對(duì)象中拷貝數(shù)據(jù)到當(dāng)前圖像,從圖像的左上角(0,0)位置開始。變量scale和offset用來調(diào)整sequence中的值: pixel = value *scale + offset 如果變量scale忽略,則默認(rèn)為1.0。如果變量offset忽略,則默認(rèn)為0.0。例子: from PIL import Image im =Image.open("jing.png") r,g,b =im.split() print(r.getpixel((0,0))) print(r.getpixel((1,0))) print(r.getpixel((2,0))) print(r.getpixel((3,0))) r.putdata([1,2,3,4]) print(r.getpixel((0,0))) print(r.getpixel((1,0))) print(r.getpixel((2,0))) print(r.getpixel((3,0))) 輸出: 11 10 9 6 1 2 3 419、??Putpalette
定義:im.putpalette(sequence) 含義:為“P”或者“L”圖像增加一個(gè)調(diào)色板。對(duì)于“L”圖像,它的模式將變化為“P”。調(diào)色板序列需要包含768項(xiàng)整數(shù),每組三個(gè)值表示對(duì)應(yīng)像素的紅,綠和藍(lán)。用戶可以使用768個(gè)byte的字符串代替這個(gè)整數(shù)序列。例子: from PIL import Image im =Image.open("jing.png") r,g,b = im01.split() print(r.mode) r.putpalette([1,2,3]) print(r.mode) 輸出: 'L' 'P'
20、??Putpixel
定義:im.putpixel(xy,colour) 含義:修改指定位置上的像素值。對(duì)于單通道圖像,變量colour為一個(gè)數(shù)值;對(duì)于多通道圖像,變量colour為一個(gè)元組。 注意:這個(gè)方法執(zhí)行比較慢。如果是1.1.6版本,像素訪問對(duì)象(參考load方法)提供了一個(gè)更快的方法修改圖像。如果用戶要生成整幅圖像,可以使用更有效的方法產(chǎn)生一個(gè)python list,然后使用方法putdata()將它拷貝到圖像上去。對(duì)于更大的改變,使用方法paste或者ImageDraw模塊。例子: from PIL import Image im =Image.open("jing.png") print(im.getpixel((0,0))) im.putpixel((0,0),(1,2,3)) print(im.getpixel((0,0))) 輸出: (11, 113, 198) (1, 2, 3)?21、??Quantize
定義:im.quantize(colors,**options) ? image 含義:(不贊成)使用給定的顏色將“L”或者“RGB”圖像轉(zhuǎn)換為“P”圖像,返回新的圖像。 新的代碼中,使用有自適應(yīng)的調(diào)色板的convert方法來代替: out =im.convert("P", palette=Image.ADAPTIVE,colors=256)?22、??Resize
定義:im.resize(size) ? imageim.resize(size, filter) ? image 含義:返回改變尺寸的圖像的拷貝。變量size是所要求的尺寸,是一個(gè)二元組:(width, height)。變量filter為NEAREST、BILINEAR、BICUBIC或者ANTIALIAS之一。如果忽略,或者圖像模式為“1”或者“P”,該變量設(shè)置為NEAREST。 注意:在當(dāng)前的版本中bilinear和bicubic濾波器不能很好地適應(yīng)大比例的下采樣(例如生成縮略圖)。用戶需要使用ANTIALIAS,除非速度比質(zhì)量更重要。23、??Rotate
定義:im.rotate(angle) ? imageim.rotate(angle,filter=NEAREST, expand=0) ? image 含義:返回一個(gè)按照給定角度順時(shí)鐘圍繞圖像中心旋轉(zhuǎn)后的圖像拷貝。 變量filter應(yīng)該是NEAREST、BILINEAR或者BICUBIC之一。如果省略該變量,或者圖像模式為“1”或者“P”,則默認(rèn)為NEAREST。 變量expand,如果為true,表示輸出圖像足夠大,可以裝載旋轉(zhuǎn)后的圖像。如果為false或者缺省,則輸出圖像與輸入圖像尺寸一樣大。例子: from PIL import Image im = Image.open("jing.png") im_30 = im.rotate(30) im_30.save("he1.png") im_31 = im.rotate(30,Image.BICUBIC,1) im_31.save("he2.png")注:im_30旋轉(zhuǎn)30度大小不變,im_31旋轉(zhuǎn)30度大小改變
24、 ?Save
定義:im.save(outfile,options…)im.save(outfile, format, options…) 含義:使用給定的文件名保存圖像。如果變量format缺省,如果可能的話,則從文件名稱的擴(kuò)展名判斷文件的格式。該方法返回為空。關(guān)鍵字options為文件編寫器提供一些額外的指令。如果編寫器不能識(shí)別某個(gè)選項(xiàng),它將忽略它。用戶可以使用文件對(duì)象代替文件名稱。在這種情況下,用戶必須指定文件格式。文件對(duì)象必須實(shí)現(xiàn)了seek()、tell()和write()方法,且其以二進(jìn)制模式打開。如果方法save()因?yàn)槟承┰蚴?#xff0c;這個(gè)方法將產(chǎn)生一個(gè)異常(通常為IOError異常)。如果發(fā)生了異常,該方法也有可能已經(jīng)創(chuàng)建了文件,并向文件寫入了一些數(shù)據(jù)。如果需要的話,用戶的應(yīng)用程序可以刪除這個(gè)不完整的文件。25、??Seek
定義:im.seek(frame) 含義:在給定的文件序列中查找指定的幀。如果查找超越了序列的末尾,則產(chǎn)生一個(gè)EOFError異常。當(dāng)文件序列被打開時(shí),PIL庫自動(dòng)指定到第0幀上。 注意:在當(dāng)前的版本上,大多數(shù)序列格式只允許用戶查找下一幀,不能跳躍式查找指定的幀。例子:from PIL import Image im_gif = Image.open("xin.gif") print(im_gif.mode) im_gif.seek(2) im_gif.save("he1.png") im_gif.seek(8) im_gif.save("he2.png") 輸出:'P' 注:通過上面的code,分別找到了第2幀和第8幀圖像。
26、??Show
定義:im.show() 含義:顯示一張圖像。這個(gè)方法主要用于調(diào)試。 在Unix平臺(tái),這個(gè)方法將圖像保存為臨時(shí)的PPM文件,并且調(diào)用xv功能。 在widows中,它將圖像保存為臨時(shí)的BMP文件,并且使用標(biāo)準(zhǔn)的BMP顯示功能顯示它。 這個(gè)方法返回空。例子: from PIL import Image im = Image.open("jing.png") im.show()27、??Split
定義:im.split() ? sequence 含義:返回當(dāng)前圖像各個(gè)通道組成的一個(gè)元組。例如,分離一個(gè)“RGB”圖像將產(chǎn)生三個(gè)新的圖像,分別對(duì)應(yīng)原始圖像的每個(gè)通道(紅,綠,藍(lán))。例子: from PIL import Image im = Image.open("jing.png") r,g,b = im.split() b.save("he.png") print(b.getpixel((1,3)))28、??Tell
定義:im.tell() ? integer 含義:返回當(dāng)前幀所處位置,從0開始計(jì)算。例子: from PIL import Image im_gif = Image.open("xin.gif") print(im_gif.tell()) im_gif.seek(8) print(im_gif.tell()) 輸出: 0 829、??Thumbnail
定義:im.thumbnail(size)im.thumbnail(size, filter) 含義:修改當(dāng)前圖像,使其包含一個(gè)自身的縮略圖,該縮略圖尺寸不大于給定的尺寸。這個(gè)方法會(huì)計(jì)算一個(gè)合適的縮略圖尺寸,使其符合當(dāng)前圖像的寬高比,調(diào)用方法draft()配置文件讀取器,最后改變圖像的尺寸。變量filter應(yīng)該是NEAREST、BILINEAR、BICUBIC或者ANTIALIAS之一。如果省略該變量,則默認(rèn)為NEAREST。 注意:在當(dāng)前PIL的版本中,濾波器bilinear和bicubic不能很好地適應(yīng)縮略圖產(chǎn)生。用戶應(yīng)該使用ANTIALIAS,圖像質(zhì)量最好。如果處理速度比圖像質(zhì)量更重要,可以選用其他濾波器。這個(gè)方法在原圖上進(jìn)行修改。如果用戶不想修改原圖,可以使用方法copy()拷貝一個(gè)圖像。這個(gè)方法返回空。例子: from PIL import Image im = Image.open("jing.png") im.thumbnail((10,10)) im.save("he.png") 注:已經(jīng)為圖像im01創(chuàng)建了不大于10x10的縮略圖。30、??Tobitmap
定義:im.tobitmap()? string 含義:返回轉(zhuǎn)換為X11的bitmap圖像。31、??Transform
定義1:im.transform(size,method, data) ? imageim.transform(size, method, data, filter) ? image 含義1:使用給定的尺寸生成一張新的圖像,與原圖有相同的模式,使用給定的轉(zhuǎn)換方式將原圖數(shù)據(jù)拷貝到新的圖像中。在當(dāng)前的PIL版本中,參數(shù)method為EXTENT(裁剪出一個(gè)矩形區(qū)域),AFFINE(仿射變換),QUAD(將正方形轉(zhuǎn)換為矩形),MESH(一個(gè)操作映射多個(gè)正方形)或者PERSPECTIVE。變量filter定義了對(duì)原始圖像中像素的濾波器。在當(dāng)前的版本中,變量filter為NEAREST、BILINEAR、BICUBIC或者ANTIALIAS之一。如果忽略,或者圖像模式為“1”或者“P”,該變量設(shè)置為NEAREST。 含義2:從圖像中裁剪一個(gè)區(qū)域。變量data為指定輸入圖像中兩個(gè)坐標(biāo)點(diǎn)的4元組(x0,y0,x1,y1)。輸出圖像為這兩個(gè)坐標(biāo)點(diǎn)之間像素的采樣結(jié)果。例如,如果輸入圖像的(x0,y0)為輸出圖像的(0,0)點(diǎn),(x1,y1)則與變量size一樣。這個(gè)方法可以用于在當(dāng)前圖像中裁剪,放大,縮小或者鏡像一個(gè)任意的長(zhǎng)方形。它比方法crop()稍慢,但是與resize操作一樣快。 含義3:對(duì)當(dāng)前的圖像進(jìn)行仿射變換,變換結(jié)果體現(xiàn)在給定尺寸的新圖像中。變量data是一個(gè)6元組(a,b,c,d,e,f),包含一個(gè)仿射變換矩陣的第一個(gè)兩行。輸出圖像中的每一個(gè)像素(x,y),新值由輸入圖像的位置(ax+by+c, dx+ey+f)的像素產(chǎn)生,使用最接近的像素進(jìn)行近似。這個(gè)方法用于原始圖像的縮放、轉(zhuǎn)換、旋轉(zhuǎn)和裁剪。定義4:im.transform(size,QUAD, data) ? imageim.transform(size, QUAD, data, filter) ? image 含義4:輸入圖像的一個(gè)四邊形(通過四個(gè)角定義的區(qū)域)映射到給定尺寸的長(zhǎng)方形。變量data是一個(gè)8元組(x0,y0,x1,y1,x2,y2,x3,y3),它包括源四邊形的左上,左下,右下和右上四個(gè)角。含義5:與QUAD類似,但是變量data是目標(biāo)長(zhǎng)方形和對(duì)應(yīng)源四邊形的list。定義6:im.transform(size,PERSPECTIVE, data) ? imageim.transform(size, PERSPECTIVE, data, filter) ? image 含義6:對(duì)當(dāng)前圖像進(jìn)行透視變換,產(chǎn)生給定尺寸的新圖像。變量data是一個(gè)8元組(a,b,c,d,e,f,g,h),包括一個(gè)透視變換的系數(shù)。對(duì)于輸出圖像中的每個(gè)像素點(diǎn),新的值來自于輸入圖像的位置的(a x + b y + c)/(g x + h y + 1), (d x+ e y + f)/(g x + h y + 1)像素,
使用最接近的像素進(jìn)行近似。這個(gè)方法用于原始圖像的2D透視。
32、??Transpose
定義:im.transpose(method)? image 含義:返回當(dāng)前圖像的翻轉(zhuǎn)或者旋轉(zhuǎn)的拷貝。 變量method的取值為:FLIP_LEFT_RIGHT,FLIP_TOP_BOTTOM,ROTATE_90,ROTATE_180,或者ROTATE_270。例子: from PIL import Image im = Image.open("jing.png") im = im01.transpose(Image.FLIP_LEFT_RIGHT) 注:圖像im為圖像im01的水平方向鏡像。33、 ? ?Verify
定義:im.verify() 含義:嘗試判斷文件是否損壞,實(shí)際上并沒有對(duì)圖像數(shù)據(jù)進(jìn)行解析。如果這個(gè)方法發(fā)現(xiàn)了任何問題,它將產(chǎn)生對(duì)應(yīng)的異常。這個(gè)方法只工作于剛打開的圖像;如果圖像已經(jīng)被加載,該方法的結(jié)果將會(huì)是未定義的。如果用戶在使用這個(gè)方法后需要加載圖像,用戶需要重新打開圖像文件。 注意:這個(gè)方法不能捕獲所有的錯(cuò)誤;要捕獲解碼錯(cuò)誤,用戶必須加載整個(gè)圖像。例子: from PIL import Image im01 = Image.open("jing.png") im01.verify() 注:沒有任何輸出,表示圖像im01是沒有損壞的。?
轉(zhuǎn)載于:https://www.cnblogs.com/chimeiwangliang/p/7133308.html
總結(jié)
以上是生活随笔為你收集整理的第二篇 Python图片处理模块PIL(pillow)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 保护个人信息需出“重典”
- 下一篇: 40.4. SOCKS