Python编程图形库之Pillow使用方法讲解


Posted in Python onDecember 28, 2018

PIL vs Pillow

PIL: Python Imaging Library,是python的图像处理库。由于PIL不兼容setuptools,再加上更新缓慢等因素,Alex Clark等一些社区好心人还是希望能够继续支持PIL,所以fork了PIL,这就是Pillow的缘起。

Pillow的目标

推动和促进PIL的发展是Pillow的目标,主要通过如下的方式来进行

  • 结合Travis CI和AppVeyor进行持续集成测试
  • 活用github进行开发
  • 结合Python Package Index进行例行发布

其实可以看出,所做的改善就是在CI和CD,改善用户感知,定期/快速地与使用者进行沟通和交流,是pillow获得好感的一个重要因素。

安装

安装可以通过pip,只需要执行pip install pillow即可

liumiaocn:~ liumiao$ pip install pillow
Collecting pillow
 Downloading https://files.pythonhosted.org/packages/df/aa/a25f211a4686f363d8ca5a1752c43a8f42459e70af13e20713d3e636f0af/Pillow-5.1.0-cp27-cp27m-macosx_10_6_intel.macosx_10_9_intel.macosx_10_9_x86_64.macosx_10_10_intel.macosx_10_10_x86_64.whl (3.6MB)
  100% |????????????????????????????????| 3.6MB 157kB/s 
Installing collected packages: pillow
Successfully installed pillow-5.1.0
liumiaocn:~ liumiao$

安装确认

liumiaocn:~ liumiao$ pip show pillow
Name: Pillow
Version: 5.1.0
Summary: Python Imaging Library (Fork)
Home-page: https://python-pillow.org
Author: Alex Clark (Fork Author)
Author-email: aclark@aclark.net
License: Standard PIL License
Location: /usr/local/lib/python2.7/site-packages
Requires: 
Required-by: 
liumiaocn:~ liumiao$

使用

图形库有很多实用的功能,这里列举几个进行简单演示。

ImageGrab.grab()

使用这个方法可以实现抓屏:

liumiaocn:tmp liumiao$ cat grab.python 
#!/usr/local/bin/python
from PIL import ImageGrab
#get current screen copy
image = ImageGrab.grab()
#display image size
print("Current screen shot size :",image.size)
#display image mode
print("Screen shot picture mode :", image.mode)
#save picture to /tmp/screen-grab-1.bmp
image.save('/tmp/screen-grab-1.bmp')
#show picture
image.show()
liumiaocn:tmp liumiao$

因为代码中使用了image.show()进行了显示,执行之后可以直接看到显示,同时也能确认到/tmp下所生成的文件

liumiaocn:tmp liumiao$ python grab.python 
('Current screen shot size :', (2880, 1800))
('Screen shot picture mode :', 'RGBA')
liumiaocn:tmp liumiao$ ls -l /tmp/screen-grab-1.bmp
-rw-r--r-- 1 liumiao wheel 20736054 Jun 23 05:41 /tmp/screen-grab-1.bmp
liumiaocn:tmp liumiao$

Python编程图形库之Pillow使用方法讲解

滤镜

PIL中的ImageFilter支持近十种滤镜, 比如对刚刚抓取的图片使用CONTOUR滤镜

liumiaocn:tmp liumiao$ cat filter-contour.py 
#!/usr/local/bin/python
from PIL import ImageFilter, Image
src_image = Image.open('/tmp/screen-grab-1.bmp')
print("begin to filter the pic")
dst_image = src_image.filter(ImageFilter.CONTOUR)
print("picture through filter")
dst_image.show()
liumiaocn:tmp liumiao$

执行之后可以得到如下图片

Python编程图形库之Pillow使用方法讲解

旋转

使用rotate即可对图片进行旋转操作:

liumiaocn:tmp liumiao$ cat rotate.py 
#!/usr/local/bin/python
from PIL import Image
src_image = Image.open('/tmp/screen-grab-1.bmp')
print("begin to rotate the pic")
dst_image = src_image.rotate(90)
print("picture after rotating")
dst_image.show()
liumiaocn:tmp liumiao$

执行之后,即可确认

Python编程图形库之Pillow使用方法讲解

Pillow功能非常之多,而且使用也很方便,比如resize对尺寸进行调节,还可以添加文字等等常见的图形处理操作,这里就不再一一介绍,具体的需要可以参看如下链接进行了解:https://pypi.org/project/Pillow/

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对三水点靠木的支持。如果你想了解更多相关内容请查看下面相关链接

