您的位置:首页 > 编程语言 > Python开发

Python图像处理库PIL的Image模块介绍(五)

2016-02-20 23:20 851 查看
26、
Seek

定义:im.seek(frame)

含义:在给定的文件序列中查找指定的帧。如果查找超越了序列的末尾,则产生一个EOFError异常。当文件序列被打开时,PIL库自动指定到第0帧上。

注意:在当前的版本上,大多数序列格式只允许用户查找下一帧,不能跳跃式查找指定的帧。

例子:

>>>from PIL import Image

>>>im_gif = Image.open("D:\\Code\\Python\\test\\img\\test.gif")

>>>im_gif.mode

'P'

>>>im_gif.show()

>>>im_gif.seek(2)

>>>im_gif.show()

>>>im_gif.seek(8)

>>>im_gif.show()

通过上面的code,分别找到了第2帧和第8帧图像。

27、
Show

定义:im.show()

含义:显示一张图像。这个方法主要用于调试。

在Unix平台,这个方法将图像保存为临时的PPM文件,并且调用xv功能。

在widows中,它将图像保存为临时的BMP文件,并且使用标准的BMP显示功能显示它。

这个方法返回空。

例子:

>>>from PIL import Image

>>>im01 = Image.open("D:\\Code\\Python\\test\\img\\test01.jpg")

>>> im01.show()

28、
Split

定义:im.split()
⇒ sequence

含义:返回当前图像各个通道组成的一个元组。例如,分离一个“RGB”图像将产生三个新的图像,分别对应原始图像的每个通道(红,绿,蓝)。

例子:

>>>from PIL import Image

>>> im01 =Image.open("D:\\Code\\Python\\test\\img\\test01.jpg")

>>>r,g,b = im01.split()

>>>r.mode

'L'

>>>r.size

(1024, 768)

>>>im01.mode

'RGB'

>>>im01.size

(1024, 768)

29、
Tell

定义:im.tell()
⇒ integer

含义:返回当前帧所处位置,从0开始计算。

例子:

>>>from PIL import Image

>>>im_gif = Image.open("D:\\Code\\Python\\test\\img\\test.gif")

>>>im_gif.tell()

0

>>>im_gif.seek(8)

>>>im_gif.tell()

8

30、
Thumbnail

定义:im.thumbnail(size)

im.thumbnail(size, filter)

含义:修改当前图像,使其包含一个自身的缩略图,该缩略图尺寸不大于给定的尺寸。这个方法会计算一个合适的缩略图尺寸,使其符合当前图像的宽高比,调用方法draft()配置文件读取器,最后改变图像的尺寸。

变量filter应该是NEAREST、BILINEAR、BICUBIC或者ANTIALIAS之一。如果省略该变量,则默认为NEAREST。

注意:在当前PIL的版本中,滤波器bilinear和bicubic不能很好地适应缩略图产生。用户应该使用ANTIALIAS,图像质量最好。如果处理速度比图像质量更重要,可以选用其他滤波器。

这个方法在原图上进行修改。如果用户不想修改原图,可以使用方法copy()拷贝一个图像。这个方法返回空。

例子:

>>>from PIL import Image

>>> im01 =Image.open("D:\\Code\\Python\\test\\img\\test01.jpg")

>>>im01.thumbnail((100,100))

应该已经为图像im01创建了不大于100x100的缩略图。

31、
Tobitmap

定义:im.tobitmap()⇒
string

含义:返回转换为X11的bitmap图像。

例子:

>>>from PIL import Image

>>>im01 = Image.open("D:\\Code\\Python\\test\\img\\test01.jpg")

>>>str0 = im01.tobitmap()



Traceback (mostrecent call last):

File "<pyshell#279>", line 1,in <module>

str0 = im01.tobitmap()

File"C:\Python27\lib\site-packages\PIL\Image.py", line 710, in tobitmap

raise ValueError("not a bitmap")

ValueError: nota bitmap



暂时不知道因为什么原因,需要debug。

32、
Tostring

定义:im.tostring()
⇒ string

含义:返回一个使用标准“raw”编码器生成的包含像素数据的字符串。

例子:

>>>from PIL import Image

>>> im01 =Image.open("D:\\Code\\Python\\test\\img\\test01.jpg")

>>>str0 = im01.tostring()



Traceback (mostrecent call last):

File "<pyshell#281>", line 1,in <module>

str0= im01.tostring()

File"C:\Python27\lib\site-packages\PIL\Image.py", line 695, in tostring

"Please call tobytes() instead.")

Exception:tostring() has been removed. Please call tobytes() instead.

当前PIL版本已经去除了该方法。

33、
Transform

定义1:im.transform(size,method,
data) ⇒ image

im.transform(size, method, data, filter)
⇒ image

含义1:使用给定的尺寸生成一张新的图像,与原图有相同的模式,使用给定的转换方式将原图数据拷贝到新的图像中。

在当前的PIL版本中,参数method为EXTENT(裁剪出一个矩形区域),AFFINE(仿射变换),QUAD(将正方形转换为矩形),MESH(一个操作映射多个正方形)或者PERSPECTIVE。

