python imaging library中文手冊資料_第1頁
python imaging library中文手冊資料_第2頁
python imaging library中文手冊資料_第3頁
python imaging library中文手冊資料_第4頁
python imaging library中文手冊資料_第5頁
已閱讀5頁,還剩64頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

這是PIL的官方手冊,2005年5月6日本中文手冊來

你可以在PythonWarelibrary找到改文檔其它格式的版本以及先前的版木。

原版出處:htt

目錄

1.PythonImagingLibrary中文手冊

2.第一部分:介紹

1.儂

1.

2.圖像歸檔處理

3.圖像顯不

4.圖像處理

2.入門導(dǎo)引

1.使用Image類

2.讀寫圖像

3.裁剪、粘貼和合并圖像

4.滾動?幅圖像

5.分離與合并通道

3.幾何變換

1.簡單的幾何變換

2.transpose圖像

4.顏色變換

1.轉(zhuǎn)換圖像顏色模式

5.圖像增強(qiáng)

1.濾波器

I.使用濾波器

2.點(diǎn)操作

1.使用點(diǎn)變換

2.處理單個(gè)通道

3.凝

1.增強(qiáng)圖像

6.圖像序列

1.讀取圖像序列

2.一個(gè)序列迭代類

7.Postscript格式打印

1.DrawingPostscript

8.更多關(guān)于讀取圖像

1.控制解碼器

3.概念

1.誕

2.能

3.大小

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

5.調(diào)色板

6.10t

7.濾波器

4.第二部分:模塊手冊

5.Image模塊

1.1刃「

2.函數(shù)

1.new

2.open

3.blend

4.comnosite

5.eval

