在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实现的可以拷贝或剪切一个文件列表中的所有文件
Apr 30 Python
python单元测试unittest实例详解
May 11 Python
Python 基础之字符串string详解及实例
Apr 01 Python
Python实现批量压缩图片
Jan 25 Python
解决nohup执行python程序log文件写入不及时的问题
Jan 14 Python
浅谈python新式类和旧式类区别
Apr 26 Python
深入了解Python在HDA中的应用
Sep 05 Python
Django框架models使用group by详解
Mar 11 Python
Xadmin+rules实现多选行权限方式(级联效果)
Apr 07 Python
python是怎么被发明的
Jun 15 Python
自定义Django_rest_framework_jwt登陆错误返回的解决
Oct 18 Python
python通过函数名调用函数的几种方法总结
Jun 07 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无限分类且支持输出树状图的详细介绍
2013/06/19 PHP
解析获取优酷视频真实下载地址的PHP源代码
2013/06/26 PHP
phpQuery让php处理html代码像jQuery一样方便
2015/01/06 PHP
php专用数组排序类ArraySortUtil用法实例
2015/04/03 PHP
PHP让网站移动访问更加友好方法
2019/02/14 PHP
一个封装js代码-----展开收起效果示例
2013/07/03 Javascript
JS案例分享之金额小写转大写
2014/05/15 Javascript
javascript常见数字进制转换实例分析
2016/04/21 Javascript
浅析JavaScript中作用域和作用域链
2016/12/06 Javascript
Vue路由守卫之路由独享守卫
2019/09/25 Javascript
js实现无缝轮播图插件封装
2020/07/31 Javascript
在Mac OS上使用mod_wsgi连接Python与Apache服务器
2015/12/24 Python
浅谈Django REST Framework限速
2017/12/12 Python
Python实现批量压缩图片
2018/01/25 Python
Python实现定时精度可调节的定时器
2018/04/15 Python
Python实现的多叉树寻找最短路径算法示例
2018/07/30 Python
tensorflow使用神经网络实现mnist分类
2018/09/08 Python
Python自定义一个类实现字典dict功能的方法
2019/01/19 Python
使用Python3内置文档高效学习以及官方中文文档
2019/05/19 Python
Python序列类型的打包和解包实例
2019/12/21 Python
windows python3安装Jupyter Notebooks教程
2020/04/13 Python
Keras中 ImageDataGenerator函数的参数用法
2020/07/03 Python
python破解同事的压缩包密码
2020/10/14 Python
CSS3实战第一波 让我们尽情的圆角吧
2010/08/27 HTML / CSS
CSS3实现文字描边的2种方法(小结)
2020/02/14 HTML / CSS
详解通过HTML5 Canvas实现图片的平移及旋转变化的方法
2016/03/22 HTML / CSS
资生堂美国官网:Shiseido美国
2016/09/02 全球购物
欧洲最大的品牌水上运动服装和设备在线零售商:Wuituit Outlet
2018/05/05 全球购物
Burt’s Bees英国官网:世界领先的天然个人护理品牌
2020/08/17 全球购物
某公司.Net方向面试题
2014/04/24 面试题
力学专业毕业生自荐信
2013/11/17 职场文书
房屋转让协议书
2014/04/11 职场文书
2014年作风建设剖析材料
2014/10/23 职场文书
优秀团支部申报材料
2014/12/26 职场文书
java如何实现socket连接方法封装
2021/09/25 Java/Android
vue中使用mockjs配置和使用方式
2022/04/06 Vue.js