python imaging library中文手册资料_第1页
python imaging library中文手册资料_第2页
python imaging library中文手册资料_第3页
python imaging library中文手册资料_第4页
python imaging library中文手册资料_第5页
已阅读5页,还剩64页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

这是PIL的官方手册,2005年5月6日本中文手册来

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

原版出处:htt

目录

1.PythonImagingLibrary中文手册

2.第一部分:介绍

1.侬

1.

2.图像归档处理

3.图像显不

4.图像处理

2.入门导引

1.使用Image类

2.读写图像

3.裁剪、粘贴和合并图像

4.滚动•幅图像

5.分离与合并通道

3.几何变换

1.简单的几何变换

2.transpose图像

4.颜色变换

1.转换图像颜色模式

5.图像增强

1.滤波器

I.使用滤波器

2.点操作

1.使用点变换

2.处理单个通道

3.凝

1.增强图像

6.图像序列

1.读取图像序列

2.一个序列迭代类

7.Postscript格式打印

1.DrawingPostscript

8.更多关于读取图像

1.控制解码器

3.概念

1.诞

2.能

3.大小

4.坐标系统

5.调色板

6.10t

7.滤波器

4.第二部分:模块手册

5.Image模块

1.1刃「

2.函数

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.函数

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.函数

1.gctrgb

2.getcolor

8.ImageDraw模块

1.Example

2.Concepts

1.Coordinates

2.ColourNames

3.Fonts

3.函数

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.函数

1.Iterator

2.