6.(Yombu便r

7.fYomstring

8.merge

3.方法

1.convert

2.cooy

3.CIOD

4.draft

5.filter

6.fYomstring

7.getbands

8.getbbox

9.getdata

10.getextrema

11.getpixel

12.histogram

13.load

14.offset

15.paste

16.point

17.putalpha

18.putdata

19.Dutpalette

20.putpixel

21.resize

22.rotate

23.save

24.seek

25.show

26.split

27.tell

28.thumbnail

29.tobitmap

30.tostring

31.transform

32.iransDOse

33.verity

4.屬性

1.fbrmat

2.mode

3.size

4.□alette

5.infb

——ImageChoa模塊

1.函數(shù)

1.constant

2.duplicate

3.invert

4.lighter

5.darker

6.difference

7.multiply

8.screen

9.add

10.subtract

11.blend

12.coniDOsile

13.offeet

7.ImagcColor模塊

1.ColourNames

2.函數(shù)

1.gctrgb

2.getcolor

8.ImageDraw模塊

1.Example

2.Concepts

1.Coordinates

2.ColourNames

3.Fonts

3.函數(shù)

1.Draw

4.方法

1.arc

2.bitmap

3.chord

4ellinse

5.line

6.pieslice

7.point

8.polygon

9.rectangle

10.text

11.textsize

5.Options

1.outline

2.fill

3.fbnt

6.Compatibility

1.ImageDraw

2.setink

3.sctfill

4.setfbnt

12.posterize

6。1汨花一

16.ImaeePath模塊

1.?

1.Paxh

17.lma,ePalette模塊

1.ME

2.婁

1.ImagePalette

18.ImaeeSequence模塊

1.函數(shù)

1.Iterator

2.

1.Operator[1

19.hna?eStat模塊

1.函數(shù)

1.Stat

2.Attributes

1.extrema

2.count

3.sum

4.sum2

5.pixel

6.median

7.rms

8.var

9.stddev

20.ImageTk模塊

1.TheBitmaplmageClass

2.ThePhololmaqeClass

21.ImageWin模塊

1.Dib類

1.Dib

2.方法

1.expose

2.draw

3.palette

4.paste

22.PSDraw模塊

|1.Classes

1.PSDraw

2.PSDraw方法

1.begin

2.end

3.line

4.rectangle

5.te?ct

6.setfbnt

7.setink

8.se-11

23.ImageCrackCodc模塊(PILPlus)

——k——as

1.CrackCode

2.方法andattributes

1.area

2.bbox

3.caliper

4.centroid

5.edge

6.links

7.offset

8.start

9.top

10.hit

11.topalh

12.getmask

13.-ctoutlinc

24.ImaeeMath模塊(PILPlus)

1.例子

2.函數(shù)

1.eval

3.表達(dá)式語法

1.運(yùn)算符

2.內(nèi)建函數(shù)

25.第三部分:工具手冊

26.Dildrivcr工具

1.&±

2.ThePILDriverClass

3.方法

4.畝Iconvert工具

5.pilfih工具

6.61fdm工具

7.Dil-rint工具

27.附錄

1.軟件許可證

2.技術(shù)支持

3.圖像文件格式

4.編寫自己的文件解碼器

28.譯注:中英文術(shù)語對照表

第一部分:介紹

?PIL1.1.5|2005年5月5日|FredrikLundh

概覽

介紹

PythonImagingLibrary?為Python解釋器提供了圖像處理的功能。

這個(gè)庫提供了廣泛的文件格式支持、高效的內(nèi)部表示以及相當(dāng)強(qiáng)大的圖像處理功能。

這個(gè)圖像處理庫的核心被設(shè)計(jì)成為能夠快速訪問以幾種基本像素類型表示的圖像數(shù)據(jù)。它為

通用圖像處理工具提供了一個(gè)堅(jiān)實(shí)基礎(chǔ)。

讓我們來看?些這個(gè)庫可能的用途:

圖像歸檔處理

PythonImagingLibrary適合編寫型像歸檔和批處理應(yīng)用程序。使用這個(gè)庫可以創(chuàng)建縮略圖、

轉(zhuǎn)換文件格式、打印圖像等。

當(dāng)前版本的庫能夠識別和讀取很多的圖像格式。而能夠輸出的格式被特意限制于在交換和展

示圖像中最常用的格式上。

圖像顯示

當(dāng)前版本的庫包含Tk的PhotoImage?和?Bitmaplmaee?接口,也包含Windows的DIB接口

(可以同PythonWin和其他基于Windows的界面工具包一起使用)。還有,些其他的PIL

支持提供了很多其他的GUI工具包。

為了調(diào)試方便,庫中有一個(gè)?show?方法,它把圖像保存到磁盤中,并調(diào)用外部顯示工具來顯

示它。

圖像處理

這個(gè)庫提供了基本的圖像處理功能,包括點(diǎn)操作、一些內(nèi)建濾波核的濾波操作以及顏色空間

變換操作。

這個(gè)庫也支持圖像的縮放、旋轉(zhuǎn)及任何仿射(affine)變換。

庫中包含一個(gè)histogram方法,可以從圖像中提取某些統(tǒng)計(jì)特征。用它可以實(shí)現(xiàn)自動的對比

度增強(qiáng)以及全局統(tǒng)計(jì)分析功能。

入門導(dǎo)引

使用Image類

PythonImagingLibrary中最重要的類是Image類,它定義在與它同名的模塊中。有多種創(chuàng)建

這個(gè)類的對象的方法:可以從文件中讀取得到,也可以從其他圖像經(jīng)處理得到,或者創(chuàng)建一

個(gè)全新的。

要從文件讀取圖像,可以使用Image模塊提供的open函數(shù)。

切換行號顯示

——;aaaimportimage

2?>im=Image.open("lena.ppm")

3

如果成功,這個(gè)函數(shù)返回一個(gè)Image對象??梢允褂眠@個(gè)對象的屬性來查看文件的內(nèi)容。

切換行號顯示

1?>printim.format,im.size,im.mode

2PPM(512,512)RGB

3

format屬性表示圖像的原始格式。如果圖像不是從文件中讀取的,則它被設(shè)置成None。size

屬性是一個(gè)2元組,表示圖像的寬度和高度(以像素為單位)。mode屬性定義圖像的色

彩通道的數(shù)量與名字,同時(shí)也包括像素的類型和顏色深度信息.通常來說.灰度圖像的mode

是“L"(luminance),真彩色圖像的mode是“RGB”,而用來打印的圖像的mode是“CMYK”。

如果文件不能打開,會拋出一個(gè)lOError異常。

一旦有了一個(gè)Image類的對象,接下來就可以使用這個(gè)類定義的方法來處理和操作圖像了。

比如說,顯示剛才打開的文件:

切換行號顯示

1?>im.show()

2

(show的標(biāo)準(zhǔn)實(shí)現(xiàn)不是很高效,因?yàn)樗葘D像保存成一個(gè)臨時(shí)文件,然后調(diào)用XV程序

來顯示圖像。如果你沒有安裝xv,它甚至不能工作。然而如果它可用,它將是非常方便的

出錯(cuò)和測試的工具。)

接下來的內(nèi)容將對庫中提供的一些函數(shù)進(jìn)行一個(gè)概述。

讀寫圖像

PythonImagingLibrary支持很廣泛的圖象文件格式。要從磁盤.上讀取文件,使用Image模

塊提供的open函數(shù)。你不必了解你要打開的文件的格式,庫會自動根據(jù)文件的內(nèi)容來確定

圖像的格式。

要保存文件,使用Image類的save方法。保存文件時(shí),文件名就變得非常重要了。除非你

指定了格式,否則庫會根據(jù)文件擴(kuò)展名來決定使用哪種格式存儲。

將文件轉(zhuǎn)換成JPEG

切換行號顯示

1importos,sys

2importImage

3

4forinfileinsys.argv[l:]:

6outfile=f+".jpg"

7ifinfile!=outfile:

§tpy4

9Image.open(infile).save(outfile)

10exceptlOError:

11print"cannotconvert",infile

12

save方法可以帶第二個(gè)參數(shù),用來顯式指定要保存的文件的格式。如果要使用非標(biāo)準(zhǔn)的擴(kuò)

展名,就必須這樣指定文件格式:

創(chuàng)建JPEG縮略圖

切換行號顯示

1importos,sys

2importImage

3

4size=128,128

5

6forinfileinsys.argv[l:]:

70]+".thumbnail"

