PythonImagingLibrary中文手册.docx
- 文档编号:25298819
- 上传时间:2023-06-07
- 格式:DOCX
- 页数:88
- 大小:58.98KB
PythonImagingLibrary中文手册.docx
《PythonImagingLibrary中文手册.docx》由会员分享,可在线阅读,更多相关《PythonImagingLibrary中文手册.docx(88页珍藏版)》请在冰豆网上搜索。
PythonImagingLibrary中文手册
这是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.滤波器
1.使用滤波器
2.点操作
1.使用点变换
2.处理单个通道
3.增强
1.增强图像
6.图像序列
1.读取图像序列
2.一个序列迭代类
7.Postscript格式打印
1.DrawingPostscript
8.更多关于读取图像
1.控制解码器
3.概念
1.通道
2.模式
3.大小
4.坐标系统
5.调色板
6.信息
7.滤波器
4.第二部分:
模块手册
5.Image模块
1.例子
2.函数
1.new
2.open
3.blend
4.composite
5.eval
6.frombuffer
7.fromstring
8.merge
3.方法
1.convert
2.copy
3.crop
4.draft
5.filter
6.fromstring
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.putpalette
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.transpose
33.verify
4.属性
1.format
2.mode
3.size
4.palette
5.info
6.ImageChops模块
1.函数
1.constant
2.duplicate
3.invert
4.lighter
5.darker
6.difference
7.multiply
8.screen
9.add
10.subtract
11.blend
12.composite
13.offset
7.ImageColor模块
1.ColourNames
2.函数
1.getrgb
2.getcolor
8.ImageDraw模块
1.Example
2.Concepts
1.Coordinates
2.ColourNames
3.Fonts
3.函数
1.Draw
4.方法
1.arc
2.bitmap
3.chord
4.ellipse
5.line
6.pieslice
7.point
8.polygon
9.rectangle
10.text
11.textsize
5.Options
1.outline
2.fill
3.font
6.Compatibility
1.ImageDraw
2.setink
3.setfill
4.setfont
9.ImageEnhance模块
1.Example
2.Interface
3.TheColorClass
4.TheBrightnessClass
5.TheContrastClass
6.TheSharpnessClass
10.ImageFile模块
1.Example
2.函数
1.Parser
3.方法
1.feed
11.ImageFileIO模块
1.函数
12.ImageFilter模块
1.Example
2.Filters
1.Kernel
2.RankFilter
3.MinFilter
4.MedianFilter
5.MaxFilter
13.ImageFont模块
1.例子
2.函数
1.load
2.load_path
3.truetype
4.load_default
3.方法
1.getsize
2.getmask
14.ImageGrab模块
1.函数
1.grab
2.grabclipboard
15.ImageOps模块
1.函数
1.autocontrast
2.colorize
3.crop
4.deform
5.equalize
6.expand
7.fit
8.flip
9.grayscale
10.invert
11.mirror
12.posterize
13.solarize
16.ImagePath模块
1.函数
1.Path
17.ImagePalette模块
1.例子
2.类
1.ImagePalette
18.ImageSequence模块
1.函数
1.Iterator
2.方法
1.Operator[]
19.ImageStat模块
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.TheBitmapImageClass
2.ThePhotoImageClass
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.text
6.setfont
7.setink
8.setfill
23.ImageCrackCode模块(PILPlus)
1.函数
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.topath
12.getmask
13.getoutline
24.ImageMath模块(PILPlus)
1.例子
2.函数
1.eval
3.表达式语法
1.运算符
2.内建函数
25.第三部分:
工具手册
26.pildriver工具
1.例子
2.ThePILDriverClass
3.方法
4.pilconvert工具
5.pilfile工具
6.pilfont工具
7.pilprint工具
27.附录
1.软件许可证
2.技术支持
3.图像文件格式
4.编写自己的文件解码器
28.译注:
中英文术语对照表
第一部分:
介绍
∙PIL1.1.5|2005年5月5日|FredrikLundh
概览
介绍
PythonImagingLibrary?
为Python解释器提供了图像处理的功能。
这个库提供了广泛的文件格式支持、高效的内部表示以及相当强大的图像处理功能。
这个图像处理库的核心被设计成为能够快速访问以几种基本像素类型表示的图像数据。
它为通用图像处理工具提供了一个坚实基础。
让我们来看一些这个库可能的用途:
图像归档处理
PythonImagingLibrary适合编写图像归档和批处理应用程序。
使用这个库可以创建缩略图、转换文件格式、打印图像等。
当前版本的库能够识别和读取很多的图像格式。
而能够输出的格式被特意限制于在交换和展示图像中最常用的格式上。
图像显示
当前版本的库包含Tk的PhotoImage?
和?
BitmapImage?
接口,也包含Windows的DIB接口(可以同PythonWin和其他基于Windows的界面工具包一起使用)。
还有一些其他的PIL支持提供了很多其他的GUI工具包。
为了调试方便,库中有一个?
show?
方法,它把图像保存到磁盘中,并调用外部显示工具来显示它。
图像处理
这个库提供了基本的图像处理功能,包括点操作、一些内建滤波核的滤波操作以及颜色空间变换操作。
这个库也支持图像的缩放、旋转及任何仿射(affine)变换。
库中包含一个histogram方法,可以从图像中提取某些统计特征。
用它可以实现自动的对比度增强以及全局统计分析功能。
入门导引
使用Image类
PythonImagingLibrary中最重要的类是Image类,它定义在与它同名的模块中。
有多种创建这个类的对象的方法:
可以从文件中读取得到,也可以从其他图像经处理得到,或者创建一个全新的。
要从文件读取图像,可以使用Image模块提供的open函数。
切换行号显示
1>>>importImage
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"。
如果文件不能打开,会抛出一个IOError异常。
一旦有了一个Image类的对象,接下来就可以使用这个类定义的方法来处理和操作图像了。
比如说,显示刚才打开的文件:
切换行号显示
1>>>im.show()
2
(show的标准实现不是很高效,因为它先将图像保存成一个临时文件,然后调用xv程序来显示图像。
如果你没有安装xv,它甚至不能工作。
然而如果它可用,它将是非常方便的出错和测试的工具。
)
接下来的内容将对库中提供的一些函数进行一个概述。
读写图像
PythonImagingLibrary支持很广泛的图象文件格式。
要从磁盘上读取文件,使用Image模块提供的open函数。
你不必了解你要打开的文件的格式,库会自动根据文件的内容来确定图像的格式。
要保存文件,使用Image类的save方法。
保存文件时,文件名就变得非常重要了。
除非你指定了格式,否则库会根据文件扩展名来决定使用哪种格式存储。
将文件转换成JPEG
切换行号显示
1importos,sys
2importImage
3
4forinfileinsys.argv[1:
]:
5
6outfile=f+".jpg"
7ifinfile!
=outfile:
8try:
9Image.open(infile).save(outfile)
10exceptIOError:
11print"cannotconvert",infile
12
save方法可以带第二个参数,用来显式指定要保存的文件的格式。
如果要使用非标准的扩展名,就必须这样指定文件格式:
创建JPEG缩略图
切换行号显示
1importos,sys
2importImage
3
4size=128,128
5
6forinfileinsys.argv[1:
]:
70]+".thumbnail"
8ifinfile!
=outfile:
9try:
10im=Image.open(infile)
11im.thumbnail(size)
12im.save(outfile,"JPEG")
13exceptIOError:
14print"cannotcreatethumbnailfor",infile
15
有一点非常重要的需要注意的是,除非到了迫不得已的时候,库不会装载或者解码原始的点阵数据。
当打开一个文件的时候,库会读取文件头以获得文件格式、颜色模式、图像大小等属性,但是文件剩余的部分不会马上处理。
这意味着,文件打开操作是很快的,它与文件的大小、压缩的类型没有关系。
这里是一个快速识别一系列图像文件的简单例子:
识别图像文件
切换行号显示
1importsys
2importImage
3
4forinfileinsys.argv[1:
]:
5try:
6im=Image.open(infile)
7printinfile,im.format,"%dx%d"%im.size,im.mode
8exceptIOError:
9pass
10
裁剪、粘贴和合并图像
Image类提供一些对图像中的某一区域进行处理的方法。
要从图像中提取一块子矩形区域,使用crop方法。
从图像中拷贝一块子矩形区域?
===
切换行号显示
1box=(100,100,400,400)
2region=im.crop(box)
3
区域由一个4元组定义,表示为坐标是(left,upper,right,lower)。
PythonImagingLibrary使用左上角为(0,0)的坐标系统。
同时要注意,这些坐标指向像素之间的位置,因此上述例子中描述的区域的大小为300x300像素。
区域图像能够经过某些特定的处理并粘回原处。
处理一块子矩形区域,并粘回原处
切换行号显示
1region=region.transpose(Image.ROTATE_180)
2im.paste(region,box)
3
当把区域粘回图像时,指定的区域大小必须和区域图像的大小相同。
此外,区域不能超出图像的边界。
然而,原始图像的模式和区域图像的模式不必相同。
如果不相同,区域图像的模式会在粘贴前被自动转换(细节请查看后面有关颜色变换的章节)。
这里有另一个例子:
滚动一幅图像
切换行号显示
1defroll(image,delta):
2"Rollanimagesideways"
3
4xsize,ysize=image.size
5
6delta=delta%xsize
7ifdelta==0:
returnimage
8
9part1=image.crop((0,0,delta,ysize))
10part2=image.crop((delta,0,xsize,ysize))
11image.paste(part2,(0,0,xsize-delta,ysize))
12image.paste(part1,(xsize-delta,0,xsize,ysize))
13
14returnimage
15
更高级的技巧是,paste方法可以带一个透明掩模作为可选参数。
在这个掩模中,像素值255代表被粘贴的图像在那个位置上是不透明的。
(就是说,此处显示被粘贴的图像上的值。
)像素值0表示被粘贴的图像是完全透明的。
在它们之间的值表示不同程度的透明度。
PythonImagingLibrary还允许对一幅多通道图像(比如RGB图像)的单个通道进行操作。
split方法能够创建一组新的图像,每一幅都是原来多通道图像的一个通道。
merge函数以一个模式和一组图像的元组为参数,把这些图像组成一幅新图像。
下面的例子实现交换一幅RGB图像的三个通道:
分离与合并通道
切换行号显示
1r,g,b=im.split()
2im=Image.merge("RGB",(b,g,r))
3
几何变换
Image类包含resize和rotate方法来缩放和旋转图像。
前者带一个tuple类型的参数来表示新的图像大小,后者带一个逆时针旋转的角度值作为参数。
简单的几何变换
切换行号显示
1out=im.resize((128,128))
2out=im.rotate(45)#degreescounter-clockwise
3
如果要将图像旋转90度的整数倍,可以使用rotate或者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)andcorrespondingrotateoperations.
一个更通用的变换方法是transform,在参考手册中有对它的详细叙述。
颜色变换
PythonImagingLibrary提供convert函数,可以将图像在不同的像素格式间转换。
转换图像颜色模式
切换行号显示
1im=Image.open("lena.ppm").convert("L")
2
库支持在所有支持的颜色模式和"L"以及"RGB"之间的直接转换。
其他颜色模式之间的转换要借助于中间图像模式(通常是"RGB"模式)。
图像增强
PythonImagingLibrary提供一系列的函数和模块来进行图像增强。
滤波器
ImageFilter?
模块中包含一些预定义的增强滤波器,用filter方法来使用滤波器。
使用滤波器
切换行号显示
1importImageFilter
2out=im.filter(ImageFilter.DETAIL)
3
点操作
point方法可以对图像的像素值进行变换(比如对比度变换)。
在大多数场合,使用函数对象(带一个参数)作为参数传递给point方法。
每一个像素使用这个函数对象进行变换:
使用点变换
切换行号显示
1#multiplyeachpixelby1.2
2out=im.point(lambdai:
i*1.2)
3
用上面的技巧,你可以对图像用任何简单的表达式进行变换。
你还可以结合使用point和paste方法来有选择的改变一幅图像:
处理单个通道
切换行号显示
1#splittheimageintoindividualbands
2source=im.split()
3
4R,G,B=0,1,2
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
注意用来创建mask的语法:
切换行号显示
1imout=im.point(lambdai:
expressionand255)
2
Python只计算一个逻辑表达式的一部分,只要能确定表达式的结果其他部分就不进行计算了,并把最后计算得到的值作为表达式的值返回。
因此,如果上述expression是false(0),Python就不会检查第二个参数,因此返回0,否则返回255。
增强
对于更多更高级的图像增强,可以使用ImageEnhance?
模块。
一旦从图像上创建了增强对象,你就可以尝试采用各种不同的参数进行快速的增强处理了。
你能通过这样的方法来调整图像的对比度、亮度、色彩平衡和锐度。
增强图像
切换行号显示
1importImageEnhance
2
3enh=ImageEnhance.Contrast(im)
4enh.enhance(1.3).show("30%morecontrast")
5
图像序列
PythonImagingLibrary包含对于图像序列(也称作动画格式)的基本支持。
支持的序列格式包括FLI/FLC,GIF,和一些试验性的格式。
TIFF文件也能包含超过一帧的图像。
当你打开一个序列文件时,PIL会自动加载序列中的第一帧。
你可以使用seek和tell方法在不同帧之间移动:
读取图像序列
切换行号显示
1importImage
2
3im=Image.open("animation.gif")
4im.seek(1
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- PythonImagingLibrary 中文 手册
![提示](https://static.bdocx.com/images/bang_tan.gif)