传统的PIL库不支持python3,所以使用从PIL派生出来的Pillow库。

Image类

Pillow中最重要的类就是Image,该类存在于同名的模块中。可以通过以下几种方式实例化:从文件中读取图片,处理其他图片得到,或者直接创建一个图片。

使用Image模块中的open函数打开一张图片:

from PIL import Imageim = Image.open('1.gif')
print(im)
print(im.format,im.size,im.mode)

如果打开成功,返回一个Image对象,可以通过对象属性检查文件内容

<PIL.GifImagePlugin.GifImageFile image mode=P size=170x288 at 0x567748>
GIF (170, 288) P
  • format属性定义了图像的格式,如果图像不是从文件打开的,那么该属性值为None;
  • size属性是一个tuple,表示图像的宽和高(单位为像素);
  • mode属性为表示图像的模式.
    模式属性如下:
1 1位像素,黑和白,存成8位的像素
L 8位像素,黑白
P 8位像素,使用调色板映射到任何其他模式
RGB 3×8位像素,真彩
RGBA 4×8位像素,真彩+透明通道
CMYK 4×8位像素,颜色隔离
YCbCr 3×8位像素,彩色视频格式
I 32位整型像素
F 32位浮点型像素

当有一个Image对象时,可以用Image类的各个方法进行处理和操作图像,例如显示图片。

im.show()

PS:标准版本的show()方法不是很有效率,因为它先将图像保存为一个临时文件,然后使用查看器进行显示。

读写图片

Pillow库支持相当多的图片格式。直接使用Image模块中的open()函数读取图片,而不必先处理图片的格式,Pillow库自动根据文件决定格式。

Image模块中的save()函数可以保存图片,除非你指定文件格式,那么文件名中的扩展名用来指定文件格式。

im = Image.open('1.gif')
im.save('f.BMP')

通常,save用以保存一个临时的image对象到硬盘。而转换工作由一个功能更为强大的convert()方法来完成。

拷贝,粘贴,合并图片

from PIL import Imageim = Image.open('tu.jpg')
#设置要拷贝的区域
box = (100, 100, 500, 500)# 将im表示的图片对象拷贝到region中,大小为(400*400)像素。
# 这个region可以用来后续的操作(region其实就是一个Image对象),
# box变量是一个四元组(左,上,右,下)。
region  = im.crop(box)# 从字面上就可以看出,先把region中的Image反转180度,然后再放回到region中。
region = region.transpose(Image.ROTATE_90)
#粘贴box大小的region到原先的图片对象中。
im.paste(region, box)
im.save('1.jpg')

区域由4-tuple决定,该tuple中信息为(left, upper, right, lower),Pillow左边系统的原点(0,0)为图片的左上角。坐标中的数字单位为像素点。
上面示例粘贴后的图片是临时性,需要save保存成新图片。

box = im.copy() #直接复制图像

分离和合并通道

每一个RGB都是由三个通道的灰度图叠加的,所以pil提供了将这三个通道分离的方法.
对于单通道图片,split()返回图像本身。为了处理单通道图片,必须先将图片转成RGB。

r,g,b = im.split()#分割成三个通道
im = Image.merge("RGB", (b, g, r))  #将b,r两个通道进行翻转。
im.save('rgb.jpg')

几何转变

Image类有resize()、rotate()和transpose()、transform()方法进行几何变换,用以重定义图片大小,对图片进行旋转等操作。
简单几何变换:

out = im.resize( ( 128,128))
out = im.rotate(45)


置换图像:

# 左右翻转
out = im.transpose(Image.FLIP_LEFT_RIGHT)
# 上下反向
out = im.transpose(Image.FLIP_TOP_BOTTOM)
out = im.transpose(Image.ROTATE_90)

transpose()和象的rotate()没有性能差别。

模式转换

# 黑白
am = im.convert('L')
am.show()

图像增强

1.滤镜
ImageFilter模块提供了很多预定义的图片加强滤镜。
比如一个常用的滤镜,细节(detail滤镜)

from PIL import ImageFilter  im = Image.open('tu.jpg')
out = im.filter(ImageFilter.DETAIL)  

2.直接操作像素点
可以对每个像素点进行操作,而且,每一个通道都可以独立的进行操作。比如,将每个像素点的亮度(不知道有没有更专业的词)增大20%

#注意这里用到一个匿名函数(那个可以把i的1.2倍返回的函数)
out = im.point(lambda i : i *  1.2)

3.读写图片的更多方式
通常,我们使用open方法进行图片的打开操作。但是这不是唯一的方式。完全可以跟python的IO整合起来。

fp = open("tu.jpg", "rb")
im = Image.open(fp)  

附件:原图