ifinfile!=outfile:

9try:

10im=image.open(infi1e)

11im.thumbnail(size)

12im.save(outfile,"JPEG")

13exceptlOError:

14print"cannotcreatethumbnailfor",infile

15

有?點(diǎn)非常重要的需要注意的是,除非到了迫不得已的時(shí)候,庫不會裝載或者解碼原始的點(diǎn)

陣數(shù)據(jù)。當(dāng)打開一個(gè)文件的時(shí)候,庫會讀取文件頭以獲得文件格式、顏色模式、圖像大小等

屬性,但是文件剩余的部分不會馬上處理。

這意味著,文件打開操作是很快的,它與文件的大小、壓縮的類型沒有關(guān)系。這里是一個(gè)快

速識別一系列圖像文件的簡單例子:

識別圖像文件

切換行號顯示

1importsys

2importImage

3

4forinfileinsys.argv[l:]:

5try:

6im=image.open(infi1e)

7printinfile,im.format,"%dx%d"%im.size,im.mode

8exceptlOError:

9pass

10

裁剪、粘貼和合并圖像

Image類提供一些對圖像中的某一區(qū)域進(jìn)行處理的方法。要從圖像中提取一塊子矩形區(qū)域,

使用crop方法。

從圖像中拷貝一塊子矩形區(qū)域?==

切兼任號顯示

1box=(100t100,400,400)

2region=im.crop(box)

3

區(qū)域由一個(gè)4元組定義,表示為坐標(biāo)是(left,upper,right,lower)oPythonImagingLibrary使

用左上角為(0,0)的坐標(biāo)系統(tǒng)。同時(shí)要注意,這些坐標(biāo)指向像素之間的位置,因此上拄例子

中描述的區(qū)域的大小為300x30。像素。

區(qū)域圖像能夠經(jīng)過某些特定的處理并粘回原處。

處理一塊子矩形區(qū)域,并粘回原處

切換行號顯示

1region=region.transpose(image.ROTATE_180)

2im.paste(region,box)

3

當(dāng)把區(qū)域粘回圖像時(shí),指定的區(qū)域大小必須和區(qū)域圖像的大小相同。此外,區(qū)域不能超出圖

像的邊界。然而,原始圖像的模式和區(qū)域圖像的模式不必相同。如果不相同,區(qū)域圖像的模

式會在粘貼前被自動轉(zhuǎn)換(細(xì)節(jié)請查看后面有關(guān)顏色變換的章節(jié))。

這里有另一個(gè)例子:

滾動一幅圖像

切換行號顯示

1defroll(image,delta):

2"Ro11animagesideways"

3

4xsize,ysize=image,size

5

6delta=delta%xsize

7ifdelta=0:returnimage

8

9parti-image.crop((0,0tdelta,ysize))

10part2=image.crop((delta,0,xsize,ysize))

11image.paste(part21(0,0,xsize-delta,ysize))

12image.paste(parti,(xsize-delta,0,xsize,ysize))

13

14returnimage

15

更高級的技巧是,paste方法可以帶一個(gè)透明掩模作為可選參數(shù)。在這個(gè)掩模中,像素值255

代表被粘貼的圖像在那個(gè)位置上是不透明的5(就是說,此處顯示被粘貼的圖像上的值6)

像素值0表示被粘貼的圖像是完全透明的。在它們之間的值表示不同程度的透明度。

PythonImafiin/iLihraty還允許對一幅多通道圖像(比如RGB圖像)的單個(gè)通道進(jìn)行操作。

split方法能夠創(chuàng)建一組新的圖像,每一幅都是原來多通道圖像的一個(gè)通道。merge函數(shù)以一

個(gè)模式和一組圖像的元組為參數(shù),把這些圖像組成一幅新圖像。下面的例子實(shí)現(xiàn)交換一幅

RGB圖像的三個(gè)通道:

分離與合并通道

切換行號顯示

1r,g,b=im.split()

2im=image.merge("RGB",(b,g.r))

幾何變換

Image類包含resize^7rotate方法來縮放和旋轉(zhuǎn)圖像。前者帶一個(gè)tuple類型的參數(shù)來表

示新的圖像大小,后者帶一個(gè)逆時(shí)針旋轉(zhuǎn)的角度值作為參數(shù)。

簡單的幾何變換

切換行號顯示

1out=im.resize((128,128))

2out=im.rotate(45)#degreescounter-clockwise

如果要將圖像旋轉(zhuǎn)9。度的整數(shù)倍,可以使用rolate或者transpose方法。后者還可以用來

水平或者垂直鏡像一幅圖像。

transpose圖像

切換行號顯示

1out=im.transpose(image.FLIP_LEFT_RIGHT)

2out=im.transpose(Image.FLIP_TOP_BOTTOM)

3out=im.transpose(image.ROTATE_90)