变量filter定义了对原始图像中像素的滤波器。在当前的版本中,变量filter为NEAREST、BILINEAR、BICUBIC或者ANTIALIAS之一。如果忽略,或者图像模式为“1”或者“P”,该变量设置为NEAREST。

例子1:

>>>from PIL import Image

>>> im01 =Image.open("D:\\Code\\Python\\test\\img\\test01.jpg")

>>> im01.size

(1024, 768)

>>> trans1 =im01.transform((300,300), Image.EXTENT, (0, 0, 600, 600))

>>> trans1.size

(300, 300)

图像im01如下:





图像trans1为图像im01的(0, 0, 600,600)缩小到(300,300)后的图像:




定义2:im.transform(size,EXTENT,
data) ⇒ image

im.transform(size, EXTENT, data, filter)
⇒ image

含义2:从图像中裁剪一个区域。

变量data为指定输入图像中两个坐标点的4元组(x0,y0,x1,y1)。输出图像为这两个坐标点之间像素的采样结果。例如,如果输入图像的(x0,y0)为输出图像的(0,0)点,(x1,y1)则与变量size一样。

这个方法可以用于在当前图像中裁剪,放大,缩小或者镜像一个任意的长方形。它比方法crop()稍慢,但是与resize操作一样快。

例子2:

与例子1一样。

定义3:im.transform(size, AFFINE, data)
⇒ image

im.transform(size, AFFINE,data, filter)
⇒ image

含义3:对当前的图像进行仿射变换,变换结果体现在给定尺寸的新图像中。

变量data是一个6元组(a,b,c,d,e,f),包含一个仿射变换矩阵的第一个两行。输出图像中的每一个像素(x,y),新值由输入图像的位置(ax+by+c,
dx+ey+f)的像素产生,使用最接近的像素进行近似。

这个方法用于原始图像的缩放、转换、旋转和裁剪。

例子3:

>>>from PIL import Image

>>> im01 =Image.open("D:\\Code\\Python\\test\\img\\test01.jpg")

>>> im01.size

(1024, 768)

>>> trans3 =im01.transform((300,300), Image.AFFINE, (1,2,3,2,1,4))

>>> trans3.size

(300, 300)

图像trans3如下:




定义4:im.transform(size,QUAD, data)
⇒ image

im.transform(size, QUAD, data, filter)
⇒ image

含义4:输入图像的一个四边形(通过四个角定义的区域)映射到给定尺寸的长方形。

变量data是一个8元组(x0,y0,x1,y1,x2,y2,x3,y3),它包括源四边形的左上,左下,右下和右上四个角。

例子4:

>>>from PIL import Image

>>> im01 =Image.open("D:\\Code\\Python\\test\\img\\test01.jpg")

>>> im01.size

(1024, 768)

>>> trans4 =im01.transform((300,300), Image.QUAD, (0,0,0,500,600,500,600,0))

>>> trans4.size

(300, 300)

定义5:im.transform(size,MESH, data)
⇒ image

im.transform(size, MESH, data, filter)
⇒ image

含义5:与QUAD类似,但是变量data是目标长方形和对应源四边形的list。

例子5:



定义6:im.transform(size,PERSPECTIVE, data)
⇒ image

im.transform(size, PERSPECTIVE, data, filter)
⇒ image

含义6:对当前图像进行透视变换,产生给定尺寸的新图像。

变量data是一个8元组(a,b,c,d,e,f,g,h),包括一个透视变换的系数。对于输出图像中的每个像素点,新的值来自于输入图像的位置的(a
x + b y + c)/(g x + h y + 1), (d x+ e
y + f)/(g x + h y + 1)像素,使用最接近的像素进行近似。

这个方法用于原始图像的2D透视。

例子6:

>>>from PIL import Image

>>> im01 =Image.open("D:\\Code\\Python\\test\\img\\test01.jpg")

>>>im01.size

(1024, 768)

>>> trans6= im01.transform((300,300), Image.PERSPECTIVE, (1,2,3,2,1,6,1,2))

>>>trans6.size

(300, 300)

34、
Transpose

定义:im.transpose(method)⇒ image

含义:返回当前图像的翻转或者旋转的拷贝。

变量method的取值为:FLIP_LEFT_RIGHT,FLIP_TOP_BOTTOM,ROTATE_90,ROTATE_180,或者ROTATE_270。

例子:

>>>from PIL import Image

>>>im01 = Image.open("D:\\Code\\Python\\test\\img\\test01.jpg")

>>> im= im01.transpose(Image.FLIP_LEFT_RIGHT)

图像im为图像im01的水平方向镜像。

35、 Verify

定义:im.verify()

含义:尝试判断文件是否损坏,实际上并没有对图像数据进行解析。如果这个方法发现了任何问题,它将产生对应的异常。这个方法只工作于刚打开的图像;如果图像已经被加载,该方法的结果将会是未定义的。如果用户在使用这个方法后需要加载图像,用户需要重新打开图像文件。

注意:这个方法不能捕获所有的错误;要捕获解码错误,用户必须加载整个图像。

例子:

>>>from PIL import Image

>>>im01 = Image.open("D:\\Code\\Python\\test\\img\\test01.jpg")

>>>im01.verify()

没有任何输出,表示图像im01是没有损坏的。

(Image模块完)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: