本篇包含:16、Point    17、Putalpha    18、Putdata    19、Putpalette    20、Putpixel      21、Quantize     22、Resize   23、Rotate     24、Save                                   25、Seek    26、Show   27、Split    28、Tell     29、Thumbnail    30、Tobitmap     31、Transform     32、Transpose    33、Verify

16、  Point

  1. 定义1im.point(table)⇒ image
  2. im.point(function) image
  3. 含义1:返回给定查找表对应的图像像素值的拷贝。变量table为图像的每个通道设置256个值。如果使用变量function,其对应函数应该有一个参数。这个函数将对每个像素值使用一次,结果表格将应用于图像的所有通道。
  4.  
  5. 如果图像的模式为“I(整数)”或者“F(浮点)”,用户必须使用function方式,function必须按照下面的格式:
  6. argument * scale+ offset
  7. 例如:
  8. out = im.point(lambda i: i * 1.2 + 10)
  9. 用户可以省略变量scaleoffset
  10.  
  11. 例子1
  12. from PIL import Image
  13. im = Image.open("jing.png")
  14. im_point = im.point(lambda x:x*1.3+5)
  15. im_point.save("he.png")
  16. 注:图像im_point_fun比原图im01亮度增加了很多;因为lambda表达式中对原图的每个像素点的值都做了增加操作。
  17.  
  18. 定义2im.point(table,mode) image
  19. im.point(function, mode) image
  20. 含义2:与定义1一样,但是它会为输出图像指定一个新的模式。这个方法可以一步将模式为“L”和“P”的图像转换为模式为“1”的图像。
  21.  
  22. 例子2
  23. from PIL import Image
  24. im = Image.open("jing.png")
  25. r,g,b = im.split()
  26. im_point1 = r.point(lambda x:x*1.3+5,"")
  27. print(im_point1.getpixel((0,0)))
  28. im_point1.save("he1.png")
  29. im_point2 = r.point(lambda x:0,"")
  30. im_point2.save("he2.png")
  31. print(im_point2.getpixel((10,10)))
    输出为:
    6
    0
    图像im_point1为全白图
  32. 图像im_point2为全黑图

17、  Putalpha

  1. 定义:im.putalpha(band)
  2. 含义:将给定的通道拷贝到图像的alpha层。此处的图像模式必须为“RGBA”,变量band必须为“L”或者“1”。
  3. New in PIL 1.1.5)方法putalpha()也可以用于其他模式;图像原地转换为有alpha通道的模式(通常转换为“LA”或者“RGBA”)。变量band要么为图像,要么为颜色值(一个整数)。
  4.  
  5. 例子:
  6. from PIL import Image
  7. im =Image.open("xiao.png")
  8. im1.mode
  9. im1.putalpha(100)
  10. print(im1.mode)
  11. print(im1.getpixel((0,0)))
  12. 输出:
  13. 'RGB'
  14. 'RGBA'
  15. (11, 113, 198,100)

18、  Putdata

  1. 定义:im.putdata(data)
  2. im.putdata(data, scale, offset)
  3.  
  4. 含义:从sequence对象中拷贝数据到当前图像,从图像的左上角(00)位置开始。变量scaleoffset用来调整sequence中的值:
  5. pixel = value *scale + offset
  6. 如果变量scale忽略,则默认为1.0。如果变量offset忽略,则默认为0.0
  7.  
  8. 例子:
  9. from PIL import Image
  10. im =Image.open("jing.png")
  11. r,g,b =im.split()
  12. print(r.getpixel((0,0)))
  13. print(r.getpixel((1,0)))
  14. print(r.getpixel((2,0)))
  15. print(r.getpixel((3,0)))
  16. r.putdata([1,2,3,4])
  17. print(r.getpixel((0,0)))
  18. print(r.getpixel((1,0)))
  19. print(r.getpixel((2,0)))
  20. print(r.getpixel((3,0)))
  21. 输出:
  22. 11
  23. 10
  24. 9
  25. 6
  26. 1
  27. 2
  28. 3
  29. 4

