在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发布模块的步骤分享
Feb 21 Python
Django应用程序中如何发送电子邮件详解
Feb 04 Python
Caffe均值文件mean.binaryproto转mean.npy的方法
Jul 09 Python
Python控制键盘鼠标pynput的详细用法
Jan 28 Python
Python玩转PDF的各种骚操作
May 06 Python
np.newaxis 实现为 numpy.ndarray(多维数组)增加一个轴
Nov 30 Python
YUV转为jpg图像的实现
Dec 09 Python
Python 实现try重新执行
Dec 21 Python
pytorch中的上采样以及各种反操作,求逆操作详解
Jan 03 Python
tensorflow实现训练变量checkpoint的保存与读取
Feb 10 Python
python多进程使用函数封装实例
May 02 Python
Python可视化学习之seaborn绘制矩阵图详解
Feb 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
用DBSQL类加快开发MySQL数据库程序的速度
2006/10/09 PHP
PHP保存带BOM文件的方法
2015/02/12 PHP
Thinkphp单字母函数使用指南
2016/05/08 PHP
php使用number_format函数截取小数的方法分析
2016/05/27 PHP
PHP迭代器接口Iterator用法分析
2017/12/28 PHP
用PHP做了一个领取优惠券活动的示例代码
2019/07/05 PHP
PHP+jQuery+Ajax+Mysql如何实现发表心情功能
2015/08/06 Javascript
实例代码详解javascript实现窗口抖动及qq窗口抖动
2016/01/04 Javascript
JavaScript事件类型中焦点、鼠标和滚轮事件详解
2016/01/25 Javascript
js仿腾讯QQ的web登陆界面
2016/08/19 Javascript
jQuery实现根据生日计算年龄 星座 生肖
2016/11/23 Javascript
基于vue中对鼠标划过事件的处理方式详解
2018/08/22 Javascript
浅谈VUE单页应用首屏加载速度优化方案
2018/08/28 Javascript
javascript实现简单打字游戏
2019/10/29 Javascript
HTML+JS实现“代码雨”效果源码(黑客帝国文字下落效果)
2020/03/17 Javascript
[03:05]《我与DAC》之xiao8:DAC与BG
2018/03/27 DOTA
python实现ftp客户端示例分享
2014/02/17 Python
python爬虫入门教程之点点美女图片爬虫代码分享
2014/09/02 Python
Python字符串拼接六种方法介绍
2017/12/18 Python
python2 与 python3 实现共存的方法
2018/07/12 Python
Python绘制并保存指定大小图像的方法
2019/01/10 Python
python使用百度文字识别功能方法详解
2019/07/23 Python
如何获取Python简单for循环索引
2019/11/21 Python
python获取引用对象的个数方式
2019/12/20 Python
基于python图像处理API的使用示例
2020/04/03 Python
解决pyinstaller 打包exe文件太大,用pipenv 缩小exe的问题
2020/07/13 Python
Python模块常用四种安装方式
2020/10/20 Python
python获取命令行参数实例方法讲解
2020/11/02 Python
Notino匈牙利:购买香水和化妆品
2019/04/12 全球购物
三星印度官网:Samsung印度
2019/08/03 全球购物
Three Graces London官网:英国奢侈品牌
2021/03/18 全球购物
初级软件工程师面试题 Junior Software Engineer Interview
2015/02/15 面试题
黄金酒广告词
2014/03/21 职场文书
大三学生学年自我鉴定
2014/09/12 职场文书
2016年元旦主持词
2015/07/06 职场文书
党风廉政承诺书2016
2016/03/25 职场文书