在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文本操作相关模块
Jun 22 Python
python监控进程脚本
Apr 12 Python
使用python存储网页上的图片实例
May 22 Python
使用Python处理Excel表格的简单方法
Jun 07 Python
python3 pathlib库Path类方法总结
Dec 26 Python
python编程进阶之类和对象用法实例分析
Feb 21 Python
python3通过udp实现组播数据的发送和接收操作
May 05 Python
使用Pytorch搭建模型的步骤
Nov 16 Python
python 实现Harris角点检测算法
Dec 11 Python
Django展示可视化图表的多种方式
Apr 08 Python
python实现简单倒计时功能
Apr 21 Python
Python实现列表拼接和去重的三种方式
Jul 02 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实现动态获取函数参数的方法示例
2018/04/02 PHP
简单的无缝滚动程序-仅几行代码
2007/05/08 Javascript
javascript下查找父节点的简单方法
2007/08/13 Javascript
javascript新手语法小结
2008/06/15 Javascript
jquery控制listbox中项的移动并排序的实现代码
2010/09/28 Javascript
扩展jQuery对象时如何扩展成员变量具体怎么实现
2014/04/25 Javascript
js中 javascript:void(0) 用法详解
2015/08/11 Javascript
再次谈论React.js实现原生js拖拽效果引起的一系列问题
2016/04/03 Javascript
JavaScript几种数组去掉重复值的方法推荐
2016/04/12 Javascript
Jquery Easyui日历组件Calender使用详解(23)
2016/12/18 Javascript
微信小程序 this和that详解及简单实例
2017/02/13 Javascript
基于JS实现仿百度百家主页的轮播图效果
2017/03/06 Javascript
ES6(ECMAScript 6)新特性之模板字符串用法分析
2017/04/01 Javascript
js实现音频控制进度条功能
2017/04/01 Javascript
JavaScript限制在客户区可见范围的拖拽(解决scrollLeft和scrollTop的问题)(2)
2017/05/17 Javascript
Angularjs 事件指令详细整理
2017/07/27 Javascript
利用hasOwnProperty给数组去重的面试题分享
2018/11/05 Javascript
jquery+php后台实现省市区联动功能示例
2019/05/23 jQuery
vue项目中使用AES实现密码加密解密(ECB和CBC两种模式)
2019/08/12 Javascript
解决layer.confirm快速点击会重复触发事件的问题
2019/09/23 Javascript
Vue解析剪切板图片并实现发送功能
2020/02/04 Javascript
vue 使用插槽分发内容操作示例【单个插槽、具名插槽、作用域插槽】
2020/03/06 Javascript
Python设计模式之观察者模式实例
2014/04/26 Python
Python之re操作方法(详解)
2017/06/14 Python
Python输出由1,2,3,4组成的互不相同且无重复的三位数
2018/02/01 Python
numpy.meshgrid()理解(小结)
2019/08/01 Python
Python魔法方法 容器部方法详解
2020/01/02 Python
纯CSS3单页切换导航菜单界面设计的简单实现
2016/08/16 HTML / CSS
选购世界上最好的美妆品:Cult Beauty
2017/11/03 全球购物
最新大学生自我评价
2013/09/24 职场文书
交通安全教育制度
2014/02/02 职场文书
生日主持词
2014/03/20 职场文书
关于美容院的活动方案
2014/08/14 职场文书
python中pandas.read_csv()函数的深入讲解
2021/03/29 Python
Window server中安装Redis的超详细教程
2021/11/17 Redis
Python matplotlib绘制条形统计图 处理多个实验多组观测值
2022/04/21 Python