1.Operator[1

19.hna?eStat模块

1.函数

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.函数

1.eval

3.表达式语法

1.运算符

2.内建函数

25.第三部分:工具手册

26.Dildrivcr工具

1.&±

2.ThePILDriverClass

3.方法

4.亩Iconvert工具

5.pilfih工具

6.61fdm工具

7.Dil-rint工具

27.附录

1.软件许可证

2.技术支持

3.图像文件格式

4.编写自己的文件解码器

28.译注:中英文术语对照表

第一部分:介绍

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

概览

介绍

PythonImagingLibrary?为Python解释器提供了图像处理的功能。

这个库提供了广泛的文件格式支持、高效的内部表示以及相当强大的图像处理功能。

这个图像处理库的核心被设计成为能够快速访问以几种基本像素类型表示的图像数据。它为

通用图像处理工具提供了一个坚实基础。

让我们来看•些这个库可能的用途:

图像归档处理

PythonImagingLibrary适合编写型像归档和批处理应用程序。使用这个库可以创建缩略图、

转换文件格式、打印图像等。

当前版本的库能够识别和读取很多的图像格式。而能够输出的格式被特意限制于在交换和展

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

图像显示

当前版本的库包含Tk的PhotoImage?和?Bitmaplmaee?接口,也包含Windows的DIB接口

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

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

为了调试方便,库中有一个?show?方法,它把图像保存到磁盘中,并调用外部显示工具来显

示它。

图像处理

这个库提供了基本的图像处理功能,包括点操作、一些内建滤波核的滤波操作以及颜色空间

变换操作。

这个库也支持图像的缩放、旋转及任何仿射(affine)变换。

库中包含一个histogram方法,可以从图像中提取某些统计特征。用它可以实现自动的对比

度增强以及全局统计分析功能。

入门导引

使用Image类

PythonImagingLibrary中最重要的类是Image类,它定义在与它同名的模块中。有多种创建

这个类的对象的方法:可以从文件中读取得到,也可以从其他图像经处理得到,或者创建一

个全新的。

要从文件读取图像,可以使用Image模块提供的open函数。

切换行号显示

——;aaaimportimage

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

3

如果成功,这个函数返回一个Image对象。可以使用这个对象的属性来查看文件的内容。

切换行号显示

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

2PPM(512,512)RGB

3

format属性表示图像的原始格式。如果图像不是从文件中读取的,则它被设置成None。size

属性是一个2元组,表示图像的宽度和高度(以像素为单位)。mode属性定义图像的色

彩通道的数量与名字,同时也包括像素的类型和颜色深度信息.通常来说.灰度图像的mode

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

如果文件不能打开,会抛出一个lOError异常。

一旦有了一个Image类的对象,接下来就可以使用这个类定义的方法来处理和操作图像了。

比如说,显示刚才打开的文件:

切换行号显示

1»>im.show()

2

(show的标准实现不是很高效,因为它先将图像保存成一个临时文件,然后调用XV程序

来显示图像。如果你没有安装xv,它甚至不能工作。然而如果它可用,它将是非常方便的

出错和测试的工具。)

接下来的内容将对库中提供的一些函数进行一个概述。

读写图像

PythonImagingLibrary支持很广泛的图象文件格式。要从磁盘.上读取文件,使用Image模

块提供的open函数。你不必了解你要打开的文件的格式,库会自动根据文件的内容来确定

图像的格式。

要保存文件,使用Image类的save方法。保存文件时,文件名就变得非常重要了。除非你

指定了格式,否则库会根据文件扩展名来决定使用哪种格式存储。

将文件转换成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方法可以带第二个参数,用来显式指定要保存的文件的格式。如果要使用非标准的扩

展名,就必须这样指定文件格式:

创建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

有•点非常重要的需要注意的是,除非到了迫不得已的时候,库不会装载或者解码原始的点

阵数据。当打开一个文件的时候,库会读取文件头以获得文件格式、颜色模式、图像大小等

属性,但是文件剩余的部分不会马上处理。

这意味着,文件打开操作是很快的,它与文件的大小、压缩的类型没有关系。这里是一个快

速识别一系列图像文件的简单例子:

识别图像文件

切换行号显示

1importsys

2importImage

3

4forinfileinsys.argv[l:]:

5try:

6im=image.open(infi1e)

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

8exceptlOError:

9pass

10

裁剪、粘贴和合并图像

Image类提供一些对图像中的某一区域进行处理的方法。要从图像中提取一块子矩形区域,

使用crop方法。

从图像中拷贝一块子矩形区域?==

切兼任号显示

1box=(100t100,400,400)

2region=im.crop(box)

3

区域由一个4元组定义,表示为坐标是(left,upper,right,lower)oPythonImagingLibrary使

用左上角为(0,0)的坐标系统。同时要注意,这些坐标指向像素之间的位置,因此上拄例子

中描述的区域的大小为300x30。像素。

区域图像能够经过某些特定的处理并粘回原处。

处理一块子矩形区域,并粘回原处

切换行号显示

1region=region.transpose(image.ROTATE_180)

2im.paste(region,box)

3

当把区域粘回图像时,指定的区域大小必须和区域图像的大小相同。此外,区域不能超出图

像的边界。然而,原始图像的模式和区域图像的模式不必相同。如果不相同,区域图像的模

式会在粘贴前被自动转换(细节请查看后面有关颜色变换的章节)。

这里有另一个例子:

滚动一幅图像

切换行号显示

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方法可以带一个透明掩模作为可选参数。在这个掩模中,像素值255

代表被粘贴的图像在那个位置上是不透明的5(就是说,此处显示被粘贴的图像上的值6)

像素值0表示被粘贴的图像是完全透明的。在它们之间的值表示不同程度的透明度。

PythonImafiin/iLihraty还允许对一幅多通道图像(比如RGB图像)的单个通道进行操作。

split方法能够创建一组新的图像,每一幅都是原来多通道图像的一个通道。merge函数以一

个模式和一组图像的元组为参数,把这些图像组成一幅新图像。下面的例子实现交换一幅

RGB图像的三个通道:

分离与合并通道

切换行号显示

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

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

几何变换

Image类包含resize^7rotate方法来缩放和旋转图像。前者带一个tuple类型的参数来表

示新的图像大小,后者带一个逆时针旋转的角度值作为参数。

简单的几何变换

切换行号显示

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

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

如果要将图像旋转9。度的整数倍,可以使用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.

一个更通用的变换方法是transform,在参考手册中有对它的详细叙述。

颜色变换

PythonImagingLibrary提供convert函数,可以将图像在不同的像素格式间转换。

转换图像颜色模式

嫄在号显示

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

2

库支持在所有支持的颜色模式和“L“以及“RGB”之间的直接转换。其他颜色模式之间的转块

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

图像增强

Python/makingLibrary提供一系列的函数和模块来进行图像增强。

滤波器

心叫巫1m?模块中包含一些预定义的增强滤波器,^filter方法来使用滤波器。

使用滤波器

切换行号显示

1importimageFilter

2out=im.fi7ter(imageFi1ter.DETAIL)

3

点操作

point方法可以对图像的像素值进行变换(比如对比度变换)。在大多数场合,使用函数对

彖(带一个参数)作为参数传递给point方法。每一个像素使用这个函数对象进行变换:

使用点变换

切换行号显示

1#multiplyeachpixelby1.2

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

3

用上面的技巧,你可以对图像用任何简单的表达式进行变换。你还可以结合使用point和

paste方法来有选择的改变一幅图像:

处理单个通道

切换行号显示

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

注意用来创建musk的语法:

切换行号显示

1imout=im.point(lambdai:expressionand255)

2

Python只计算一个逻辑表达式的一部分,只要能确定表达式的结果其他部分就不进行计算

了,并把最后计算得到的值作为表达式的值返回。因此,如果上述expression是false(O),

Pytho〃就不会检查第二个参数,因此返回0,否则返回255。

增强

对于更多更高级的图像增强,可以使用hsEnhance?模块。一旦从图像上创建了增强对

彖,你就可以尝试采用各种不同的参数进行快速的增强处理了。

你能通过这样的方法来调整图像的对比度、亮度、色彩平衡和锐度。

增强图像

切换行号显示

1importimageEnhance

2

3enh=ImageEnhance.contrast(im)

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

图像序列

PythonImagingLibrary包含对于图像序列(也称作动画格式)的基本支持。支持的序列格

式包括FLI/FLC,GIF,和一些试验性的格式。TIFF文件也能包含超过一帧的图像。

当你打开一个序列文件时,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

正如这个例子所示,当序列结束时,你会得到一个EOFError异常。

注意,当前版本库的绝大多数驱动只允许你移动到下一帧(如上面例子所示)。如果要回到文

件的开头,你可能必须重新打开它。

下面的迭代类让你能够使用“丫循环来迭代图像序列:

一个序列迭代类

切换行号显示

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打印机的功能。这是一个

简单的例子:

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

更多关于读取图像

前面叙述过,Image模块的。pen函数用来打开一个图像文件,在大多数情况,你只用简单

的把文件名传给它就可以了:

切换行号显示

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

如果一切正常,结果是一个Image对象。否则,会抛出一个lOError异常。

你可以使用一个类似文件的对象来代替文件名。这个对象必须实现read、seek和tell方

法,并以二进制方式打开。从一个打开的文件读取

切换行号显示

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

2im=image.open(fp)

3

要从字符串数据中读取一幅图像,可以使用Stri〃gIO类:从一个字符串读取

切换行号显示

1importStringio

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

4

注意库在读取图像头之前,会先移动到文件头(^seek(O)).另外,在图像数据被读取(通

过load方法)以后,seek方法也会被调用。如果图像文件被嵌在一个更大的文件里面,比

如tar文件,你可以使用Container!O或者TarlO模块来访问它。从一个tar压缩文档读

切换行号显示

1importTarlO

2

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

4im=Tmagp.oppn(fp)

控制解码器

一些解码器允许你在从文件读取图像的同时对图像进行操作。这个特性常常被用来在创建缩

略图(创建缩略图的速度通常比缩略图的质量更重要)或者打印到一个黑白激光打印机(只

需要图像的灰度信息)时加速图像的解码。

draft方法能够操作一个没有被载入数据的图像对象,使得它能够尽可能与需要的模式和大

小相匹配。这通过重新配置图像解码器来实现。以草稿方式读取

切换行号显示

1im=image.open(file)

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

3

,,,

4im.draftCLt(100f100))