Python 相关文章推荐
简明 Python 基础学习教程
Feb 08 Python
Python发送http请求解析返回json的实例
Mar 26 Python
python解决js文件utf-8编码乱码问题(推荐)
May 02 Python
对numpy中的where方法嵌套使用详解
Oct 31 Python
python 顺时针打印矩阵的超简洁代码
Nov 14 Python
pandas数据集的端到端处理
Feb 18 Python
python多线程同步实例教程
Aug 11 Python
Python 实现数组相减示例
Dec 27 Python
基于pygame实现童年掌机打砖块游戏
Feb 25 Python
Python 微信公众号文章爬取的示例代码
Nov 30 Python
Python使用OpenCV实现虚拟缩放效果
Feb 28 Python
Python创建SQL数据库流程逐步讲解
Sep 23 Python
对python中大文件的导入与导出方法详解
Dec 28 #Python
Python编程深度学习计算库之numpy
Dec 28 #Python
python将txt文档每行内容循环插入数据库的方法
Dec 28 #Python
pandas 把数据写入txt文件每行固定写入一定数量的值方法
Dec 28 #Python
Python计算库numpy进行方差/标准方差/样本标准方差/协方差的计算
Dec 28 #Python
Python编程深度学习绘图库之matplotlib
Dec 28 #Python
对pandas写入读取h5文件的方法详解
Dec 28 #Python
You might like
php实现只保留mysql中最新1000条记录
2015/06/18 PHP
PHP多维数组遍历方法(2种实现方法)
2015/12/10 PHP
使用一个for循环将N*N的二维数组的所有值置1实现方法
2017/05/29 PHP
ThinkPHP 3.2.3实现页面静态化功能的方法详解
2017/08/03 PHP
深入理解JavaScript系列(8) S.O.L.I.D五大原则之里氏替换原则LSP
2012/01/15 Javascript
基于jquery的可多选的下拉列表框
2012/07/20 Javascript
关于javascript中的typeof和instanceof介绍
2012/12/04 Javascript
js鼠标悬浮出现遮罩层的方法
2015/01/28 Javascript
jQuery判断对象是否存在的方法
2015/02/05 Javascript
Bootstrap进度条组件知识详解
2016/05/01 Javascript
javascript中sort排序实例详解
2016/07/24 Javascript
tablesorter.js表格排序使用方法(支持中文排序)
2017/02/10 Javascript
js判断手机系统是android还是ios
2017/03/07 Javascript
vue2.0嵌套路由实现豆瓣电影分页功能(附demo)
2017/03/13 Javascript
nodejs中向HTTP响应传送进程的输出
2017/03/19 NodeJs
JS组件系列之JS组件封装过程详解
2017/04/28 Javascript
微信小程序之获取当前位置经纬度以及地图显示详解
2017/05/09 Javascript
基于vue.js无缝滚动效果
2018/01/25 Javascript
vue.js过滤器+ajax实现事件监听及后台php数据交互实例
2018/05/22 Javascript
nodejs异步编程基础之回调函数用法分析
2018/12/26 NodeJs
vue+element+Java实现批量删除功能
2019/04/08 Javascript
Python实现windows下模拟按键和鼠标点击的方法
2015/03/13 Python
Android应用开发中Action bar编写的入门教程
2016/02/26 Python
Python实现的读取文件内容并写入其他文件操作示例
2019/04/09 Python
Keras使用tensorboard显示训练过程的实例
2020/02/15 Python
CSS3 仿微信聊天小气泡实例代码
2017/04/05 HTML / CSS
H5 canvas实现贪吃蛇小游戏
2017/07/28 HTML / CSS
美国网上眼镜商城:Zenni Optical
2016/11/20 全球购物
New Balance波兰官方商城:始于1906年,百年慢跑品牌
2017/08/15 全球购物
计算机售后服务承诺书
2014/05/30 职场文书
运动会稿件100字
2014/09/24 职场文书
小学教师教育随笔
2015/08/14 职场文书
体育教师教学随笔
2015/08/15 职场文书
迎客户欢迎词三篇
2019/09/27 职场文书
解决Windows Server2012 R2 无法安装 .NET Framework 3.5
2022/04/29 Servers
Fluentd搭建日志收集服务
2022/09/23 Servers