




已阅读5页,还剩76页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
Python Imaging Library 中文手册这是PIL的官方手册,2005年5月6日发布。这个版本涵盖 PIL 1.1.5的全部内容。本中文手册来自W 啄木鸟社区 你可以在PythonWare library找到改文档其它格式的版本以及先前的版本。原版出处:/library/pil/handbook/目录1. Python Imaging Library 中文手册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. Drawing Postscript8. 更多关于读取图像1. 控制解码器3. 概念1. 通道2. 模式3. 大小4. 坐标系统5. 调色板6. 信息7. 滤波器4. 第二部分:模块手册5. Image 模块1. 例子2. 函数1. new2. open3. blend4. composite5. eval6. frombuffer7. fromstring8. merge3. 方法1. convert2. copy3. crop4. draft5. filter6. fromstring7. getbands8. getbbox9. getdata10. getextrema11. getpixel12. histogram13. load14. offset15. paste16. point17. putalpha18. putdata19. putpalette20. putpixel21. resize22. rotate23. save24. seek25. show26. split27. tell28. thumbnail29. tobitmap30. tostring31. transform32. transpose33. verify4. 属性1. format2. mode3. size4. palette5. info6. ImageChops 模块1. 函数1. constant2. duplicate3. invert4. lighter5. darker6. difference7. multiply8. screen9. add10. subtract11. blend12. composite13. offset7. ImageColor 模块1. Colour Names2. 函数1. getrgb2. getcolor8. ImageDraw 模块1. Example2. Concepts1. Coordinates2. Colour Names3. Fonts3. 函数1. Draw4. 方法1. arc2. bitmap3. chord4. ellipse5. line6. pieslice7. point8. polygon9. rectangle10. text11. textsize5. Options1. outline2. fill3. font6. Compatibility1. ImageDraw2. setink3. setfill4. setfont9. ImageEnhance 模块1. Example2. Interface3. The Color Class4. The Brightness Class5. The Contrast Class6. The Sharpness Class10. ImageFile 模块1. Example2. 函数1. Parser3. 方法1. feed11. ImageFileIO 模块1. 函数12. ImageFilter 模块1. Example2. Filters1. Kernel2. RankFilter3. MinFilter4. MedianFilter5. MaxFilter13. ImageFont 模块1. 例子2. 函数1. load2. load_path3. truetype4. load_default3. 方法1. getsize2. getmask14. ImageGrab 模块1. 函数1. grab2. grabclipboard15. ImageOps 模块1. 函数1. autocontrast2. colorize3. crop4. deform5. equalize6. expand7. fit8. flip9. grayscale10. invert11. mirror12. posterize13. solarize16. ImagePath 模块1. 函数1. Path17. ImagePalette 模块1. 例子2. 类1. ImagePalette18. ImageSequence 模块1. 函数1. Iterator2. 方法1. Operator 19. ImageStat 模块1. 函数1. Stat2. Attributes1. extrema2. count3. sum4. sum25. pixel6. median7. rms8. var9. stddev20. ImageTk 模块1. The BitmapImage Class2. The PhotoImage Class21. ImageWin 模块1. Dib 类1. Dib2. 方法1. expose2. draw3. palette4. paste22. PSDraw 模块1. Classes1. PSDraw2. PSDraw 方法1. begin2. end3. line4. rectangle5. text6. setfont7. setink8. setfill23. ImageCrackCode 模块 (PIL Plus)1. 函数1. CrackCode2. 方法 and attributes1. area2. bbox3. caliper4. centroid5. edge6. links7. offset8. start9. top10. hit11. topath12. getmask13. getoutline24. ImageMath 模块 (PIL Plus)1. 例子2. 函数1. eval3. 表达式语法1. 运算符2. 内建函数25. 第三部分:工具手册26. pildriver 工具1. 例子2. The PILDriver Class3. 方法4. pilconvert 工具5. pilfile 工具6. pilfont 工具7. pilprint 工具27. 附录1. 软件许可证2. 技术支持3. 图像文件格式4. 编写自己的文件解码器28. 译注:中英文术语对照表第一部分:介绍 PIL 1.1.5 | 2005年5月5日 | Fredrik Lundh概览介绍Python Imaging Library为Python解释器提供了图像处理的功能。这个库提供了广泛的文件格式支持、高效的内部表示以及相当强大的图像处理功能。这个图像处理库的核心被设计成为能够快速访问以几种基本像素类型表示的图像数据。它为通用图像处理工具提供了一个坚实基础。让我们来看一些这个库可能的用途:图像归档处理Python Imaging Library适合编写图像归档和批处理应用程序。使用这个库可以创建缩略图、转换文件格式、打印图像等。当前版本的库能够识别和读取很多的图像格式。而能够输出的格式被特意限制于在交换和展示图像中最常用的格式上。图像显示当前版本的库包含Tk的PhotoImage和BitmapImage接口,也包含Windows的DIB接口(可以同PythonWin和其他基于Windows的界面工具包一起使用)。还有一些其他的PIL支持提供了很多其他的GUI工具包。为了调试方便,库中有一个show方法,它把图像保存到磁盘中,并调用外部显示工具来显示它。图像处理这个库提供了基本的图像处理功能,包括点操作、一些内建滤波核的滤波操作以及颜色空间变换操作。这个库也支持图像的缩放、旋转及任何仿射(affine)变换。库中包含一个histogram方法,可以从图像中提取某些统计特征。用它可以实现自动的对比度增强以及全局统计分析功能。入门导引使用 Image 类Python Imaging Library中最重要的类是Image 类,它定义在与它同名的模块中。有多种创建这个类的对象的方法:可以从文件中读取得到,也可以从其他图像经处理得到,或者创建一个全新的。要从文件读取图像,可以使用Image 模块提供的open 函数。切换行号显示 1 import Image 2 im = Image.open(lena.ppm) 3 如果成功,这个函数返回一个Image 对象。可以使用这个对象的属性来查看文件的内容。切换行号显示 1 print im.format, im.size, im.mode 2 PPM (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 ,它甚至不能工作。然而如果它可用,它将是非常方便的出错和测试的工具。)接下来的内容将对库中提供的一些函数进行一个概述。读写图像Python Imaging Library 支持很广泛的图象文件格式。要从磁盘上读取文件,使用 Image 模块提供的open 函数。你不必了解你要打开的文件的格式,库会自动根据文件的内容来确定图像的格式。要保存文件,使用Image 类的save 方法。保存文件时,文件名就变得非常重要了。除非你指定了格式,否则库会根据文件扩展名来决定使用哪种格式存储。将文件转换成 JPEG切换行号显示 1 import os, sys 2 import Image 3 4 for infile in sys.argv1: 5 f, e = os.path.splitext(infile) 6 outfile = f + .jpg 7 if infile != outfile: 8 try: 9 Image.open(infile).save(outfile) 10 except IOError: 11 print cannot convert, infile 12 save 方法可以带第二个参数,用来显式指定要保存的文件的格式。如果要使用非标准的扩展名,就必须这样指定文件格式:创建 JPEG 缩略图切换行号显示 1 import os, sys 2 import Image 3 4 size = 128, 128 5 6 for infile in sys.argv1: 7 outfile = os.path.splitext(infile)0 + .thumbnail 8 if infile != outfile: 9 try: 10 im = Image.open(infile) 11 im.thumbnail(size) 12 im.save(outfile, JPEG) 13 except IOError: 14 print cannot create thumbnail for, infile 15 有一点非常重要的需要注意的是,除非到了迫不得已的时候,库不会装载或者解码原始的点阵数据。当打开一个文件的时候,库会读取文件头以获得文件格式、颜色模式、图像大小等属性,但是文件剩余的部分不会马上处理。这意味着,文件打开操作是很快的,它与文件的大小、压缩的类型没有关系。这里是一个快速识别一系列图像文件的简单例子:识别图像文件切换行号显示 1 import sys 2 import Image 3 4 for infile in sys.argv1: 5 try: 6 im = Image.open(infile) 7 print infile, im.format, %dx%d % im.size, im.mode 8 except IOError: 9 pass 10 裁剪、粘贴和合并图像Image 类提供一些对图像中的某一区域进行处理的方法。要从图像中提取一块子矩形区域,使用 crop 方法。从图像中拷贝一块子矩形区域=切换行号显示 1 box = (100, 100, 400, 400) 2 region = im.crop(box) 3 区域由一个4元组定义,表示为坐标是 (left, upper, right, lower)。 Python Imaging Library 使用左上角为 (0, 0)的坐标系统。同时要注意,这些坐标指向像素之间的位置,因此上述例子中描述的区域的大小为300x300像素。区域图像能够经过某些特定的处理并粘回原处。处理一块子矩形区域,并粘回原处切换行号显示 1 region = region.transpose(Image.ROTATE_180) 2 im.paste(region, box) 3 当把区域粘回图像时,指定的区域大小必须和区域图像的大小相同。此外,区域不能超出图像的边界。然而,原始图像的模式和区域图像的模式不必相同。如果不相同,区域图像的模式会在粘贴前被自动转换 (细节请查看后面有关颜色变换 的章节)。这里有另一个例子:滚动一幅图像切换行号显示 1 def roll(image, delta): 2 Roll an image sideways 3 4 xsize, ysize = image.size 5 6 delta = delta % xsize 7 if delta = 0: return image 8 9 part1 = image.crop(0, 0, delta, ysize) 10 part2 = image.crop(delta, 0, xsize, ysize) 11 image.paste(part2, (0, 0, xsize-delta, ysize) 12 image.paste(part1, (xsize-delta, 0, xsize, ysize) 13 14 return image 15 更高级的技巧是,paste方法可以带一个透明掩模作为可选参数。在这个掩模中,像素值255 代表被粘贴的图像在那个位置上是不透明的。 (就是说,此处显示被粘贴的图像上的值。)像素值 0 表示被粘贴的图像是完全透明的。在它们之间的值表示不同程度的透明度。Python Imaging Library 还允许对一幅多通道图像(比如RGB图像)的单个通道进行操作。split方法能够创建一组新的图像,每一幅都是原来多通道图像的一个通道。merge函数以一个模式和一组图像的元组为参数,把这些图像组成一幅新图像。下面的例子实现交换一幅RGB图像的三个通道:分离与合并通道切换行号显示 1 r, g, b = im.split() 2 im = Image.merge(RGB, (b, g, r) 3 几何变换Image 类包含resize 和 rotate 方法来缩放和旋转图像。前者带一个tuple类型的参数来表示新的图像大小,后者带一个逆时针旋转的角度值作为参数。简单的几何变换切换行号显示 1 out = im.resize(128, 128) 2 out = im.rotate(45) # degrees counter-clockwise 3 如果要将图像旋转90度的整数倍,可以使用rotate 或者transpose 方法。后者还可以用来水平或者垂直镜像一幅图像。transpose图像切换行号显示 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) 6 Theres no difference in performance or result between transpose(ROTATE) and corresponding rotate operations.一个更通用的变换方法是 transform,在参考手册中有对它的详细叙述。颜色变换Python Imaging Library提供convert函数,可以将图像在不同的像素格式间转换。转换图像颜色模式切换行号显示 1 im = Image.open(lena.ppm).convert(L) 2 库支持在所有支持的颜色模式和L以及RGB之间的直接转换。其他颜色模式之间的转换要借助于中间图像模式(通常是RGB 模式)。图像增强Python Imaging Library提供一系列的函数和模块来进行图像增强。滤波器ImageFilter模块中包含一些预定义的增强滤波器,用filter 方法来使用滤波器。使用滤波器切换行号显示 1 import ImageFilter 2 out = im.filter(ImageFilter.DETAIL) 3 点操作point 方法可以对图像的像素值进行变换(比如对比度变换)。在大多数场合,使用函数对象(带一个参数)作为参数传递给point方法。每一个像素使用这个函数对象进行变换:使用点变换切换行号显示 1 # multiply each pixel by 1.2 2 out = im.point(lambda i: i * 1.2) 3 用上面的技巧,你可以对图像用任何简单的表达式进行变换。你还可以结合使用point 和paste 方法来有选择的改变一幅图像:处理单个通道切换行号显示 1 # split the image into individual bands 2 source = im.split() 3 4 R, G, B = 0, 1, 2 5 6 # select regions where red is less than 100 7 mask = sourceR.point(lambda i: i 100 and 255) 8 9 # process the green band 10 out = sourceG.point(lambda i: i * 0.7) 11 12 # paste the processed band back, but only where red was imageImage.new(mode, size, color)= image 使用给定的模式和大小创建一个新图像。大小是以2元组的形式给出的。 当创建单通道的图时,color是单个值;当创建多通道图像时,color是一个元组(每个通道一个值)。如果color参数缺省,图像被填充成全黑。如果color是None,则图像不被初始化。open Image.open(infile)= imageImage.open(infile, mode)= image 打开并识别给定的图像文件。这是一个会被延迟(lazy)的操作;实际的图像数据并不马上从文件中读入,而是等到需要处理这些数据的时候才被读入 (可以调用load方法强制读入数据)。如果要指定mode参数,则mode必须是r。o 你可以使用一个字符串(表示文件名)或者一个文件对象作为infile。在用文件对象时,文件对象必须实现read,seek, 和tell方法,而且必须用二进制模式打开。blend Image.blend(image1, image2, alpha)= imageo 对两幅图像用固定的透明度(alpha)插值生成新的图像。输入的两幅图像必须是同样的大小和模式。 out = image1 * (1.0 - alpha) + image2 * alpha 如果alpha是0.0,则会返回第一幅图像的一个拷贝。如果alpha是1.0,则会返回第二幅图像的一个拷贝。alpha的取值范围没有限制。如果必要,计算结果会被裁减到允许的输出值的范围。composite Iposite(image1, image2, mask)= image对两幅图像用图像mask作为透明度插值生成新的图像。 mask图像可以是1, L, 或者RGBA模式。所有的图像必须是同样的大小。eval Image.eval(function, image)= image将函数(应该带一个参数)作用于给定图像的每一个像素。如果图像有多个通道,这个函数会作用于每一个通道。注意,这个函数对于同样的像素值只会被调用一次,因此你不能使用一个随机函数或者其它的像素生成函数来作为函数。frombuffer Image.frombuffer(mode, size, data)= image(PIL 1.1.4 alpha 4中新增。) 对字符串或者缓冲区对象包含的像素数据,使用标准的raw解码器来创建图像。对于某些模式,图像内存可以与原始缓冲区共享同一块内存 (这意味着如果修改原始的缓冲区对象,将会对图像产生影响)。不是所有的模式都能够共享内存;支持的模式包括L、RGBX、RGBA和CMYK。对于其他模式,这个函数和fromstring函数作用相同。Image.frombuffer(mode, size, data, decoder, parameters)= image与对应的fromstring函数调用相同。fromstring Image.fromstring(mode, size, data)= image从字符串中读取像素数据,使用标准的raw解码器创建图像。Image.fromstring(mode, size, data, decoder, parameters)= imageo 与前一个函数的区别是,这个函数允许使用你使用任意PIL支持的像素解码器来解码数据。更多有关解码器的信息,参看decoder.htm 编写自己的文件解码器。注意,这个函数只是解码像素数据,而不是解码整个图像。如果要处理存在字符串中的完整图像,可以使用StringIO把字符串包装起来然后用open方法来装载它。merge Image.merge(mode, bands)= imageo 从一组单通道的图像创建一幅新图像。通道用图像的元组或者列表的形式给出,每一项是模式mode描述的一个通道。所有通道的大小必须相同。方法Image类的对象有下列方法。除非特别声明,所有的方法返回一个新的Image类型对象,包含处理的结果。convert im.convert(mode)= imageo 返回转换后的图象拷贝。对于P模式,这种转换通过调色板进行。如果模式被省略,那么该方法会自动选取一个能够保存所有图像信息和不需要调色板来表示的图像模式。当前版本的库支持L、RGB和CMYK模式之间的相互转换。当把一幅彩色图像转换成灰度图象(模式L),库使用 ITU-R 601-2两度转换公式: L = R * 299/1000 + G * 587/1000 + B * 114/1000 当把一幅灰度图象转换成2值图像(模式1)时,所有非零值都被转换成255(白)。要使用其它阈值,可以使用point方法。o im.convert(mode, matrix)= image将RGB模式图像使用一个转换矩阵转换成RGB或者L模式图像。矩阵是一个四元组或者16元组。下面的例子将RGB图像 (根据 ITU-R 709使用 D65 亮度进行过线性校正) 转换成 CIE XYZ颜色空间图像:Convert RGB to XYZ rgb2xyz = ( 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拷贝图像。使用这个函数把其它东西粘贴到图像中,并保留原来的图像不变。crop im.crop(box)= imageo 返回当前图像的一个矩形区域。box 是一个四元组指定左、上、右、下四个边界的坐标。这是一个会被延迟(lazy)的操作。改变原始的图像可能会影响到剪裁生成的图像。为消除这种影响,可以调用裁剪生成的图象的load方法。draft im.draft(mode, size)配置图像装载器使其能够返回与指定模式尽可能接近的图像。比如说,你可以使用这个函数,将彩色JPEG图像在装载的时候转换成灰度图象,或者从PCD文件中解出128x192的图像。注意,这个方法会改变调用的Image对象。如果图像已经被装入,这个方法没有任何作用。filter im.filter(filter)= imageo 返回当前图像经过给定滤波器滤波后的图像。 要查看可用的滤波器,参考ImageFilter模块。fromstring im.fromstring(data)im.fromstring(data, decoder, parameters) 与fromstring函数基本相同,只是将data装入当前图像。getbands im.getbands()= tuple of stringso 返回包含每个通道的名字的元组。比如,在RGB图像上调用getbands返回(R, G, B)。getbbox im.getbbox()= 4-tuple or NoneCalculates the bounding box of the non-zero regions in the image. The bounding box is returned as a 4-tuple d
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 学生消防安全培训教案课件
- 重庆管理基础知识
- 铸造厂考试试题及答案
- 中级银行从业试题及答案
- 福安国企考试真题及答案
- 2025年成套认知测试题及答案
- 2025年环保型货物海运进口代理及绿色认证合同
- 公司股东股权协议书5篇
- 慢性病防御课件
- 实施指南(2025)《GB-T2828.4-2008计数抽样检验程序第4部分:声称质量水平的评定程序》
- 出资比例的协议合同
- GB/T 10345-2022白酒分析方法
- GB/T 19418-2003钢的弧焊接头缺陷质量分级指南
- 四川省参保单位职工社会保险费欠费补缴申报表
- GA 622-2013消防特勤队(站)装备配备标准
- 《C++语言基础》全套课件(完整版)
- 240农业政策学-张广胜课件
- 垄断经典案例课件
- HSK标准教程5下-课件-L2
- 《你看起来很好吃》剧本
- 毕业设计论文-计算机类
评论
0/150
提交评论