4out=im.transpose(image.ROTATE_180)

5out=im.transpose(Image.ROTATE_270)

6

There'snodifferenceinperformanceorresultbetweentranspose(ROTATE)andcorresponding

rotateoperations.

一個(gè)更通用的變換方法是transform,在參考手冊中有對它的詳細(xì)敘述。

顏色變換

PythonImagingLibrary提供convert函數(shù),可以將圖像在不同的像素格式間轉(zhuǎn)換。

轉(zhuǎn)換圖像顏色模式

嫄在號顯示

1im=image.openC'lena.ppm").convert(nL")

2

庫支持在所有支持的顏色模式和“L“以及“RGB”之間的直接轉(zhuǎn)換。其他顏色模式之間的轉(zhuǎn)塊

要借助于中間圖像模式(通常是“RGB”模式)。

圖像增強(qiáng)

Python/makingLibrary提供一系列的函數(shù)和模塊來進(jìn)行圖像增強(qiáng)。

濾波器

心叫巫1m?模塊中包含一些預(yù)定義的增強(qiáng)濾波器,^filter方法來使用濾波器。

使用濾波器

切換行號顯示

1importimageFilter

2out=im.fi7ter(imageFi1ter.DETAIL)

3

點(diǎn)操作

point方法可以對圖像的像素值進(jìn)行變換(比如對比度變換)。在大多數(shù)場合,使用函數(shù)對

彖(帶一個(gè)參數(shù))作為參數(shù)傳遞給point方法。每一個(gè)像素使用這個(gè)函數(shù)對象進(jìn)行變換:

使用點(diǎn)變換

切換行號顯示

1#multiplyeachpixelby1.2

2out=im.point(lambdai:i*1.2)

3

用上面的技巧,你可以對圖像用任何簡單的表達(dá)式進(jìn)行變換。你還可以結(jié)合使用point和

paste方法來有選擇的改變一幅圖像:

處理單個(gè)通道

切換行號顯示

1#splittheimageintoindividualbands

/source-

4RfGfB=Otlt2

5

6#selectregionswhereredislessthan100

7mask=source[R].point(lambdai:i<100and255)

8

9#processthegreenband

10out=source[G].point(lambdai:i*0.7)

11

12#pastetheprocessedbandback,butonlywhereredwas<100

13source[G].paste(out,None,mask)

14

15#buildanewmultibandimage

16im=image.merge(im.mode,source)

17

注意用來創(chuàng)建musk的語法:

切換行號顯示

1imout=im.point(lambdai:expressionand255)

2

Python只計(jì)算一個(gè)邏輯表達(dá)式的一部分,只要能確定表達(dá)式的結(jié)果其他部分就不進(jìn)行計(jì)算

了,并把最后計(jì)算得到的值作為表達(dá)式的值返回。因此,如果上述expression是false(O),

Pytho〃就不會檢查第二個(gè)參數(shù),因此返回0,否則返回255。

增強(qiáng)

對于更多更高級的圖像增強(qiáng),可以使用hsEnhance?模塊。一旦從圖像上創(chuàng)建了增強(qiáng)對

彖,你就可以嘗試采用各種不同的參數(shù)進(jìn)行快速的增強(qiáng)處理了。

你能通過這樣的方法來調(diào)整圖像的對比度、亮度、色彩平衡和銳度。

增強(qiáng)圖像

切換行號顯示

1importimageEnhance

2

3enh=ImageEnhance.contrast(im)

4enh.enhance(1.3).show("30%morecontrast")

圖像序列

PythonImagingLibrary包含對于圖像序列(也稱作動畫格式)的基本支持。支持的序列格

式包括FLI/FLC,GIF,和一些試驗(yàn)性的格式。TIFF文件也能包含超過一幀的圖像。

當(dāng)你打開一個(gè)序列文件時(shí),PIL會自動加載序列中的第一幀。你可以使用seek和tell方法

在不同幀之間移動:

讀取圖像序列

切換行號顯示

1importimage

2

3im=Image.openC'animation.gif")

4im.seek(l)#skiptothesecondframe

5

6try:

7while1:

8im.im.tfill0+1)

9#dosomethingtoim

10exceptEOFError:

11pass#endofsequence

12

正如這個(gè)例子所示,當(dāng)序列結(jié)束時(shí),你會得到一個(gè)EOFError異常。

注意,當(dāng)前版本庫的絕大多數(shù)驅(qū)動只允許你移動到下一幀(如上面例子所示)。如果要回到文

件的開頭,你可能必須重新打開它。

下面的迭代類讓你能夠使用“丫循環(huán)來迭代圖像序列:

一個(gè)序列迭代類

切換行號顯示

1classimagesequence:

2def_init_(self,ioi):

3self,im=im

4def_geti(se7f,ix):

5try:

6ifix:

7self.im.seek(ix)

8returnself,in

9exceptEOFError:

10raiseindexError#endofsequence

11

12forframeinImagesequence(im):

13#…dosomethingtoframe...

14

