在Python中使用PIL模块处理图像的教程


Posted in Python onApril 29, 2015

PIL:Python Imaging Library,已经是Python平台事实上的图像处理标准库了。PIL功能非常强大,但API却非常简单易用。
安装PIL

在Debian/Ubuntu Linux下直接通过apt安装:

$ sudo apt-get install python-imaging

Mac和其他版本的Linux可以直接使用easy_install或pip安装,安装前需要把编译环境装好:

$ sudo easy_install PIL

如果安装失败,根据提示先把缺失的包(比如openjpeg)装上。

Windows平台就去PIL官方网站下载exe安装包。
操作图像

来看看最常见的图像缩放操作,只需三四行代码:

import Image

# 打开一个jpg图像文件,注意路径要改成你自己的:
im = Image.open('/Users/michael/test.jpg')
# 获得图像尺寸:
w, h = im.size
# 缩放到50%:
im.thumbnail((w//2, h//2))
# 把缩放后的图像用jpeg格式保存:
im.save('/Users/michael/thumbnail.jpg', 'jpeg')

其他功能如切片、旋转、滤镜、输出文字、调色板等一应俱全。

比如,模糊效果也只需几行代码:

import Image, ImageFilter

im = Image.open('/Users/michael/test.jpg')
im2 = im.filter(ImageFilter.BLUR)
im2.save('/Users/michael/blur.jpg', 'jpeg')

效果如下:

在Python中使用PIL模块处理图像的教程

PIL的ImageDraw提供了一系列绘图方法,让我们可以直接绘图。比如要生成字母验证码图片:

import Image, ImageDraw, ImageFont, ImageFilter
import random

# 随机字母:
def rndChar():
  return chr(random.randint(65, 90))

# 随机颜色1:
def rndColor():
  return (random.randint(64, 255), random.randint(64, 255), random.randint(64, 255))

# 随机颜色2:
def rndColor2():
  return (random.randint(32, 127), random.randint(32, 127), random.randint(32, 127))

# 240 x 60:
width = 60 * 4
height = 60
image = Image.new('RGB', (width, height), (255, 255, 255))
# 创建Font对象:
font = ImageFont.truetype('Arial.ttf', 36)
# 创建Draw对象:
draw = ImageDraw.Draw(image)
# 填充每个像素:
for x in range(width):
  for y in range(height):
    draw.point((x, y), fill=rndColor())
# 输出文字:
for t in range(4):
  draw.text((60 * t + 10, 10), rndChar(), font=font, fill=rndColor2())
# 模糊:
image = image.filter(ImageFilter.BLUR)
image.save('code.jpg', 'jpeg');

我们用随机颜色填充背景,再画上文字,最后对图像进行模糊,得到验证码图片如下:

在Python中使用PIL模块处理图像的教程

如果运行的时候报错:

IOError: cannot open resource

这是因为PIL无法定位到字体文件的位置,可以根据操作系统提供绝对路径,比如:

'/Library/Fonts/Arial.ttf'

要详细了解PIL的强大功能,请请参考PIL官方文档:

http://effbot.org/imagingbook/

Python 相关文章推荐
python模块之StringIO使用示例
Apr 08 Python
Python 中 list 的各项操作技巧
Apr 13 Python
python对DICOM图像的读取方法详解
Jul 17 Python
python中使用xlrd读excel使用xlwt写excel的实例代码
Jan 31 Python
python逆序打印各位数字的方法
Jun 25 Python
Python根据文件名批量转移图片的方法
Oct 21 Python
浅谈python 导入模块和解决文件句柄找不到问题
Dec 15 Python
Python使用Selenium爬取淘宝异步加载的数据方法
Dec 17 Python
python添加模块搜索路径和包的导入方法
Jan 19 Python
在VS2017中用C#调用python脚本的实现
Jul 31 Python
Python实现子类调用父类的初始化实例
Mar 12 Python
matlab、python中矩阵的互相导入导出方式
Jun 01 Python
python获得linux下所有挂载点(mount points)的方法
Apr 29 #Python
python创建和删除目录的方法
Apr 29 #Python
python访问系统环境变量的方法
Apr 29 #Python
python中迭代器(iterator)用法实例分析
Apr 29 #Python
在Python中使用HTMLParser解析HTML的教程
Apr 29 #Python
python安装以及IDE的配置教程
Apr 29 #Python
python获取从命令行输入数字的方法
Apr 29 #Python
You might like
PHP 文件扩展名 获取函数
2009/06/03 PHP
PHP PDO函数库详解
2010/04/27 PHP
Uncaught exception com_exception with message Failed to create COM object
2012/01/11 PHP
php防止恶意刷新与刷票的方法
2014/11/21 PHP
基于jQuery的ajax功能实现web service的json转化
2009/08/29 Javascript
分享精心挑选的12款优秀jQuery Ajax分页插件和教程
2012/08/09 Javascript
一个封装js代码-----展开收起效果示例
2013/07/03 Javascript
jQuery+PHP打造滑动开关效果
2014/12/16 Javascript
jquery自定义右键菜单、全选、不连续选择
2016/03/01 Javascript
实践中学习AngularJS表单
2016/03/21 Javascript
javascript函数自动执行常用方法汇总
2016/03/28 Javascript
jQuery基本选择器之标签名选择器
2016/09/03 Javascript
Vuejs入门教程之Vue生命周期,数据,手动挂载,指令,过滤器
2017/04/19 Javascript
Vue 2中ref属性的使用方法及注意事项
2017/06/12 Javascript
Vue 组件间的样式冲突污染
2017/08/31 Javascript
使用javaScript实现鼠标拖拽事件
2020/04/03 Javascript
薪资那么高的Web前端必看书单
2017/10/13 Javascript
浅谈ajax请求不同页面的微信JSSDK问题
2018/02/26 Javascript
vue底部加载更多的实例代码
2018/06/29 Javascript
JS加密插件CryptoJS实现的Base64加密示例
2020/08/16 Javascript
小程序点赞收藏功能的实现代码示例
2018/09/07 Javascript
微信小程序实现吸顶效果
2020/01/08 Javascript
Vue常用的全选/反选的示例代码
2020/02/19 Javascript
[10:34]DOTA2上海特级锦标赛全纪录
2016/03/25 DOTA
Python 将RGB图像转换为Pytho灰度图像的实例
2017/11/14 Python
Python实现调用另一个路径下py文件中的函数方法总结
2018/06/07 Python
Python实现的插入排序,冒泡排序,快速排序,选择排序算法示例
2019/05/04 Python
pandas.cut具体使用总结
2019/06/24 Python
python使用Pandas库提升项目的运行速度过程详解
2019/07/12 Python
Python集合基本概念与相关操作实例分析
2019/10/30 Python
Python pickle模块实现对象序列化
2019/11/22 Python
python在协程中增加任务实例操作
2021/02/28 Python
2014党员民主评议个人总结
2014/09/10 职场文书
企业廉洁教育心得体会
2016/01/20 职场文书
如何利用Matlab制作一款真正的拼图小游戏
2021/05/11 Python
HTML5+CSS+JavaScript实现捉虫小游戏设计和实现
2021/10/16 HTML / CSS