19、  Putpalette

  1. 定义:im.putpalette(sequence)
  2. 含义:为“P”或者“L”图像增加一个调色板。对于“L”图像,它的模式将变化为“P”。调色板序列需要包含768项整数,每组三个值表示对应像素的红,绿和蓝。用户可以使用768byte的字符串代替这个整数序列。
  3. 例子:
  4. from PIL import Image
  5. im =Image.open("jing.png")
  6. r,g,b = im01.split()
  7. print(r.mode)
  8. r.putpalette([1,2,3])
  9. print(r.mode)
  10. 输出:
  11. 'L'
  12. 'P'

20、  Putpixel

  1. 定义:im.putpixel(xy,colour)
  2. 含义:修改指定位置上的像素值。对于单通道图像,变量colour为一个数值;对于多通道图像,变量colour为一个元组。
  3. 注意:这个方法执行比较慢。如果是1.1.6版本,像素访问对象(参考load方法)提供了一个更快的方法修改图像。
  4. 如果用户要生成整幅图像,可以使用更有效的方法产生一个python list,然后使用方法putdata()将它拷贝到图像上去。对于更大的改变,使用方法paste或者ImageDraw模块。
  5.  
  6. 例子:
  7. from PIL import Image
  8. im =Image.open("jing.png")
  9. print(im.getpixel((0,0)))
  10. im.putpixel((0,0),(1,2,3))
  11. print(im.getpixel((0,0)))
  12. 输出:
  13. (11, 113, 198)
  14. (1, 2, 3) 

21、  Quantize

  1. 定义:im.quantize(colors,**options) image
  2. 含义:(不赞成)使用给定的颜色将“L”或者“RGB”图像转换为“P”图像,返回新的图像。
  3. 新的代码中,使用有自适应的调色板的convert方法来代替:
  4. out =im.convert("P", palette=Image.ADAPTIVE,colors=256) 

22、  Resize

  1. 定义:im.resize(size) image
  2. im.resize(size, filter) image
  3. 含义:返回改变尺寸的图像的拷贝。变量size是所要求的尺寸,是一个二元组:(width, height)。
  4. 变量filterNEARESTBILINEARBICUBIC或者ANTIALIAS之一。如果忽略,或者图像模式为“1”或者“P”,该变量设置为NEAREST
  5. 注意:在当前的版本中bilinearbicubic滤波器不能很好地适应大比例的下采样(例如生成缩略图)。用户需要使用ANTIALIAS,除非速度比质量更重要。

23、  Rotate

  1. 定义:im.rotate(angle) image
  2. im.rotate(angle,filter=NEAREST, expand=0) image
  3. 含义:返回一个按照给定角度顺时钟围绕图像中心旋转后的图像拷贝。
  4. 变量filter应该是NEARESTBILINEAR或者BICUBIC之一。如果省略该变量,或者图像模式为“1”或者“P”,则默认为NEAREST
  5. 变量expand,如果为true,表示输出图像足够大,可以装载旋转后的图像。如果为false或者缺省,则输出图像与输入图像尺寸一样大。
  6.  
  7. 例子:
  8. from PIL import Image
  9. im = Image.open("jing.png")
  10. im_30 = im.rotate(30)
  11. im_30.save("he1.png")
  12. im_31 = im.rotate(30,Image.BICUBIC,1)
  13. im_31.save("he2.png")
    注:im_30旋转30度大小不变,im_31旋转30度大小改变

24、  Save

  1. 定义:im.save(outfile,options…)
  2. im.save(outfile, format, options…)
  3. 含义:使用给定的文件名保存图像。如果变量format缺省,如果可能的话,则从文件名称的扩展名判断文件的格式。该方法返回为空。
  4. 关键字options为文件编写器提供一些额外的指令。如果编写器不能识别某个选项,它将忽略它。
  5. 用户可以使用文件对象代替文件名称。在这种情况下,用户必须指定文件格式。文件对象必须实现了seek()、tell()和write()方法,且其以二进制模式打开。
  6. 如果方法save()因为某些原因失败,这个方法将产生一个异常(通常为IOError异常)。如果发生了异常,该方法也有可能已经创建了文件,并向文件写入了一些数据。如果需要的话,用户的应用程序可以删除这个不完整的文件。

