在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  pip安装lxml出错的问题解决办法
Feb 10 Python
用python的requests第三方模块抓取王者荣耀所有英雄的皮肤实例
Dec 14 Python
微信跳一跳python代码实现
Jan 05 Python
python实现词法分析器
Jan 31 Python
python BlockingScheduler定时任务及其他方式的实现
Sep 19 Python
Python Sympy计算梯度、散度和旋度的实例
Dec 06 Python
TensorFlow梯度求解tf.gradients实例
Feb 04 Python
Python基于pandas爬取网页表格数据
May 11 Python
PyTorch的torch.cat用法
Jun 28 Python
Python常用库Numpy进行矩阵运算详解
Jul 21 Python
python简单实现9宫格图片实例
Sep 03 Python
Github 使用python对copilot做些简单使用测试
Apr 14 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 simplexmlElement操作xml的命名空间实现代码
2011/01/04 PHP
PHP下打开phpMyAdmin出现403错误的问题解决方法
2013/05/23 PHP
php读取远程gzip压缩网页的方法
2014/12/29 PHP
php对文件夹进行相关操作(遍历、计算大小)
2015/11/04 PHP
CI框架入门之MVC简单示例
2016/11/21 PHP
Laravel中错误与异常处理的用法示例
2018/09/16 PHP
utf8的编码算法 转载
2006/12/27 Javascript
B/S开发中常用javaScript技术与代码
2007/03/09 Javascript
可选择和输入的下拉列表框示例
2013/11/05 Javascript
JQuery动画与特效实例分析
2015/02/02 Javascript
JQuery动态添加和删除表格行的方法
2015/03/09 Javascript
jQuery实现的tab标签切换效果示例
2016/09/05 Javascript
JS 动态加载js文件和css文件 同步/异步的两种简单方式
2016/09/23 Javascript
微信小程序 input输入框控件详解及实例(多种示例)
2016/12/14 Javascript
Node.js Mongodb 密码特殊字符 @的解决方法
2017/04/11 Javascript
vue.js提交按钮时进行简单的if判断表达式详解
2018/08/08 Javascript
jQuery实现经典的网页3D轮播图封装功能【附源码下载】
2019/02/15 jQuery
Vue-Cli 3.0 中配置高德地图的两种方式
2019/06/19 Javascript
python查看微信好友是否删除自己
2016/12/19 Python
Python3字符串encode与decode的讲解
2019/04/02 Python
Python中的引用知识点总结
2019/05/20 Python
Python 实现数据结构-堆栈和队列的操作方法
2019/07/17 Python
Python实现直播推流效果
2019/11/26 Python
使用python turtle画高达
2020/01/19 Python
python数据预处理 :样本分布不均的解决(过采样和欠采样)
2020/02/29 Python
Python异常原理及异常捕捉实现过程解析
2020/03/25 Python
Python3将ipa包中的文件按大小排序
2020/04/17 Python
pycharm 快速解决python代码冲突的问题
2021/01/15 Python
英国当代时尚和街头服饰店:18montrose
2018/12/15 全球购物
Derek Rose官网:英国高档睡衣、家居服和内衣品牌
2020/01/18 全球购物
TUMI香港官网:国际领先的行李箱、背囊品牌
2021/03/01 全球购物
晚会邀请函范文
2014/01/24 职场文书
2014年物业公司工作总结
2014/11/22 职场文书
交通事故死亡赔偿协议书
2014/12/03 职场文书
初中生物教学随笔
2015/08/15 职场文书
Java并发编程必备之Future机制
2021/06/30 Java/Android