Pillow教程(一)相关推荐

  1. python3里的pillow怎么安装_“python安装pillow教程“python3.4怎么安装pil

    "python安装pillow教程"python3.4怎么安装pil python安装pillow教程2020-10-09 03:37:02人已围观 如何在python3.6中装p ...

  2. python表格单元格批注批量插图xlwings\os\pillow教程,手把手代码讲解

    1.常规操作import python设置--项目--python解释器--增加软件包Pillow\xlwings from PIL import Image import os import xlw ...

  3. JavaTPoint Python 中文教程【翻译完成】

    原文:JavaTPoint 协议:CC BY-NC-SA 4.0 阶段:机翻(1) 危机只有发展到最困难的阶段,才有可能倒逼出有效的解决方案.--<两次全球大危机的比较研究> 在线阅读 在 ...

  4. ZetCode Python 教程

    来源:ApacheCN ZetCode 翻译项目 译者:飞龙 协议:CC BY-NC-SA 4.0 贡献指南 本项目需要校对,欢迎大家提交 Pull Request. 请您勇敢地去翻译和改进翻译.虽然 ...

  5. python 百度识图_python截图+百度ocr(图片识别)+ 百度翻译

    python截图+百度ocr(图片识别)+ 百度翻译 一直想用python做一个截图并自动翻译的工具,恰好最近有时间就在网上找了资料,根据资料以及自己的理解做了一个简单的截图翻译工具.整理一下并把代码 ...

  6. python找色_python实现按键精灵找色点击功能教程,使用pywin32和Pillow库

    Python图片处理模块PIL(pillow) pywin32的主要作用 1.捕获窗口: 2.模拟鼠标键盘动作: 3.自动获取某路径下文件列表: 4.PIL截屏功能 找色点击功能思路: 抓取当前屏幕快 ...

  7. pillow是python的图像处理标准库_Python图像处理库:Pillow 初级教程

    Python图像处理库:Pillow 初级教程. Image类 Pillow中最重要的类就是Image,该类存在于同名的模块中.可以通过以下几种方式实例化:从文件中读取图片,处理其他图片得到,或者直接 ...

  8. python图色模拟脚本_python实现按键精灵找色点击功能教程,使用pywin32和Pillow库

    Python图片处理模块PIL(pillow) pywin32的主要作用 1.捕获窗口: 2.模拟鼠标键盘动作: 3.自动获取某路径下文件列表: 4.PIL截屏功能 找色搜索功能思路: 抓取当前屏幕快 ...

  9. python 找色点击_python实现按键精灵找色点击功能教程,使用pywin32和Pillow库

    Python图片处理模块PIL(pillow) pywin32的主要作用 1.捕获窗口: 2.模拟鼠标键盘动作: 3.自动获取某路径下文件列表: 4.PIL截屏功能 找色点击功能思路: 抓取当前屏幕快 ...

  10. python写gui导入图片并处理_Python图像处理库:Pillow 初级教程

    Image类 Pillow中最重要的类就是Image,该类存在于同名的模块中.可以通过以下几种方式实例化:从文件中读取图片,处理其他图片得到,或者直接创建一个图片. 使用Image模块中的open函数 ...

最新文章

  1. altium designer显示Analyzing GND,变得很卡
  2. 密码学-hash散列表
  3. 蓝桥杯-逆序对(java)
  4. onnx模型部署 python_onnxruntime模型部署流程
  5. datetime建立索引有用吗_超全的数据库建表、SQL、索引规范
  6. uC/OS-II OS_TASK.C中有关任务管理的函数
  7. 三大场景,对象存储OSS带你快速上云
  8. 微信能远程控制电脑吗_神器分享:用微信就能远程控制电脑,这款神器有些厉害...
  9. track_info分区表的创建并将ETL的数据加载到Hive表
  10. java面向对象的多态_java面向对象(五)之多态
  11. Sharepoint 2013默认dll部署位置
  12. ZOJ 3204 Connect them 继续MST
  13. java io读取文件_java io读取文件操作代码实例
  14. SQOOP——MySQL 和 HDFS 的桥梁
  15. 适时突破[我眼中的戴尔转型]
  16. shenyu2.5.0对restful的path中文不支持,400错误解决
  17. fremaker遍历list_Freemarker中如何遍历List
  18. 关系图 antv G6
  19. 系统大作业. 多酶级联反应酶配比及投料优化(1)
  20. 10000小时后,我从外包走进了字节跳动

热门文章

  1. 玩转数据魔方之数据安全治理进阶指南
  2. vue 解决跨域问题404问题
  3. Scratch编程与数学:会编程的孩子是怎样解奥数题的?
  4. 多项式乘法 快速傅里叶变换
  5. CPU工作方式、多核心、超线程技术详解[转贴]
  6. CentOS7.4通过ssh连接到服务器的时候特别慢
  7. 为啥显示器用RGB而打印机用CMYK
  8. 关于指针赋初值为NULL的问题
  9. 零食行业python数据分析实例——基于淘宝搜索排名分析
  10. efl是什么意思_efl是什么意思