25、  Seek

  1. 定义:im.seek(frame)
  2. 含义:在给定的文件序列中查找指定的帧。如果查找超越了序列的末尾,则产生一个EOFError异常。当文件序列被打开时,PIL库自动指定到第0帧上。
  3. 注意:在当前的版本上,大多数序列格式只允许用户查找下一帧,不能跳跃式查找指定的帧。
  4.  
  5. 例子:
  6.  
  7. from PIL import Image
  8. im_gif = Image.open("xin.gif")
  9. print(im_gif.mode)
  10. im_gif.seek(2)
  11. im_gif.save("he1.png")
  12. im_gif.seek(8)
  13. im_gif.save("he2.png")
  14. 输出:
    'P'
  15. 注:通过上面的code,分别找到了第2帧和第8帧图像。

26、  Show

  1. 定义:im.show()
  2. 含义:显示一张图像。这个方法主要用于调试。
  3. Unix平台,这个方法将图像保存为临时的PPM文件,并且调用xv功能。
  4. widows中,它将图像保存为临时的BMP文件,并且使用标准的BMP显示功能显示它。
  5. 这个方法返回空。
  6.  
  7. 例子:
  8. from PIL import Image
  9. im = Image.open("jing.png")
  10. im.show()

27、  Split

  1. 定义:im.split() sequence
  2. 含义:返回当前图像各个通道组成的一个元组。例如,分离一个“RGB”图像将产生三个新的图像,分别对应原始图像的每个通道(红,绿,蓝)。
  3.  
  4. 例子:
  5. from PIL import Image
  6. im = Image.open("jing.png")
  7. r,g,b = im.split()
  8. b.save("he.png")
  9. print(b.getpixel((1,3)))

28、  Tell

  1. 定义:im.tell() integer
  2. 含义:返回当前帧所处位置,从0开始计算。
  3.  
  4. 例子:
  5. from PIL import Image
  6. im_gif = Image.open("xin.gif")
  7. print(im_gif.tell())
  8. im_gif.seek(8)
  9. print(im_gif.tell())
  10. 输出:
  11. 0
  12. 8

29、  Thumbnail

  1. 定义:im.thumbnail(size)
  2. im.thumbnail(size, filter)
  3. 含义:修改当前图像,使其包含一个自身的缩略图,该缩略图尺寸不大于给定的尺寸。这个方法会计算一个合适的缩略图尺寸,使其符合当前图像的宽高比,调用方法draft()配置文件读取器,最后改变图像的尺寸。
  4. 变量filter应该是NEARESTBILINEARBICUBIC或者ANTIALIAS之一。如果省略该变量,则默认为NEAREST
  5. 注意:在当前PIL的版本中,滤波器bilinearbicubic不能很好地适应缩略图产生。用户应该使用ANTIALIAS,图像质量最好。如果处理速度比图像质量更重要,可以选用其他滤波器。
  6. 这个方法在原图上进行修改。如果用户不想修改原图,可以使用方法copy()拷贝一个图像。这个方法返回空。
  7.  
  8. 例子:
  9. from PIL import Image
  10. im = Image.open("jing.png")
  11. im.thumbnail((10,10))
  12. im.save("he.png")
  13. 注:已经为图像im01创建了不大于10x10的缩略图。

30、  Tobitmap

  1. 定义:im.tobitmap()⇒ string
  2. 含义:返回转换为X11bitmap图像。