5print''draftim.mode,im.size

6

这个程序可能会打印出这样的结果:

切换行号显示

1original=RGB(512,512)

2draft=L(128,128)

注意,最终获得图像可能与要求的模式和大小不完全一致。如果要求生成的图像不能超过给

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

概念

•PythonImagingLibrary处理光栅图像<rasterimages?,即方型的像素数据。

通道

一幅图像可以有一个或者多个通道的数据构成。PythonImagingLibrary允许在一个图像中

存储多个通道,只要这些通道的大小和颜色深度都是一样的。

要获取图像的通道数目和通道名称,可以使用[image.h”n#i〃iage-geib(indsTnethod

方法。

模式

图像的模式定义了图像的像素的类型和颜色深度。当前版本的库支持下列标准模式:

•l?(l-bit像素,黑白,一个像素存储为一个字节)

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

•P?(8-bit像素,使用调色板映射到其他任一模式)

•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]属性读取图像的模式,它是一个包含上述

模式类型值的字符串。

大小

通过图像的[image.h"n#httage・size・aUribiHesize]属性可以读取图像的大小信息。大小信息由

一个包含水平和垂直像素数的二元组表示。

坐标系统

PythonImagingLibrary使用笛卡尔像素坐标系统,原点(0,。)在图像的左上角。注意:坐

标值对应像素的左上角,像素(0,0)实际中心位于(050.5)。

坐标通常以2元组(x,y)的形式传递给库。矩形则表示成4元组的形式,左上角为第一个。

比如,覆盖整个800x600像素的矩形表示为(0,0,800,600)o

调色板

调色板模式「P”)使用一个彩色调色板来定义每个像素的真实颜色。

