在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实现在Linux系统下更改当前进程运行用户
Feb 04 Python
Python简单定义与使用字典dict的方法示例
Jul 25 Python
Python编程实现从字典中提取子集的方法分析
Feb 09 Python
Django项目实战之用户头像上传与访问的示例
Apr 21 Python
解决python os.mkdir创建目录失败的问题
Oct 16 Python
Python 获取windows桌面路径的5种方法小结
Jul 15 Python
使用python写的opencv实时监测和解析二维码和条形码
Aug 14 Python
通过celery异步处理一个查询任务的完整代码
Nov 19 Python
python数据预处理 :样本分布不均的解决(过采样和欠采样)
Feb 29 Python
numpy矩阵数值太多不能全部显示的解决
May 14 Python
Opencv图像处理:如何判断图片里某个颜色值占的比例
Jun 03 Python
python opencv角点检测连线功能的实现代码
Nov 24 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执行linux系统命令的常用函数使用说明
2010/04/27 PHP
php和数据库结合的一个简单的web实例 代码分析 (php初学者)
2011/07/28 PHP
php访问数组最后一个元素的函数end()用法
2015/03/18 PHP
php判断对象是派生自哪个类的方法
2015/06/20 PHP
深入了解PHP中的Array数组和foreach
2016/11/06 PHP
laravel 实现登陆后返回登陆前的页面方法
2019/10/03 PHP
用Div仿showModalDialog模式菜单的效果的代码
2007/03/05 Javascript
动态表格Table类的实现
2009/08/26 Javascript
jquery中ajax学习笔记一
2011/10/16 Javascript
深入了解javascript中的prototype与继承
2013/04/14 Javascript
基于javascript的JSON格式页面展示美化方法
2014/07/02 Javascript
JavaScript字符串对象toUpperCase方法入门实例(用于把字母转换为大写)
2014/10/17 Javascript
jQuery多级弹出菜单插件ZoneMenu
2014/12/18 Javascript
深入理解JavaScript系列(40):设计模式之组合模式详解
2015/03/04 Javascript
JavaScript判断前缀、后缀是否是空格的方法
2015/04/15 Javascript
javascript中判断json的方法总结
2015/08/27 Javascript
基于AngularJS前端云组件最佳实践
2016/10/20 Javascript
纯JS焦点图特效实例(可一个页面多用)
2016/12/07 Javascript
微信小程序使用Promise简化回调
2018/02/06 Javascript
详解Vue-cli webpack移动端自动化构建rem问题
2018/04/07 Javascript
Vue项目中配置pug解析支持
2019/05/10 Javascript
原生微信小程序开发中 redux 的使用详解
2021/02/18 Javascript
python实现ftp客户端示例分享
2014/02/17 Python
Python list列表中删除多个重复元素操作示例
2019/02/27 Python
python快速编写单行注释多行注释的方法
2019/07/31 Python
Python Django2 model 查询介绍(条件、范围、模糊查询)
2020/03/16 Python
Java byte数组操纵方式代码实例解析
2020/07/22 Python
HTML5 背景的显示区域实现
2020/07/09 HTML / CSS
德国EGOIST网店:销售畅销的设计师品牌
2017/04/18 全球购物
应聘会计求职信
2014/06/11 职场文书
不服从公司安排检讨书
2014/09/24 职场文书
大四学生个人总结
2015/02/15 职场文书
2015年办公室人员工作总结
2015/05/15 职场文书
省级三好学生主要事迹材料
2015/11/03 职场文书
2019年入党思想汇报
2019/03/25 职场文书
Python卷积神经网络图片分类框架详解分析
2021/11/07 Python