31、  Transform

  1. 定义1im.transform(size,method, data) image
  2. im.transform(size, method, data, filter) image
  3. 含义1:使用给定的尺寸生成一张新的图像,与原图有相同的模式,使用给定的转换方式将原图数据拷贝到新的图像中。
  4. 在当前的PIL版本中,参数methodEXTENT(裁剪出一个矩形区域),AFFINE(仿射变换),QUAD(将正方形转换为矩形),MESH(一个操作映射多个正方形)或者PERSPECTIVE
  5. 变量filter定义了对原始图像中像素的滤波器。在当前的版本中,变量filterNEARESTBILINEARBICUBIC或者ANTIALIAS之一。如果忽略,或者图像模式为“1”或者“P”,该变量设置为NEAREST
  6. 含义2:从图像中裁剪一个区域。
  7. 变量data为指定输入图像中两个坐标点的4元组(x0,y0,x1,y1)。输出图像为这两个坐标点之间像素的采样结果。例如,如果输入图像的(x0,y0)为输出图像的(00)点,(x1,y1)则与变量size一样。
  8. 这个方法可以用于在当前图像中裁剪,放大,缩小或者镜像一个任意的长方形。它比方法crop()稍慢,但是与resize操作一样快。
  9. 含义3:对当前的图像进行仿射变换,变换结果体现在给定尺寸的新图像中。
  10. 变量data是一个6元组(a,b,c,d,e,f),包含一个仿射变换矩阵的第一个两行。输出图像中的每一个像素(xy),新值由输入图像的位置(ax+by+c, dx+ey+f)的像素产生,使用最接近的像素进行近似。
  11. 这个方法用于原始图像的缩放、转换、旋转和裁剪。
  12. 定义4im.transform(size,QUAD, data) image
  13. im.transform(size, QUAD, data, filter) image
  14. 含义4:输入图像的一个四边形(通过四个角定义的区域)映射到给定尺寸的长方形。
  15. 变量data是一个8元组(x0,y0,x1,y1,x2,y2,x3,y3),它包括源四边形的左上,左下,右下和右上四个角。
  16.  
  17. 含义5:与QUAD类似,但是变量data是目标长方形和对应源四边形的list
  18.  
  19. 定义6im.transform(size,PERSPECTIVE, data) image
  20. im.transform(size, PERSPECTIVE, data, filter) image
  21. 含义6:对当前图像进行透视变换,产生给定尺寸的新图像。
  22. 变量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)像素,
    使用最接近的像素进行近似。
  23. 这个方法用于原始图像的2D透视。

32、  Transpose

  1. 定义:im.transpose(method)⇒ image
  2. 含义:返回当前图像的翻转或者旋转的拷贝。
  3. 变量method的取值为:FLIP_LEFT_RIGHTFLIP_TOP_BOTTOMROTATE_90ROTATE_180,或者ROTATE_270
  4.  
  5. 例子:
  6. from PIL import Image
  7. im = Image.open("jing.png")
  8. im = im01.transpose(Image.FLIP_LEFT_RIGHT)
  9. 注:图像im为图像im01的水平方向镜像。

33、    Verify

  1. 定义:im.verify()
  2. 含义:尝试判断文件是否损坏,实际上并没有对图像数据进行解析。如果这个方法发现了任何问题,它将产生对应的异常。这个方法只工作于刚打开的图像;如果图像已经被加载,该方法的结果将会是未定义的。如果用户在使用这个方法后需要加载图像,用户需要重新打开图像文件。
  3. 注意:这个方法不能捕获所有的错误;要捕获解码错误,用户必须加载整个图像。
  4.  
  5. 例子:
  6. from PIL import Image
  7. im01 = Image.open("jing.png")
  8. im01.verify()
  9. 注:没有任何输出,表示图像im01是没有损坏的。

第二篇 Python图片处理模块PIL(pillow)的更多相关文章

  1. 第一篇 Python图片处理模块PIL(pillow)

    本篇包含:一.Image类的属性:1.Format   2.Mode   3.Size    4.Palette    5.Info                   二.类的函数:1.New   ...

  2. 第二篇 python进阶

    目录 第二篇 python进阶 一 数字类型内置方法 二 字符串类型内置方法 三 列表类型内置方法(list) 四 元组类型内置方法(tuple) 五 字典内置方法 六 集合类型内置方法(self) ...

  3. [转帖]虚拟内存探究 -- 第二篇:Python 字节

    虚拟内存探究 -- 第二篇:Python 字节 http://blog.coderhuo.tech/2017/10/15/Virtual_Memory_python_bytes/ 是真看不懂哦     ...

  4. 【Python之路】第六篇--Python基础之模块

    模块,用一砣代码实现了某个功能的代码集合. 类似于函数式编程和面向过程编程,函数式编程则完成一个功能,其他代码用来调用即可,提供了代码的重用性和代码间的耦合.而对于一个复杂的功能来,可能需要多个函数才 ...

  5. 解决Python图片处理模块pillow使用中出现的问题

    最近爬一个电影票房的网站(url:http://58921.com/alltime),上面总票房里面其实是一张图片,那么我需要把图片识别成文字,来获取票房数据.   我头脑里第一想到的解决方案就是要用 ...

  6. pyhton图片合成模块-PIL

    文章链接:https://www.cnblogs.com/lilinwei340/p/6474170.html python PIL实现图片合成   在项目中需要将两张图片合在一起.遇到两种情况,一种 ...

  7. python的图形模块PIL小记

    前言: 跟我一块住的室友是个搞通信,每天下班后基本必须做的事情是,第一P图,将那些不合格的图片上的数据,p成合格的.第二就是将做好的P图以及产生的日志文件按照固定的名字重新命名.我为了他能够早点睡觉, ...

  8. 接口测试框架——第二篇-python读取excel文件内容

    今天完善excel_module.py文件,上代码: # coding: utf-8 import xlrd class ReadExcel(): def __init__(self, file_na ...

  9. 第二篇 Python运算符

    1.算术运算符 运算符 描述  +  两个值相加  -  两个值相减  *  两个值相乘  /  两个值相除  %  得到两个数相除的余数  **  x**y得到x的y次幂  //  返回两个数相除商 ...

随机推荐

  1. 李洪强iOS开发之OC[005] - OC和C的差异学习二

  2. (初学者)安装hadoop集群注意事项

    1.关闭防火墙 2.所有的hadoop操作都是hadoop用户下面的,同时需要用hadoop用户登录之后,对于其他的机器的hadoop用户可以免密登录 3.hadoop用户在root组下面,不是附加组 ...

  3. LeetCode560. Subarray Sum Equals K

    Description Given an array of integers and an integer k, you need to find the total number of contin ...

  4. c++标准库之thread

    class thread是对线程的抽象.以下分别介绍thread是如何表示线程的大部分特征的. 执行体 线程的执行体由一个可执行(callable)对象来表示.这个执行体可以在thread创建的时候指 ...

  5. 面向Internet的编程

    面向Internet的编程 1994年秋天我返回工作时,这个公司的景象已经完全改变.他们决定Oak语言——跨平台的.安全的.易传输的代码——时理想的面向Internet的语言.同时他们在制作名为Web ...

  6. Eclipse 内容辅助

    Eclipse 内容辅助 使用内容辅助 Eclipse中我们可以使用代码提示来加快开发速度,默认是输入"."后出现自动提示,用于类成员的自动提示. 设置自动提示的配置在:windo ...

  7. metadata简介

    元资料(Metadata),又称元数据.诠释资料.中继资料后设资料,为描述资料的资料(data about data),主要是描述资料属性(property)的资讯,用来支持如指示储存位置.历史资料. ...

  8. load data导入数据之csv的用法

    今天总结一下:csv格式文件导入的方法. 1.准备数据表:CSV

  9. OpenCV学习笔记十二:opencv_video模块

    一,简介: 该库用于视频运动分析,目标追踪,背景分离等.

  10. OpenCV学习笔记五:opencv_legacy模块

    opencv_legacy,顾名思义,该模块是用于兼容以前的opencv代码而设立的. 如果你希望用最新的opencv代码和特性,请勿使用该模块.