Postscript格式打印

PythonImagingLibrary提供將圖像、文字和圖形輸出到Postscript打印機(jī)的功能。這是一個(gè)

簡單的例子:

DrawingPostscript

切換行號顯示

1importImage

2importPSDraw

3

4im=Image.openC'lena.ppm")

5title=ulenau

6box=(1*7212*72,7*72,10*72)#inpoints

7

8ps=PSDraw.PSDrawQ#defaultissys.stdout

9ps.hpgin_documpntCtitlp)

10

11#drawtheimage(75dpi)

12ps.image(box,im,75)

13ps.rectangle(box)

14

15#drawcenteredtitle

16ps.setfontC'He7veticaNarrow-BoId",36)

17w,h,b=ps.textsize(title)

18ps.text((4*72-w/2,l*72-h),title)

19

20ps.end_document()

21

更多關(guān)于讀取圖像

前面敘述過,Image模塊的。pen函數(shù)用來打開一個(gè)圖像文件,在大多數(shù)情況,你只用簡單

的把文件名傳給它就可以了:

切換行號顯示

1im-image.open("lena.ppm")

如果一切正常,結(jié)果是一個(gè)Image對象。否則,會拋出一個(gè)lOError異常。

你可以使用一個(gè)類似文件的對象來代替文件名。這個(gè)對象必須實(shí)現(xiàn)read、seek和tell方

法,并以二進(jìn)制方式打開。從一個(gè)打開的文件讀取

切換行號顯示

1fp=open("lena.ppm","rb")

2im=image.open(fp)

3

要從字符串?dāng)?shù)據(jù)中讀取一幅圖像,可以使用Stri〃gIO類:從一個(gè)字符串讀取

切換行號顯示

1importStringio

3im=image.open(stringl0.stringio(buffer))

4

注意庫在讀取圖像頭之前,會先移動到文件頭(^seek(O)).另外,在圖像數(shù)據(jù)被讀取(通

過load方法)以后,seek方法也會被調(diào)用。如果圖像文件被嵌在一個(gè)更大的文件里面,比

如tar文件,你可以使用Container!O或者TarlO模塊來訪問它。從一個(gè)tar壓縮文檔讀

切換行號顯示

1importTarlO

2

3fp=TarlO.TarloC'lmaging.tar","imaging/test/1ena.ppm")

4im=Tmagp.oppn(fp)

控制解碼器

一些解碼器允許你在從文件讀取圖像的同時(shí)對圖像進(jìn)行操作。這個(gè)特性常常被用來在創(chuàng)建縮

略圖(創(chuàng)建縮略圖的速度通常比縮略圖的質(zhì)量更重要)或者打印到一個(gè)黑白激光打印機(jī)(只

需要圖像的灰度信息)時(shí)加速圖像的解碼。

draft方法能夠操作一個(gè)沒有被載入數(shù)據(jù)的圖像對象,使得它能夠盡可能與需要的模式和大

小相匹配。這通過重新配置圖像解碼器來實(shí)現(xiàn)。以草稿方式讀取

切換行號顯示

1im=image.open(file)

2print''original=",im.node,im.size

3

,,,

4im.draftCLt(100f100))

5print''draftim.mode,im.size

6

這個(gè)程序可能會打印出這樣的結(jié)果:

切換行號顯示

1original=RGB(512,512)

2draft=L(128,128)

注意,最終獲得圖像可能與要求的模式和大小不完全一致。如果要求生成的圖像不能超過給

定的大小,可以使用thumbnail方法來代替。

概念

?PythonImagingLibrary處理光柵圖像<rasterimages?,即方型的像素?cái)?shù)據(jù)。

通道

一幅圖像可以有一個(gè)或者多個(gè)通道的數(shù)據(jù)構(gòu)成。PythonImagingLibrary允許在一個(gè)圖像中

存儲多個(gè)通道,只要這些通道的大小和顏色深度都是一樣的。

要獲取圖像的通道數(shù)目和通道名稱,可以使用[image.h”n#i〃iage-geib(indsTnethod

方法。

模式

圖像的模式定義了圖像的像素的類型和顏色深度。當(dāng)前版本的庫支持下列標(biāo)準(zhǔn)模式:

?l?(l-bit像素,黑白,一個(gè)像素存儲為一個(gè)字節(jié))

?L?(8-bit像素、黑白)

?P?(8-bit像素,使用調(diào)色板映射到其他任一模式)

?RGB?(3x8-hit像素、真彩色)

?RGBA?(4x8-hit像素,帶透明掩模的真彩色)

?CMYK?(4x8-bit像素,colourseparation)

?YCbCr?(3x8-bit像素,colourvideoformat)

?I?(32-bitinteger像素)

?F?(32-bitfloatingpoint像素)

PIL還支持一些特殊的模式,包括RGBX?(tvuecolourwithpadding)和RGBa?(truecolour

withpremultipliedalpha)。

你可l^JSJiliinage.htm#image-niode-attrihutemode]屬性讀取圖像的模式,它是一個(gè)包含上述

模式類型值的字符串。

大小

通過圖像的[image.h"n#httage?size?aUribiHesize]屬性可以讀取圖像的大小信息。大小信息由

一個(gè)包含水平和垂直像素?cái)?shù)的二元組表示。

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

PythonImagingLibrary使用笛卡爾像素坐標(biāo)系統(tǒng),原點(diǎn)(0,。)在圖像的左上角。注意:坐

標(biāo)值對應(yīng)像素的左上角,像素(0,0)實(shí)際中心位于(050.5)。

坐標(biāo)通常以2元組(x,y)的形式傳遞給庫。矩形則表示成4元組的形式,左上角為第一個(gè)。

比如,覆蓋整個(gè)800x600像素的矩形表示為(0,0,800,600)o

調(diào)色板

調(diào)色板模式「P”)使用一個(gè)彩色調(diào)色板來定義每個(gè)像素的真實(shí)顏色。

信息

你可以使用[image.htm^iinage-info-attributeinfo]屬性在圖像中添加輔助的信息。這是一個(gè)字

典對象。

在讀取和存儲文件時(shí)如何處理這些信息是和文件的類型有關(guān)系的(查看HormaShtm圖像文

件格式1這一章)。

濾波器

對于將多個(gè)輸入像素映射到一個(gè)輸出像素的幾何變換操作,PythonImagingLibrary提供了

四種重采用濾波器。

*NEAREST

在輸入圖像中選擇最近的點(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í)使用固定的輸入范圍的大小。

*ANTIALIAS

resize?和?thumbnail?方法中使用。

注意,當(dāng)前版本的PIL中,只有ANTIALIAS濾波器是唯一在下采樣(把一幅較大的圖像轉(zhuǎn)

換成較小的圖像)時(shí)能正常工作的濾波器。BILINEAR和BICUBIC濾波器使用固定的輸入

范圍大小,適用在{^^Upscale-preserving?)的幾何轉(zhuǎn)換或者上采樣時(shí)。

第二部分:模塊手冊

Image模塊

Image?模塊提供了一個(gè)同名的類,用來表示一個(gè)PIL圖像。這個(gè)模塊同時(shí)提供了一些工廠

函數(shù),包括從文件讀取圖像的函數(shù)以及創(chuàng)建新圖像的函數(shù)。

例子

下面的腳本讀嬰一幅圖像,旋轉(zhuǎn)45度,再把它在Unix上用x\,顯示出來,或者在Windows

上用paint顯示出來。

打開、旋轉(zhuǎn)、顯示圖像(使用默認(rèn)的圖像瀏覽器)

importimageim=image,open(''bride,jpg")im.rotate(45).showQ

下面的腳本創(chuàng)建當(dāng)前目錄中所有JPEG圖像的128x128的縮略圖。創(chuàng)建縮略圖

importglobforinfileinglob.glob("*.jpg"):

函數(shù)

new

?Image.new(mode,size)?=>image

Image.new(mode,size,color)?=>image

?使用給定的模式和大小創(chuàng)建一個(gè)新圖像。大小是以2元組的形式給出的。當(dāng)創(chuàng)建單

通道的圖時(shí),color是單個(gè)值;當(dāng)創(chuàng)建多通道圖像時(shí),color是一個(gè)元組(每個(gè)通道一

個(gè)值)。如果colo丫參數(shù)缺省,圖像被填充成全黑。如果color是None,則圖像不被

初始化。

open

?Image,open(infile)?=>image

Image.open(infile,mode)?=>image

?打開并識別給定的圖像文件。這是一個(gè)會被延遲(lazy)的操作;實(shí)際的圖像數(shù)據(jù)并

不馬上從文件中讀入,而是等到需要處理這些數(shù)據(jù)的時(shí)候才被讀入(可以調(diào)用load?

方法強(qiáng)制讀入數(shù)據(jù))。如果要指定mode參數(shù),則mode必須是“r”。

o你可以使用一個(gè)字符串(表示文件名)或者一個(gè)文件對象作為加file°在用文

件對象時(shí),文件對象必須實(shí)現(xiàn)⑼d,?seek,和⑹I?方法,而且必須用二進(jìn)制模

式打開。

blend

?Image.blend(imagel,image2,alpha)?=>image

o對兩幅圖像用固定的透明度(alpha)插值生成新的圖像。輸入的兩幅圖像必

須是同樣的大小和模式.

out=imagel*(1.0-a1pha)+image2*alpha

如果alpha是0.0,則會返回第一幅圖像的一個(gè)拷貝。如果alpha是1.0,則會返回第

二幅圖像的一個(gè)拷貝。alpha的取值范圍沒有限制。如果必要,計(jì)算結(jié)果會被裁減到

允許的輸出值的范圍。

composite

?Iposite(imagel,iniage2,mask)?=>image?對兩幅圖像用圖像〃作為透明

度插值生成新的圖像。mask圖像可以是或者“RGB4”模式。所有的圖像

必須是同樣的大小。

eval

?image)?=>image?將函數(shù)(應(yīng)該帶一個(gè)參數(shù))作用于給定圖像的

每一個(gè)像素。如果圖像有多個(gè)通道,這個(gè)函數(shù)會作用于每一個(gè)通道,注意,這個(gè)函數(shù)

對于同樣的像素值只會被調(diào)用一次,因此你不能使用一個(gè)隨機(jī)函數(shù)或者其它的像素生

成函數(shù)來作為函數(shù)。

fromhuffer

?Ima^e.frombuffer(mode,size,data)?=>image

(PILL1.4alpha4中新增.)對字符串或者緩沖區(qū)對象包含的像素?cái)?shù)據(jù),使用標(biāo)準(zhǔn)的

“raw”解碼器來創(chuàng)建圖像。。對于某些模式,圖像內(nèi)存可以與原始緩沖區(qū)共享同一塊

內(nèi)存(這意味著如果修改原始的緩沖區(qū)對象,將會對圖像產(chǎn)生影響)。不是所有的模

式都能夠共享內(nèi)存;支持的模式包括”L“、“RGBX“、“RGBA”和“CMYK”。對于其

他模式,這個(gè)函數(shù)和介omstring函數(shù)作用相同。

Image.frombuffer(mode,size,data,decoder,parameters)?=>image

與對應(yīng)的fromslring?函數(shù)調(diào)用相同。

fromstring

?Image.fromstring(mode,size,daia)?=>image'?從字符串中讀取像素?cái)?shù)據(jù),使用標(biāo)準(zhǔn)的

“raw”解碼器創(chuàng)建圖像。

Image.fromstring(mode,size,data,decoder,parameters)?=>image

o與前一個(gè)函數(shù)的區(qū)別是,這個(gè)函數(shù)允許使用你使用任意PIL支持的像素解碼

器來解碼數(shù)據(jù)。更多有關(guān)解碼器的信息,參看【decoder.htm編寫自己的文件解

碼器

注意,這個(gè)函數(shù)只是解碼像素?cái)?shù)據(jù),而不是解碼整個(gè)圖像。如果要處理存在字符串中

的完整圖像,可以使用SMnglO把字符串包裝起來然后用跡L方法來裝載它。

merge

?Image.merge(mode,bands)?=>image

o從一組單通道的圖像創(chuàng)建一幅新圖像。通道用圖像的元組或者列表的形式給

出,每一項(xiàng)是模式mode描述的一個(gè)通道。所有通道的大小必須相同。

方法

Image?類的對象有下列方法。除非特別聲明,所有的方法返回一個(gè)新的Image類型對象,包

含處理的結(jié)果。

convert

?im.convert(mode)?=^>image

o返回轉(zhuǎn)換后的圖象拷貝。對于“P”模式,這種轉(zhuǎn)換通過調(diào)色板進(jìn)行。如果模式

被省略,那么該方法會自動選取一個(gè)能夠保存所有圖像信息和不需要調(diào)色板來

表示的圖像模式。

當(dāng)前版本的庫支持“L”、“RGB"和“CMYK”模式之間的相互轉(zhuǎn)換。?當(dāng)把一幅彩色圖

像轉(zhuǎn)換成灰度圖象《模式"L”),庫使用ITU-R601-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顏色空間圖像:

ConvertRGBtoXYZ

rgb2xyz=(0.412453,0.357580,0.180423,0,0,212671,

0.715160,0.07216910,0.019334,0,119193,0,950227,0)out=

im.convert("RGB”,rgb2xyz)

copy

?im.copy()?=>訕age?拷貝圖像。使用這個(gè)函數(shù)把其它東西粘貼到圖像中,并保留原來

的圖像不變。

crop

?im.crop(box)?=>image

o返回當(dāng)前圖像的一個(gè)矩形區(qū)域。box是一個(gè)四元組指定左、上、右、下四個(gè)邊

界的坐標(biāo)。

這是一個(gè)會被延遲(lazy)的操作。改變原始的圖像可能會影響到剪裁生成的圖像。

為消除這種影響,可以調(diào)用裁剪生成的圖象的load方法。

draft

?size)?配置圖像裝載器使其能夠返回與指定模式盡可能接近的圖像。比

如說,你可以使用這個(gè)函數(shù),將彩色JPEG圖像在裝載的時(shí)候轉(zhuǎn)換成灰度圖象,或者

從PCD文件中解出128x192的圖像。?注意,這個(gè)方法會改變調(diào)用的Image對象。

如果圖像已經(jīng)被裝入,這個(gè)方法沒有任何作用。

filter

?im.filter(filter)?->image

o返回當(dāng)前圖像經(jīng)過給定濾波器濾波后的圖像。要查看可用的濾波器,參考

ImageFiltev?模塊。

fromstring

?im.fromstring(data)

im.fromstrin^(data,decoder,parameters)

?與介omstring函數(shù)基本相同,只是將data裝入當(dāng)前圖像。

getbands

?ini.getbands()?=>tupleofstrings

o—返回包含每個(gè)通道的名字的元組。比如,在RGB圖像上調(diào)用跳tbands返回("R",

t,G??B?)o

getbbox

?ini.getbbox()?=>4-tupleorNone

Calculatestheboundingboxofthenon-zeroregionsintheimage.Theboundingboxis

returnedasa4-tupledefiningtheleft,upper,right,andlowerpixelcoordinate.Iftheimageis

completelyempty,thismethodreturnsNone.

getdata

?im.getdata()?=>sequence

o返回以像素值序列的形式返回當(dāng)前圖像的內(nèi)容。圖像的像素值從第零行開始被

一行一行的連接在一起變成一維線性的序列對象。

注意,這個(gè)方法返回的序列對象是P1L內(nèi)部數(shù)據(jù)類型,只支持部分序列操作??梢?/p>

使用?Hst(im.getdata())將其轉(zhuǎn)換為普通的序列對象(比如需要打印)。

getextrema

?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è)通道,那么所有通道的直方圖被連接在一起。(比如,“RGB”圖像的直方圖包

含768個(gè)值。)

o二值圖像(模式"1”)在這個(gè)方法中被作為灰度圖像(模式“L”)來處理。

im.histogram(mask)?=>list

o返回圖像中對應(yīng)掩模圖像是非零的那些像素的直方圖。掩模圖像必須和原圖像

同樣大小,并且必須是二值圖像《模式或者灰度圖像《模式"L”)。

load

?im.loadO?分配圖像數(shù)據(jù)的存儲空間,并將數(shù)據(jù)從文件讀入(或?qū)τ谄渌煌七t的操

作,從源圖像讀入)。在通常情況下,你不需要調(diào)用這個(gè)方法。因?yàn)楫?dāng)被打開的圖像

第一次訪問數(shù)據(jù)時(shí),它會自動裝入數(shù)據(jù)。

offset

?im.offset(xqffset,yqffset)?=>image

o(過期的)返回圖像數(shù)據(jù)被平移給定的偏移量以后的圖像。Datawrapsaround

theedges.Ifyoffsetisomitted,itisassumedtobeequaltoxoffset.

這個(gè)方法以后將不被支持。新代碼應(yīng)該使用lima父echops.hOn癡ffset?Inia史eChopsI模訣

提供的offset?函數(shù).

paste

?im.paste(image,box)

Pastesanotherimageintothisimage.Theboxargumentiseithera2-tuplegivingtheupperleft

corner,a4-tupledefiningtheleft,upper,right,andlowerpixelcoordinate,orNone(sameas(0,

0)).Ifa4-tupleisgiven,thesizeofthepastedimagemustmatchthesizeoftheregion.

Ifthemodesdon7match,thepastedimageisconvertedtothemodeofthisimage(seethe

convertmethodfordetails).

im.paste(colour,box)

Sameasabove,butfillstheregionwithasinglecolour.Thecolourisgivenasasingle

numericalvalueforsingle-bandimages,andatupleformulti-bandimages.

im.paste(itnage,box,mask)

Sameasabove,butupdatesonlytheregionsindicatedbythemask.Youcanuseeither"7","L"

or"RGBA"images(inthelattercase,thealphahandisusedasmask).Wherethemaskis255,

ihegivenimageiscopiedasis.Wherethemaskis0,thecurrentvalueispreserved.Intermediate

valuescanbeusedfortransparencyeffects.

Notethatifyoupastean"RGBA"image,thealphahandisignored.Youcanworkaroundthis

byusingthesameimageasbothsourceimageandmask.

im.paste(colour,box,mask)

Sameasabove,butfillstheregionindicatedbythemaskwithasinglecolour.

point

?im.point(table)?=>image

un.point(function)image?=>image

Returnsacopyoftheimagewhereeachpixelhasbeenmappedthroughthegiventable.The

tableshouldcontains256valuesperbandintheimage.Ifafunctionisusedinstead,itshould

takeasingleargument.Thefunctioniscalledonceforeachpossiblepixelvaluetandthe

resultingtableisappliedtoallbandsoftheimage.

Iftheimagehasmode(integer)or“F”(floatingpoint),youmustuseafunction^andit

rnttsthttvethe阿沁M(jìn)ttg/brmttf:

argument*scale+offset

Mapfloatingpointimages

out=im.point(lambdai:i*1.2+10)

Youcanleaveouteitherthe?scale?orthe?offset.

im.pointftable,mode)?=>image

un.point(function,moclc)?=>intake

Maptheimagethroughtable,andconvexitonfly.InthecurrentversionofPIL,thiscanonly

beusedtoconvert"L"and"P"imagesto‘7’inonestep,e.g.tothresholdanimage.

putalpha

?im.putalpha(band)

Copiesthegivenhandtothealphalayerofthecurrentimage.Theimagemusthean"RGBA"

imago,andthebandmustbeeither"L,ror"7

putdata

?im.putdata(data)

irn.putdata(data,scale,offset)

Copypixelvaluesfrom

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論