版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、這是PIL的官方手冊(cè),2005年5月6日本中文手冊(cè)來你可以在PythonWarelibrary找到改文檔其它格式的版本以及先前的版本原版出處:htt目錄1 .PythonImagingLibrary中文手冊(cè)2 .第一部分:介紹1. 概覽1. 介紹2. 圖像歸檔處理3. 圖像顯示4. 圖像處理2. 入門導(dǎo)引1. 使用Image類2. 讀寫圖像3. 裁剪、粘貼和合并圖像4. 滾動(dòng)一幅圖像5. 分離與合并通道3. 幾何變換1. 簡(jiǎn)單的幾何變換2. transpose圖像4. 顏色變換1. 轉(zhuǎn)換圖像顏色模式5. 圖像增強(qiáng)1. 濾波器1. 使用濾波器2. 點(diǎn)操作1. 使用點(diǎn)變換2. 處理單個(gè)通道3. 增
2、強(qiáng)1. 增強(qiáng)圖像6. 圖像序列1. 讀取圖像序列2. 一個(gè)序列I失代類7. Postscript格式打1. DrawingPostscript8. 更多關(guān)干讀取圖像1. 捽制解碼器3. 概念1. a>2. U3. 大小4. 坐標(biāo)系統(tǒng)5. 調(diào)色板6. 信息7.4. 第二部分:模塊手冊(cè)5. Image模塊1.2. 函數(shù)1. new2. open3. blend4. composite5. eval6. frombuffer7. fromstring8. merge3. 方法1. convert2. copy3. crop4. draft5. filter6. fromstring7. get
3、bands8. getbbox9. getdata10. getextrema11. getpixel12. histogram13. load14. offset15. paste16. point17. putalpha18. putdata19. putpalette20. putpixel21. resize22. rotate23. save24. seek25. show26. split27. 她28. thumbnail29. tobitmap30. tostring31. transform32. transpose33. verify4. 屬性1. format2. mod
4、e3. size4. palette5. info6. ImageChops模塊1. 函數(shù)1. constant2. duplicate3. invert4. lighter5. darker6. difference7. multiply8. screen9. add10. subtract11. blend12. composite13. offset7. ImageC010r模塊1. ColourNames2. 函數(shù)1. getrgb2. getcolor8. ImageDraw樟塊1. Example2. Concepts1. Coordinates2. ColourNames3. F
5、onts3. 函數(shù)1. Draw4.1. arc2. bitmap3. chord4. ellipse5. line6. pieslice7. point8. polygon9. rectangle10. text11. textsize5. Options1. outline2. fill3. font6. Compatibility,1. ImageDraw2. setink3. setfill4. setfont9. ImageEnhance模塊1. Example2. Interface3. TheColorClass4. TheBrightnessClass5. TheContras
6、tClass6. TheSharpnessClass10. ImageFile模塊1. Example2. 函數(shù)1. Parser3. 方法1. feed11. ImageFileIO模塊1. 函數(shù)12. ImageFilter橫塊1. Example2. Filters1. Kernel2. RankFilter3. MinFilter4. MedianFilter5. MaxFilter13. ImageFont模塊1. load2. load_path3. truetype4. load_default3.方法1. getsize2. getmask14. ImageGrab模塊1. 函
7、數(shù)1. grab2. grabclipboard15. ImageOps模塊1. 函數(shù)1. autocontrast2. colorize3. crop4. deform5. equalize6. expand7. 他8. 酗9. grayscale10. invert11. mirror12. posterize13. solarize16. ImagePath模塊1. 函數(shù)1. Path17. ImagePalette模塊1.2. 如1. ImagePalette18. ImageSequence橫塊1. 函數(shù)1. Iterator2. ML1. Operator口19. ImageSta
8、t模塊1. 函數(shù)1. Stat2. Attributes1. extrema2. count3.sum4.sum25.pixel6.median7.rms8.var9.stddev20. ImageTk模塊1. TheBitmapimageClass2. ThePhotoImageClass21. ImageWin模塊1. Dib類1. Dib2. 方法1. expose2. draw3. palette4. paste22. PSDraw模塊1. Classes1. PSDraw2. PSDraw方法1.begin2.end3.line4.rectangle5.text6.setfont7.
9、setink8.sefill23. ImageCrackCode模塊(PILPlus)1. 函數(shù)1. CrackCode2. 方法andattributes1.area2.bbox3.caliper4.centroid5.edge6.links7.offset8.start9.top10.hjt11. topath12. getmask13. getoutline24.ImageMath模塊(PILPlus)1. WF2. 函數(shù)1. eval3. 表達(dá)式語(yǔ)法1.2. 內(nèi)建函數(shù)25 .第三部分:工具手冊(cè)一26 .pildriver工具1. 虹2. ThePILDriverClass3. 方法4.
10、 pilconvert工具5. pifile工具6. pilfont工具7. pilprint工具27 .K1. 軟件許可證2. 技術(shù)支持3. 圖像文件格式4. 編寫自己的文件解碼器28 .譯注:中英文術(shù)語(yǔ)對(duì)照表第一部分:介紹?PIL1.1.5|2005年5月5日|FredrikLundh概覽介紹PythonImagingLibrary?為Python解釋器提供了圖像處理的功能。這個(gè)庫(kù)提供了廣泛的文件格式支持、高效的內(nèi)部表示以及相當(dāng)強(qiáng)大的圖像處理功能這個(gè)圖像處理庫(kù)的核心被設(shè)計(jì)成為能夠快速訪問以幾種基本像素類型表示的圖像數(shù)據(jù)。它為通用圖像處理工具提供了一個(gè)堅(jiān)實(shí)基礎(chǔ)。讓我們來看一些這個(gè)庫(kù)可能的用途
11、:圖像歸檔處理PythonImagingLibrary適合編寫圖像歸檔和批處理應(yīng)用程序。使用這個(gè)庫(kù)可以創(chuàng)建縮略圖、轉(zhuǎn)換文件格式、打印圖像等。當(dāng)前版本的庫(kù)能夠識(shí)別和讀取很多的圖像格式。而能夠輸出的格式被特意限制于在交換和展示圖像中最常用的格式上。圖像顯示當(dāng)前版本的庫(kù)包含Tk的PhotoImage?和?Bitmapimage汝口,也包含Windows的DIB接口(可以同PythonWin和其他基于Windows的界面工具包一起使用)。還有一些其他的PIL支持提供了很多其他的GUI工具包。為了調(diào)試方便,庫(kù)中有一個(gè)?show?方法,它把圖像保存到磁盤中,并調(diào)用外部顯示工具來顯示它。圖像處理這個(gè)庫(kù)提供了
12、基本的圖像處理功能,包括點(diǎn)操作、一些內(nèi)建濾波核的濾波操作以及顏色空間變換操作。這個(gè)庫(kù)也支持圖像的縮放、旋轉(zhuǎn)及任何仿射(affine)變換。庫(kù)中包含一個(gè)histogram方法,可以從圖像中提取某些統(tǒng)計(jì)特征。用它可以實(shí)現(xiàn)自動(dòng)的對(duì)比度增強(qiáng)以及全局統(tǒng)計(jì)分析功能。入門與引使用Image類PythonImagingLibrary中最重要的類是Image類,它定義在與它同名的模塊中。有多種創(chuàng)建這個(gè)類的對(duì)象的方法:可以從文件中讀取得到,也可以從其他圖像經(jīng)處理得到,或者創(chuàng)建一個(gè)全新的。要從文件讀取圖像,可以使用Image模塊提供的open函數(shù)切換行號(hào)顯示1>>>importImage2>
13、>>im=Image.open("lena.ppm")如果成功,這個(gè)函數(shù)返回一個(gè)Image對(duì)象??梢允褂眠@個(gè)對(duì)象的屬性來查看文件的內(nèi)容。切換行號(hào)顯示1 >>>printim.format,im.size,im.mode2 PPM(512,512)RGB3format屬性表示圖像的原始格式。如果圖像不是從文件中讀取的,則它被設(shè)置成None。size屬性是一個(gè)2元組,表示圖像的寬度和高度(以像素為單位)。mode屬性定義圖像的色彩通道的數(shù)量與名字,同時(shí)也包括像素的類型和顏色深度信息。通常來說,灰度圖像的mode是"L"(lumi
14、nance),真彩色圖像的mode是"RGB",而用來打印的圖像的mode是"CMYK"。如果文件不能打開,會(huì)拋出一個(gè)IOError異常。一旦有了一個(gè)Image類的對(duì)象,接下來就可以使用這個(gè)類定義的方法來處理和操作圖像了。比如說,顯示剛才打開的文件:切換行號(hào)顯示1 >>>im.show()2(show的標(biāo)準(zhǔn)實(shí)現(xiàn)不是很高效,因?yàn)樗葘D像保存成一個(gè)臨時(shí)文件,然后調(diào)用xv程序來顯示圖像。如果你沒有安裝xv,它甚至不能工作。然而如果它可用,它將是非常方便的出錯(cuò)和測(cè)試的工具。)接下來的內(nèi)容將對(duì)庫(kù)中提供的一些函數(shù)進(jìn)行一個(gè)概述。讀寫圖像Python
15、ImagingLibrary支持很廣泛的圖象文件格式。要從磁盤上讀取文件,使用Image模塊提供的open函數(shù)。你不必了解你要打開的文件的格式,庫(kù)會(huì)自動(dòng)根據(jù)文件的內(nèi)容來確定圖像的格式。要保存文件,使用Image類的save方法。保存文件時(shí),文件名就變得非常重要了。除非你指定了格式,否則庫(kù)會(huì)根據(jù)文件擴(kuò)展名來決定使用哪種格式存儲(chǔ)。將文件轉(zhuǎn)換成JPEG切換行號(hào)顯示1importos,sys4forinfileinsys.argv1:56 outfile=f+".jpg"7 ifinfile!=outfile:8 try:9 Image.open(infile).save(outf
16、ile)10 exceptIOError:11 print"cannotconvert",infile12save方法可以帶第二個(gè)參數(shù),用來顯式指定要保存的文件的格式。如果要使用非標(biāo)準(zhǔn)的擴(kuò)展名,就必須這樣指定文件格式:創(chuàng)建JPEG縮略圖切換行號(hào)顯示1importos,sys2importImage34size=128,12856 forinfileinsys.argv1:7 0+".thumbnail"8 ifinfile!=outfile:9 try:10 im=Image.open(infile)11 im.thumbnail(size)12 im.
17、save(outfile,"JPEG")13 exceptIOError:14 print"cannotcreatethumbnailfor",infile15有一點(diǎn)非常重要的需要注意的是,除非到了迫不得已的時(shí)候,庫(kù)不會(huì)裝載或者解碼原始的點(diǎn)陣數(shù)據(jù)。當(dāng)打開一個(gè)文件的時(shí)候,庫(kù)會(huì)讀取文件頭以獲得文件格式、顏色模式、圖像大小等屬性,但是文件剩余的部分不會(huì)馬上處理。這意味著,文件打開操作是很快的,它與文件的大小、壓縮的類型沒有關(guān)系。這里是一個(gè)快速識(shí)別一系列圖像文件的簡(jiǎn)單例子:識(shí)別圖像文件切換行號(hào)顯示1importsys2 import Image34 forinf
18、ileinsys.argv1:5 try:6 im=Image.open(infile)7 printinfile,im.format,"%dx%d"%im.size,im.mode8 exceptIOError:9 pass10裁剪、粘貼和合并圖像Image類提供一些對(duì)圖像中的某一區(qū)域進(jìn)行處理的方法。要從圖像中提取一塊子矩形區(qū)域,使用crop方法。從圖像中拷貝一塊子矩形區(qū)域?=切換行號(hào)顯示1 box=(100,100,400,400)2 region=im.crop(box)3區(qū)域由一個(gè)4元組定義,表示為坐標(biāo)是(left,upper,right,lower)0Python
19、ImagingLibrary使用左上角為(0,0)的坐標(biāo)系統(tǒng)。同時(shí)要注意,這些坐標(biāo)指向像素之間的位置,因此上述例子中描述的區(qū)域的大小為300x300像素。區(qū)域圖像能夠經(jīng)過某些特定的處理并粘回原處。處理一塊子矩形區(qū)域,并粘回原處切換行號(hào)顯示1 region=region.transpose(Image.ROTATE_180)2 im.paste(region,box)3當(dāng)把區(qū)域粘回圖像時(shí),指定的區(qū)域大小必須和區(qū)域圖像的大小相同。此外,區(qū)域不能超出圖像的邊界。然而,原始圖像的模式和區(qū)域圖像的模式不必相同。如果不相同,區(qū)域圖像的模式會(huì)在粘貼前被自動(dòng)轉(zhuǎn)換(細(xì)節(jié)請(qǐng)查看后面有關(guān)顏色變換的章節(jié))o這里有另一
20、個(gè)例子:滾動(dòng)一幅圖像切換行號(hào)顯示1 defroll(image,delta):2 "Rollanimagesideways34 xsize,ysize=image.size56 delta=delta%xsize78910111213if delta =0: return imagepart1 = image.crop(0,part2 = image.crop(delta, image.paste(part2, (0,image.paste(part1, (xsize-delta,0, delta, ysize)0, xsize, ysize)0, xsize-delta, ysiz
21、e)0, xsize, ysize)14returnimage15更高級(jí)的技巧是,paste方法可以帶一個(gè)透明掩模作為可選參數(shù)。在這個(gè)掩模中,像素值255代表被粘貼的圖像在那個(gè)位置上是不透明的。(就是說,此處顯示被粘貼的圖像上的值。)像素值0表示被粘貼的圖像是完全透明的。在它們之間的值表示不同程度的透明度。PythonImagingLibrary還允許對(duì)一幅多通道圖像(比如RGB圖像)的單個(gè)通道進(jìn)行操作。split方法能夠創(chuàng)建一組新的圖像,每一幅都是原來多通道圖像的一個(gè)通道。merge函數(shù)以一個(gè)模式和一組圖像的元組為參數(shù),把這些圖像組成一幅新圖像。下面的例子實(shí)現(xiàn)交換一幅RGB圖像的三個(gè)通道:分
22、離與合并通道切換行號(hào)顯示1 r,g,b=im.split()2 im=Image.merge("RGB",(b,g,r)3幾何變換Image類包含resize和rotate方法來縮放和旋轉(zhuǎn)圖像。前者帶一個(gè)tuple類型的參數(shù)來表示新的圖像大小,后者帶一個(gè)逆時(shí)針旋轉(zhuǎn)的角度值作為參數(shù)。簡(jiǎn)單的幾何變換切換行號(hào)顯示1 out = im.resize(2 out = im.rotate(128,128)45)#degreescounter-clockwise3如果要將圖像旋轉(zhuǎn)90度的整數(shù)倍,可以使用rotate或者transpose方法。后者還可以用來水平或者垂直鏡像一幅圖像。tra
23、nspose圖像切換行號(hào)顯示1 out=im.transpose(Image.FLIP_LEFT_RIGHT)2 out=im.transpose(Image.FLIP_TOP_BOTTOM)3 out=im.transpose(Image.ROTATE_90)4 out=im.transpose(Image.ROTATE_180)5 out=im.transpose(Image.ROTATE_270)6There'snodifferenceinperformanceorresultbetweentranspose(ROTATE)andcorrespondingrotateoperat
24、ions.一個(gè)更通用的變換方法是transform,在參考手冊(cè)中有對(duì)它的詳細(xì)敘述。顏色變換PythonImagingLibrary提供convert函數(shù),可以將圖像在不同的像素格式間轉(zhuǎn)換。轉(zhuǎn)換圖像顏色模式切換行號(hào)顯示1im=Image.open("lena.ppm").convert("L")2庫(kù)支持在所有支持的顏色模式和"L"以及"RGB"之間的直接轉(zhuǎn)換。其他顏色模式之間的轉(zhuǎn)換要借助于中間圖像模式(通常是"RGB"模式)。圖像增強(qiáng)PythonImagingLibrary提供一系列的函數(shù)和模塊來
25、進(jìn)行圖像增強(qiáng)。濾波器ImageFilter?模塊中包含一些預(yù)定義的增強(qiáng)濾波器,用filter方法來使用濾波器。使用濾波器切換行號(hào)顯示1 importImageFilter2 out=im.filter(ImageFilter.DETAIL)3點(diǎn)操作point方法可以對(duì)圖像的像素值進(jìn)行變換(比如對(duì)比度變換)。在大多數(shù)場(chǎng)合,使用函數(shù)對(duì)象(帶一個(gè)參數(shù))作為參數(shù)傳遞給point方法。每一個(gè)像素使用這個(gè)函數(shù)對(duì)象進(jìn)行變換:使用點(diǎn)變換切換行號(hào)顯示1 #multiplyeachpixelby1.22 out=im.point(lambdai:i*1.2)3用上面的技巧,你可以對(duì)圖像用任何簡(jiǎn)單的表達(dá)式進(jìn)行變換。
26、你還可以結(jié)合使用point和paste方法來有選擇的改變一幅圖像:處理單個(gè)通道切換行號(hào)顯示1 #splittheimageintoindividualbands2 source=im.split()34 R,G,B=0,1,256 #selectregionswhereredislessthan1007 mask=sourceR.point(lambdai:i<100and255)89 #processthegreenband10 out=sourceG.point(lambdai:i*0.7)1112 #pastetheprocessedbandback,butonlywherered
27、was<10013 sourceG.paste(out,None,mask)1415 #buildanewmultibandimage16 im=Image.merge(im.mode,source)17注意用來創(chuàng)建mask的語(yǔ)法:切換行號(hào)顯示1 imout=im.point(lambdai:expressionand255)2Python只計(jì)算一個(gè)邏輯表達(dá)式的一部分,只要能確定表達(dá)式的結(jié)果其他部分就不進(jìn)行計(jì)算了,并把最后計(jì)算得到的值作為表達(dá)式的值返回。因此,如果上述expression是false(0),Python就不會(huì)檢查第二個(gè)參數(shù),因此返回0,否則返回255。增強(qiáng)對(duì)于更多更高級(jí)的
28、圖像增強(qiáng),可以使用ImageEnhance?模塊。一旦從圖像上創(chuàng)建了增強(qiáng)對(duì)象,你就可以嘗試采用各種不同的參數(shù)進(jìn)行快速的增強(qiáng)處理了。你能通過這樣的方法來調(diào)整圖像的對(duì)比度、亮度、色彩平衡和銳度。增強(qiáng)圖像切換行號(hào)顯示1importImageEnhance23 enh=ImageEnhance.Contrast(im)4 enh.enhance(1.3).show("30%morecontrast")5圖像序列PythonImagingLibrary包含對(duì)于圖像序列(也稱作動(dòng)畫格式)的基本支持。支持的序列格式包括FLI/FLC,GIF,和一些試驗(yàn)性的格式。TIFF文件也能包含超過一
29、幀的圖像。當(dāng)你打開一個(gè)序列文件時(shí),PIL會(huì)自動(dòng)加載序列中的第一幀。你可以使用seek和tell方法在不同幀之間移動(dòng):讀取圖像序列切換行號(hào)顯7K1 importImage23 im=Image.open("animation.gif")4 im.seek(1)#skiptothesecondframe56 try:7 while1:8 im.seek(im.tell()+1)9 #dosomethingtoim10 exceptEOFError:11 pass#endofsequence12正如這個(gè)例子所示,當(dāng)序列結(jié)束時(shí),你會(huì)得到一個(gè)EOFError異常。注意,當(dāng)前版本庫(kù)的絕
30、大多數(shù)驅(qū)動(dòng)只允許你移動(dòng)到下一幀(如上面例子所示)。如果要回到文件的開頭,你可能必須重新打開它。下面的迭代類讓你能夠使用for循環(huán)來迭代圖像序列:一個(gè)序列迭代類切換行號(hào)顯示1 classImageSequence:2 def_init_(self,im):3 self.im=im4 def_getitem_(self,ix):5 try:6 ifix:7 self.im.seek(ix)8 returnself.im9 exceptEOFError:10 raiseIndexError#endofsequence1112 forframeinImageSequence(im):13 #.doso
31、methingtoframe.14Postscript格式打印PythonImagingLibrary提供將圖像、文字和圖形輸出到Postscript打印機(jī)的功能。這是一個(gè)簡(jiǎn)單的例子:DrawingPostscript切換行號(hào)顯示2 importPSDraw34 im=Image.open("lena.ppm")5 title="lena"6 box=(1*72,2*72,7*72,10*72)#inpoints78 ps=PSDraw.PSDraw()#defaultissys.stdout9 ps.begin_document(title)1011
32、#drawtheimage(75dpi)12 ps.image(box,im,75)13 ps.rectangle(box)1415 #drawcenteredtitle16 ps.setfont("HelveticaNarrow-Bold",36)17 w,h,b=ps.textsize(title)18 ps.text(4*72-w/2,1*72-h),title)1920 ps.end_document()21更多關(guān)于讀取圖像前面敘述過,Image模塊的open函數(shù)用來打開一個(gè)圖像文件。在大多數(shù)情況,你只用簡(jiǎn)單的把文件名傳給它就可以了:切換行號(hào)顯示1 im=Image
33、.open("lena.ppm")2如果一切正常,結(jié)果是一個(gè)Image對(duì)象。否則,會(huì)拋出一個(gè)IOError異常。你可以使用一個(gè)類似文件的對(duì)象來代替文件名。這個(gè)對(duì)象必須實(shí)現(xiàn)read、seek和tell方法,并以二進(jìn)制方式打開。從一個(gè)打開的文件讀取切換行號(hào)顯示1 fp=open("lena.ppm","rb")2 im=Image.open(fp)3要從字符串?dāng)?shù)據(jù)中讀取一幅圖像,可以使用StringIO類:從一個(gè)字符串讀取切換行號(hào)顯示1 import StringIO23 im=Image.open(StringIO.StringIO(b
34、uffer)4注意庫(kù)在讀取圖像頭之前,會(huì)先移動(dòng)到文件頭(用seek(0)o另外,在圖像數(shù)據(jù)被讀取(通過load方法)以后,seek方法也會(huì)被調(diào)用。如果圖像文件被嵌在一個(gè)更大的文件里面,比如tar文件,你可以使用Container?;蛘逿arlO模塊來訪問它。從一個(gè)tar壓縮文檔讀取切換行號(hào)顯示1 importTarIO23 fp=TarIO.TarIO("Imaging.tar","Imaging/test/lena.ppm")4 im=Image.open(fp)5控制解碼器一些解碼器允許你在從文件讀取圖像的同時(shí)對(duì)圖像進(jìn)行操作。這個(gè)特性常常被用來在創(chuàng)建
35、縮略圖(創(chuàng)建縮略圖的速度通常比縮略圖的質(zhì)量更重要)或者打印到一個(gè)黑白激光打印機(jī)(只需要圖像的灰度信息)時(shí)加速圖像的解碼。draft方法能夠操作一個(gè)沒有被載入數(shù)據(jù)的圖像對(duì)象,使得它能夠盡可能與需要的模式和大小相匹配。這通過重新配置圖像解碼器來實(shí)現(xiàn)。以草稿方式讀取切換行號(hào)顯示1 im=Image.open(file)2 print"original=",im.mode,im.size34 im.draft("L",(100,100)5 print"draft=",im.mode,im.size6這個(gè)程序可能會(huì)打印出這樣的結(jié)果:切換行號(hào)顯7
36、K1 original=RGB(512,512)2 draft=L(128,128)3注意,最終獲得圖像可能與要求的模式和大小不完全一致。如果要求生成的圖像不能超過給定的大小,可以使用thumbnail方法來代替。概念?PythonImagingLibrary處理光柵圖像(rasterimages),即方型的像素?cái)?shù)據(jù)。通道一幅圖像可以有一個(gè)或者多個(gè)通道的數(shù)據(jù)構(gòu)成。PythonImagingLibrary允許在一個(gè)圖像中存儲(chǔ)多個(gè)通道,只要這些通道的大小和顏色深度都是一樣的。要獲取圖像的通道數(shù)目和通道名稱,可以使用image.htm#image-getbands-methodgetbands方法。
37、模式圖像的模式定義了圖像的像素的類型和顏色深度。當(dāng)前版本的庫(kù)支持下列標(biāo)準(zhǔn)模式:?1?(1-bit像素,黑白,一個(gè)像素存儲(chǔ)為一個(gè)字節(jié))?L?(8-bit像素,黑白)?P?(8-bit像素,使用調(diào)色板映射到其他任一模式)?RGB?(3x8-bit像素,真彩色)?RGBA?(4x8-bit像素,帶透明掩模的真彩色)?CMYK?(4x8-bit像素,colourseparation)?YCbCr?(3x8-bit像素,colourvideoformat)?I?(32-bitinteger像素)?F?(32-bitfloatingpoint像素)PIL還支持一些特殊的模式,包括RGBX?(truecol
38、ourwithpadding)和RGBa?(truecolourwithpremultipliedalpha)。你可以通過image.htm#image-mode-attributemode屬性讀取圖像的模式,它是一個(gè)包含上述模式類型值的字符串。大小通過圖像的image.htm#image-size-attributesize幗性可以讀取圖像的大小信息。大小信息由一個(gè)包含水平和垂直像素?cái)?shù)的二元組表示。坐標(biāo)系統(tǒng)PythonImagingLibrary使用笛卡爾像素坐標(biāo)系統(tǒng),原點(diǎn)(0,0)在圖像的左上角。注意:坐標(biāo)值對(duì)應(yīng)像素的左上角,像素(0,0)實(shí)際中心位于(0.5,0.5)。坐標(biāo)通常以2元組(
39、x,y)的形式傳遞給庫(kù)。矩形則表示成4元組的形式,左上角為第一個(gè)。比如,覆蓋整個(gè)800x600像素的矩形表示為(0,0,800,600)。調(diào)色板調(diào)色板模式("P")使用一個(gè)彩色調(diào)色板來定義每個(gè)像素的真實(shí)顏色。信息你可以使用image.htm#image-info-attributeinfo屬性在圖像中添加輔助的信息。這是一個(gè)字典對(duì)象。在讀取和存儲(chǔ)文件時(shí)如何處理這些信息是和文件的類型有關(guān)系的(查看formats.htm圖像文件格式這一章)。濾波器對(duì)于將多個(gè)輸入像素映射到一個(gè)輸出像素的幾何變換操作,PythonImagingLibrary提供了四種重采用濾波器。* NEARES
40、T在輸入圖像中選擇最近的點(diǎn),忽略其他所有點(diǎn)。* BILINEAR在輸入圖像的2x2像素范圍內(nèi)進(jìn)行線性插值。注意當(dāng)前版本的PIL中,這個(gè)濾波器在下采樣時(shí)使用固定的輸入范圍的大小。* BICUBIC在輸入圖像的4x4像素范圍內(nèi)進(jìn)行三次插值。注意當(dāng)前版本的PIL中,這個(gè)濾波器在下采樣時(shí)使用固定的輸入范圍的大小。* ANTIALIASresize?和?thumbnail?方法中使用。注意,當(dāng)前版本的PIL中,只有ANTIALIAS濾波器是唯一在下采樣(把一幅較大的圖像轉(zhuǎn)換成較小的圖像)時(shí)能正常工作的濾波器。BILINEAR和BICUBIC濾波器使用固定的輸入范圍大小,適用在保持比例(scale-pre
41、serving?)的幾何轉(zhuǎn)換或者上采樣時(shí)。第二部分:模塊手冊(cè)Image模塊Image?模塊提供了一個(gè)同名的類,用來表示一個(gè)PIL圖像。這個(gè)模塊同時(shí)提供了一些工廠函數(shù),包括從文件讀取圖像的函數(shù)以及創(chuàng)建新圖像的函數(shù)。例子下面的腳本讀取一幅圖像,旋轉(zhuǎn)45度,再把它在Unix上用xv顯示出來,或者在Windows上用paint顯示出來。打開、旋轉(zhuǎn)、顯示圖像(使用默認(rèn)的圖像瀏覽器)importImageim=Image.open("bride.jpg")im.rotate(45).show()?下面的腳本創(chuàng)建當(dāng)前目錄中所有JPEG圖像的128x128的縮略圖。創(chuàng)建縮略圖importg
42、lobforinfileinglob.glob("*.jpg"):函數(shù)new?Image.new(mode,size?=>imageImage.new(mode,size,colo?=>image?使用給定的模式和大小創(chuàng)建一個(gè)新圖像。大小是以2元組的形式給出的。當(dāng)創(chuàng)建單通道的圖時(shí),810r是單個(gè)值;當(dāng)創(chuàng)建多通道圖像時(shí),810r是一個(gè)元組(每個(gè)通道一個(gè)值)。如果color參數(shù)缺省,圖像被填充成全黑。如果color是None,則圖像不被初始化。open?Image.open(infile)?=>imageImage.open(infile,mode)?=>
43、;image?打開并識(shí)別給定的圖像文件。這是一個(gè)會(huì)被延遲(lazy)的操作;實(shí)際的圖像數(shù)據(jù)并不馬上從文件中讀入,而是等到需要處理這些數(shù)據(jù)的時(shí)候才被讀入(可以調(diào)用load?方法強(qiáng)制讀入數(shù)據(jù))。如果要指定mode參數(shù),則mode必須是"r"0你可以使用一個(gè)字符用(表示文件名)或者一個(gè)文件對(duì)象作為infile。在用文件對(duì)象時(shí),文件對(duì)象必須實(shí)現(xiàn)read,?seek和tell?方法,而且必須用二進(jìn)制模式打開。blend?Image.blend(image1,image2,alpha?=>image0對(duì)兩幅圖像用固定的透明度(alpha)插值生成新的圖像。輸入的兩幅圖像必須是同樣
44、的大小和模式。out=imagel*(1.0-alpha)+image2*alpha如果alpha是0.0,則會(huì)返回第一幅圖像的一個(gè)拷貝。如果alpha是1.0,則會(huì)返回第二幅圖像的一個(gè)拷貝。alpha的取值范圍沒有限制。如果必要,計(jì)算結(jié)果會(huì)被裁減到允許的輸出值的范圍。composite?Iposite(image1,image2,mask)=>image?對(duì)兩幅圖像用圖像mask作為透明度插值生成新的圖像。mask圖像可以是"1","L",或者"RGBA"模式。所有的圖像必須是同樣的大小。eval?Image.eval(fun
45、ction,image)?=>image?將函數(shù)(應(yīng)該帶一個(gè)參數(shù))作用于給定圖像的每一個(gè)像素。如果圖像有多個(gè)通道,這個(gè)函數(shù)會(huì)作用于每一個(gè)通道。注意,這個(gè)函數(shù)對(duì)于同樣的像素值只會(huì)被調(diào)用一次,因此你不能使用一個(gè)隨機(jī)函數(shù)或者其它的像素生成函數(shù)來作為函數(shù)。frombuffer?Image.frombuffer(mode,size,data?=>image(PIL1.1.4alpha4中新增。)對(duì)字符串或者緩沖區(qū)對(duì)象包含的像素?cái)?shù)據(jù),使用標(biāo)準(zhǔn)的"raw"解碼器來創(chuàng)建圖像。對(duì)于某些模式,圖像內(nèi)存可以與原始緩沖區(qū)共享同一塊內(nèi)存(這意味著如果修改原始的緩沖區(qū)對(duì)象,將會(huì)對(duì)圖像產(chǎn)生影
46、響)。不是所有的模式都能夠共享內(nèi)存;支持的模式包括"L"、"RGBX"、"RGBA"和"CMYK"。對(duì)于其他模式,這個(gè)函數(shù)和fromstring函數(shù)作用相同。Image.frombuffer(mode,size,data,decoder,parameter?=>image與對(duì)應(yīng)的fromstring?函數(shù)調(diào)用相同。fromstring?Image.fromstring(mode,size,data?=>image?從字符串中讀取像素?cái)?shù)據(jù),使用標(biāo)準(zhǔn)的"raw"解碼器創(chuàng)建圖像。Image
47、.fromstring(mode,size,data,decoder,parameter?=>imageo與前一個(gè)函數(shù)的區(qū)別是,這個(gè)函數(shù)允許使用你使用任意PIL支持的像素解碼器來解碼數(shù)據(jù)。更多有關(guān)解碼器的信息,參看decoder.htm編寫自己的文件解碼器。注意,這個(gè)函數(shù)只是解碼像素?cái)?shù)據(jù),而不是解碼整個(gè)圖像。如果要處理存在字符串中的完整圖像,可以使用StringlO把字符串包裝起來然后用open方法來裝載它。merge?Image.merge(mode,bandS?=>imageo從一組單通道的圖像創(chuàng)建一幅新圖像。通道用圖像的元組或者列表的形式給出,每一項(xiàng)是模式mode描述的一個(gè)通
48、道。所有通道的大小必須相同。方法Image?類的對(duì)象有下列方法。除非特別聲明,所有的方法返回一個(gè)新的Image類型對(duì)象,包含處理的結(jié)果。convert?im.convert(mode)?=>imageo返回轉(zhuǎn)換后的圖象拷貝。對(duì)于"P"模式,這種轉(zhuǎn)換通過調(diào)色板進(jìn)行。如果模式被省略,那么該方法會(huì)自動(dòng)選取一個(gè)能夠保存所有圖像信息和不需要調(diào)色板來表示的圖像模式。當(dāng)前版本的庫(kù)支持"L"、"RGB"和"CMYK"模式之間的相互轉(zhuǎn)換。?當(dāng)把一幅彩色圖像轉(zhuǎn)換成灰度圖象(模式"L"),庫(kù)使用ITU-R601
49、-2兩度轉(zhuǎn)換公式:L=R*299/1000+G*587/1000+B*114/1000當(dāng)把一幅灰度圖象轉(zhuǎn)換成2值圖像(模式"1")時(shí),所有非零值都被轉(zhuǎn)換成255(白)。要使用其它閾值,可以使用point方法。oim.convert(mode,matrix)?=>image將"RGB"模式圖像使用一個(gè)轉(zhuǎn)換矩陣轉(zhuǎn)換成"RGB"或者"L"模式圖像。矩陣是一個(gè)四元組或者16元組。?下面的例子將RGB圖像(根據(jù)ITU-R709使用D65亮度進(jìn)行過線性校正)轉(zhuǎn)換成CIEXYZ顏色空間圖.:ConvertRGBtoXYZr
50、gb2xyz=(0.412453,0.357580,0.180423,0,0.212671,0.715160,0.072169,0,0.019334,0.119193,0.950227,0)out=im.convert("RGB",rgb2xyz)copy?im.copy()?=>image?拷貝圖像。使用這個(gè)函數(shù)把其它東西粘貼到圖像中,并保留原來的圖像不變。crop?im.crop(box)?=>image0返回當(dāng)前圖像的一個(gè)矩形區(qū)域。box是一個(gè)四元組指定左、上、右、下四個(gè)邊界的坐標(biāo)。這是一個(gè)會(huì)被延遲(lazy)的操作。改變?cè)嫉膱D像可能會(huì)影響到剪裁生成的圖
51、像。為消除這種影響,可以調(diào)用裁剪生成的圖象的10ad方法。draft?im.draft(mode,size?配置圖像裝載器使其能夠返回與指定模式盡可能接近的圖像。比如說,你可以使用這個(gè)函數(shù),將彩色JPEG圖像在裝載的時(shí)候轉(zhuǎn)換成灰度圖象,或者從PCD文件中解出128x192的圖像。?注意,這個(gè)方法會(huì)改變調(diào)用的Image對(duì)象。如果圖像已經(jīng)被裝入,這個(gè)方法沒有任何作用。filter?im.filter(filter)?=>imageo返回當(dāng)前圖像經(jīng)過給定濾波器濾波后的圖像。要查看可用的濾波器,參考ImageFilter?模塊。fromstring?im.fromstring(data)im.f
52、romstring(data,decoder,parameters)?與fromstring函數(shù)基本相同,只是將data裝入當(dāng)前圖像。getbands?im.getbands()?=>tupleofstringso返回包含每個(gè)通道的名字的元組。比如,在RGB圖像上調(diào)用getbands返回("R","G","B")。getbboxim.getbbox()?=>4-tupleorNoneCalculatestheboundingboxofthenon-zeroregionsintheimage.Theboundingboxis
53、returnedasa4-tupledefiningtheleft,upper,right,andlowerpixelcoordinate.Iftheimageiscompletelyempty,thismethodreturnsNone.getdata?im.getdata()?=>sequenceo返回以像素值序列的形式返回當(dāng)前圖像的內(nèi)容。圖像的像素值從第零行開始被一行一行的連接在一起變成一維線性的序列對(duì)象。注意,這個(gè)方法返回的序列對(duì)象是PIL內(nèi)部數(shù)據(jù)類型,只支持部分序列操作??梢允褂茫縧ist(im.getdata()將其轉(zhuǎn)換為普通的序列對(duì)象(比如需要打印)。getextrema?
54、im.getextrema()?=>2-tuple?返回一個(gè)二元組包含圖像的最小值和最大值。當(dāng)前版本的PIL中這個(gè)方法僅支持單通道圖像。getpixel?im.getpixel(xy)?=>valueortuple?返回指定位置的像素值。如果圖像是多層(multi-layer)圖像,該方法返回一個(gè)元組。注意,這個(gè)方法相當(dāng)慢;如果你需要處理大量的圖像數(shù)據(jù),使用getdata方法。histogram?im.histogram()?=>list?返回圖像的直方圖。直方圖是原圖像中每一種像素值的個(gè)數(shù)的列表。如果圖像有多于一個(gè)通道,那么所有通道的直方圖被連接在一起。(比如,"
55、RGB"圖像的直方圖包含768個(gè)值。)o二值圖像(模式"1")在這個(gè)方法中被作為灰度圖像(模式"L")來處理。im.histogram(mask)?=>listo返回圖像中對(duì)應(yīng)掩模圖像是非零的那些像素的直方圖。掩模圖像必須和原圖像同樣大小,并且必須是二值圖像(模式"1")或者灰度圖像(模式"L")。load?im.load()?分配圖像數(shù)據(jù)的存儲(chǔ)空間,并將數(shù)據(jù)從文件讀入(或?qū)τ谄渌煌七t的操作,從源圖像讀入)。在通常情況下,你不需要調(diào)用這個(gè)方法。因?yàn)楫?dāng)被打開的圖像第一次訪問數(shù)據(jù)時(shí),它會(huì)自動(dòng)裝入數(shù)據(jù)。
56、offset?im.offset(xoffset,yoffset?=>imageo(過期的)返回圖像數(shù)據(jù)被平移給定白偏移量以后的圖像。Datawrapsaroundtheedges.Ifyoffsetisomitted,itisassumedtobeequaltoxoffset.這個(gè)方法以后將不被支持。新代碼應(yīng)該使用imagechops.htm#offset?ImageChops模塊提供的offset?函數(shù)。paste?im.paste(image,box)Pastesanotherimageintothisimage.Theboxargumentiseithera2-tuplegivi
57、ngtheupperleftcorner,a4-tupledefiningtheleft,upper,right,andlowerpixelcoordinate,orNone(sameas(0,0).Ifa4-tupleisgiven,thesizeofthepastedimagemustmatchthesizeoftheregion.Ifthemodesdon'tmatch,thepastedimageisconvertedtothemodeofthisimage(seetheconvertmethodfordetails).im.paste(colour,box)Sameasabove,butfillstheregionwithasinglecolour.Thecolourisgivenasasinglenumericalvalueforsingle-bandimages,andatupleformulti-bandimages.im.paste(image,box
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年度酒店客房智能家電配置與售后服務(wù)合同4篇
- 二零二五版房屋互換及增值服務(wù)協(xié)議范本3篇
- 2025年私立學(xué)校新生試讀協(xié)議書(音樂特色教育)標(biāo)準(zhǔn)文本3篇
- 二零二五版新型城鎮(zhèn)化項(xiàng)目合同保修與跟進(jìn)管理3篇
- 二零二五年度風(fēng)景名勝區(qū)植被保護(hù)與養(yǎng)護(hù)合同4篇
- 二零二五年生物制藥技術(shù)合作保密及成果分享協(xié)議3篇
- 二零二五版跨境電商合伙經(jīng)營(yíng)服務(wù)合同下載3篇
- 2025年度航空航天鋁合金材料供應(yīng)協(xié)議3篇
- 2025年度新能源汽車銷售與充電設(shè)施運(yùn)營(yíng)管理協(xié)議4篇
- 二零二五年度生態(tài)農(nóng)業(yè)合作項(xiàng)目履約擔(dān)保合同正文本4篇
- 人教版小學(xué)數(shù)學(xué)(2024)一年級(jí)下冊(cè)第一單元 認(rèn)識(shí)平面圖形綜合素養(yǎng)測(cè)評(píng) B卷(含答案)
- 企業(yè)年會(huì)攝影服務(wù)合同
- 電商運(yùn)營(yíng)管理制度
- 二零二五年度一手房購(gòu)房協(xié)議書(共有產(chǎn)權(quán)房購(gòu)房協(xié)議)3篇
- 2025年上半年上半年重慶三峽融資擔(dān)保集團(tuán)股份限公司招聘6人易考易錯(cuò)模擬試題(共500題)試卷后附參考答案
- 城市公共交通運(yùn)營(yíng)協(xié)議
- 內(nèi)燃副司機(jī)晉升司機(jī)理論知識(shí)考試題及答案
- 2024北京東城初二(上)期末語(yǔ)文試卷及答案
- 2024設(shè)計(jì)院與職工勞動(dòng)合同書樣本
- 2024年貴州公務(wù)員考試申論試題(B卷)
- 電工高級(jí)工練習(xí)題庫(kù)(附參考答案)
評(píng)論
0/150
提交評(píng)論