信息

你可以使用[image.htm^iinage-info-attributeinfo]属性在图像中添加辅助的信息。这是一个字

典对象。

在读取和存储文件时如何处理这些信息是和文件的类型有关系的(查看HormaShtm图像文

件格式1这一章)。

滤波器

对于将多个输入像素映射到一个输出像素的几何变换操作,PythonImagingLibrary提供了

四种重采用滤波器。

*NEAREST

在输入图像中选择最近的点,忽略其他所有点。

*BILINEAR

在输入图像的2x2像素范围内进行线性插值。注意当前版本的PIL中,这个滤波器

在下采样时使用固定的输入范围的大小。

*BICUBIC

在输入图像的4x4像素范围内进行三次插值。注意当前版本的PIL中,这个滤波密

在下采样时使用固定的输入范围的大小。

*ANTIALIAS

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

注意,当前版本的PIL中,只有ANTIALIAS滤波器是唯一在下采样(把一幅较大的图像转

换成较小的图像)时能正常工作的滤波器。BILINEAR和BICUBIC滤波器使用固定的输入

范围大小,适用在{^^Upscale-preserving?)的几何转换或者上采样时。

第二部分:模块手册

Image模块

Image?模块提供了一个同名的类,用来表示一个PIL图像。这个模块同时提供了一些工厂

函数,包括从文件读取图像的函数以及创建新图像的函数。

例子

下面的脚本读婴一幅图像,旋转45度,再把它在Unix上用x\,显示出来,或者在Windows

上用paint显示出来。

打开、旋转、显示图像(使用默认的图像浏览器)

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

下面的脚本创建当前目录中所有JPEG图像的128x128的缩略图。创建缩略图

importglobforinfileinglob.glob("*.jpg"):

函数

new

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

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

•使用给定的模式和大小创建一个新图像。大小是以2元组的形式给出的。当创建单

通道的图时,color是单个值;当创建多通道图像时,color是一个元组(每个通道一

个值)。如果colo丫参数缺省,图像被填充成全黑。如果color是None,则图像不被

初始化。

open

•Image,open(infile)?=>image

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

•打开并识别给定的图像文件。这是一个会被延迟(lazy)的操作;实际的图像数据并

不马上从文件中读入,而是等到需要处理这些数据的时候才被读入(可以调用load?

方法强制读入数据)。如果要指定mode参数,则mode必须是“r”。

o你可以使用一个字符串(表示文件名)或者一个文件对象作为加file°在用文

件对象时,文件对象必须实现⑼d,?seek,和⑹I?方法,而且必须用二进制模

式打开。

blend

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

o对两幅图像用固定的透明度(alpha)插值生成新的图像。输入的两幅图像必

须是同样的大小和模式.

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

如果alpha是0.0,则会返回第一幅图像的一个拷贝。如果alpha是1.0,则会返回第

二幅图像的一个拷贝。alpha的取值范围没有限制。如果必要,计算结果会被裁减到

允许的输出值的范围。

composite

•Iposite(imagel,iniage2,mask)?=>image?对两幅图像用图像〃作为透明

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

必须是同样的大小。

eval

•image)?=>image?将函数(应该带一个参数)作用于给定图像的

每一个像素。如果图像有多个通道,这个函数会作用于每一个通道,注意,这个函数

对于同样的像素值只会被调用一次,因此你不能使用一个随机函数或者其它的像素生

成函数来作为函数。

fromhuffer

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

(PILL1.4alpha4中新增.)对字符串或者缓冲区对象包含的像素数据,使用标准的

“raw”解码器来创建图像。。对于某些模式,图像内存可以与原始缓冲区共享同一块

内存(这意味着如果修改原始的缓冲区对象,将会对图像产生影响)。不是所有的模

式都能够共享内存;支持的模式包括”L“、“RGBX“、“RGBA”和“CMYK”。对于其

他模式,这个函数和介omstring函数作用相同。

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

与对应的fromslring?函数调用相同。

fromstring

•Image.fromstring(mode,size,daia)?=>image'?从字符串中读取像素数据,使用标准的

“raw”解码器创建图像。

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

o与前一个函数的区别是,这个函数允许使用你使用任意PIL支持的像素解码

器来解码数据。更多有关解码器的信息,参看【decoder.htm编写自己的文件解

码器

注意,这个函数只是解码像素数据,而不是解码整个图像。如果要处理存在字符串中

的完整图像,可以使用SMnglO把字符串包装起来然后用迹L方法来装载它。

merge

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

o从一组单通道的图像创建一幅新图像。通道用图像的元组或者列表的形式给

出,每一项是模式mode描述的一个通道。所有通道的大小必须相同。

方法

Image?类的对象有下列方法。除非特别声明,所有的方法返回一个新的Image类型对象,包

含处理的结果。

convert

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

o返回转换后的图象拷贝。对于“P”模式,这种转换通过调色板进行。如果模式

被省略,那么该方法会自动选取一个能够保存所有图像信息和不需要调色板来

表示的图像模式。

当前版本的库支持“L”、“RGB"和“CMYK”模式之间的相互转换。?当把一幅彩色图

像转换成灰度图象《模式"L”),库使用ITU-R601-2两度转换公式:

L=R*299/1000+G*587/1000+B*114/1000

当把一幅灰度图象转换成2值图像(模式“1”)时,所有非零值都被转换成255(白

要使用其它阈值,可以使用point方法。

oim.convert(mode,matrix)?=>image

将“RGB”模式图像使用一个转换矩阵转换成“RGB“或者“L“模式图像。矩阵是一个四

元组或者16元组。?下面的例子将RGB图像(根据ITU-R709使用D65亮度进行

过线性校正)转换成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?拷贝图像。使用这个函数把其它东西粘贴到图像中,并保留原来

的图像不变。

crop

•im.crop(box)?=>image

o返回当前图像的一个矩形区域。box是一个四元组指定左、上、右、下四个边

界的坐标。

这是一个会被延迟(lazy)的操作。改变原始的图像可能会影响到剪裁生成的图像。

为消除这种影响,可以调用裁剪生成的图象的load方法。

draft

•size)?配置图像装载器使其能够返回与指定模式尽可能接近的图像。比

如说,你可以使用这个函数,将彩色JPEG图像在装载的时候转换成灰度图象,或者

从PCD文件中解出128x192的图像。?注意,这个方法会改变调用的Image对象。

如果图像已经被装入,这个方法没有任何作用。

filter

•im.filter(filter)?->image

o返回当前图像经过给定滤波器滤波后的图像。要查看可用的滤波器,参考

ImageFiltev?模块。

fromstring

•im.fromstring(data)

im.fromstrin^(data,decoder,parameters)

•与介omstring函数基本相同,只是将data装入当前图像。

getbands

•ini.getbands()?=>tupleofstrings

o—返回包含每个通道的名字的元组。比如,在RGB图像上调用跳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返回以像素值序列的形式返回当前图像的内容。图像的像素值从第零行开始被

一行一行的连接在一起变成一维线性的序列对象。

注意,这个方法返回的序列对象是P1L内部数据类型,只支持部分序列操作。可以

使用?Hst(im.getdata())将其转换为普通的序列对象(比如需要打印)。

getextrema

•im.getextrema()?=>2・tuple?返回一个二元组包含图像的最小值和最大值。当前版本的

PIL中这个方法仅支持单通道图像。

getpixel

•im.getpixel(xy)?=>valueortuple?返回指定位置的像素值。如果图像是多层

(multi-layer)图像,该方茯返回一个元组。

注意,这个方法相当慢;如果你需要处理大量的图像数据,使用getdata方法。

histogram

•im.histogram()?=>list

•返回图像的直方图。直方图是原图像中每一种像素值的个数的列表。如果图像有多于

一个通道,那么所有通道的直方图被连接在一起。(比如,“RGB”图像的直方图包

含768个值。)

o二值图像(模式"1”)在这个方法中被作为灰度图像(模式“L”)来处理。

im.histogram(mask)?=>list

o返回图像中对应掩模图像是非零的那些像素的直方图。掩模图像必须和原图像

同样大小,并且必须是二值图像《模式或者灰度图像《模式"L”)。

load

•im.loadO?分配图像数据的存储空间,并将数据从文件读入(或对于其它被推迟的操

作,从源图像读入)。在通常情况下,你不需要调用这个方法。因为当被打开的图像

第一次访问数据时,它会自动装入数据。

offset

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

o(过期的)返回图像数据被平移给定的偏移量以后的图像。Datawrapsaround

theedges.Ifyoffsetisomitted,itisassumedtobeequaltoxoffset.

这个方法以后将不被支持。新代码应该使用lima父echops.hOn痴ffset?Inia史eChopsI模诀

提供的offset?函数.

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阿沁Mttg/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. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论