在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中输出带颜色的文字的方法
Jun 19 Python
Python学习教程之常用的内置函数大全
Jul 14 Python
浅谈机器学习需要的了解的十大算法
Dec 15 Python
利用Pyhton中的requests包进行网页访问测试的方法
Dec 26 Python
PyQt5的PyQtGraph实践系列3之实时数据更新绘制图形
May 13 Python
python打造爬虫代理池过程解析
Aug 15 Python
Python爬虫实现的根据分类爬取豆瓣电影信息功能示例
Sep 15 Python
Python OrderedDict的使用案例解析
Oct 25 Python
Python超越函数积分运算以及绘图实现代码
Nov 20 Python
Python 基于wxpy库实现微信添加好友功能(简洁)
Nov 29 Python
在Mac中PyCharm配置python Anaconda环境过程图解
Mar 11 Python
Django项目uwsgi+Nginx保姆级部署教程实现
Apr 19 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 分页原理分析,大家可以看看
2009/12/21 PHP
php class中self,parent,this的区别以及实例介绍
2013/04/24 PHP
php使用sql数据库 获取字段问题介绍
2013/08/12 PHP
php中 $$str 中 "$$" 的详解
2015/07/06 PHP
PHP redis实现超迷你全文检索
2017/03/04 PHP
PHP设计模式(五)适配器模式Adapter实例详解【结构型】
2020/05/02 PHP
JS打开图片另存为对话框实现代码
2012/12/26 Javascript
代码触发js事件(click、change)示例应用
2013/12/13 Javascript
深入剖析JavaScript中的枚举功能
2014/03/06 Javascript
JS跨域问题详解
2014/11/25 Javascript
详解微信小程序开发—你期待的分享功能来了,微信小程序序新增5大功能
2016/12/23 Javascript
ajax接收后台数据在html页面显示
2017/02/19 Javascript
web.js.字符串与正则表达式操作
2017/05/13 Javascript
JavaScript中的return布尔值的用法和原理解析
2017/08/14 Javascript
十分钟带你快速了解React16新特性
2017/11/10 Javascript
Vue数据双向绑定原理及简单实现方法
2018/05/18 Javascript
详解ESLint在Vue中的使用小结
2018/10/15 Javascript
Nuxt.js SSR与权限验证的实现
2018/11/21 Javascript
vue点击当前路由高亮小案例
2019/09/26 Javascript
JS实现的雪花飘落特效示例
2019/12/03 Javascript
vue学习笔记之Vue中css动画原理简单示例
2020/02/29 Javascript
微信小程序如何加载数据库真实数据的实现
2020/03/04 Javascript
[09:40]DAC2018 4.5 SOLO赛 MidOne vs Miracle
2018/04/06 DOTA
Python的math模块中的常用数学函数整理
2016/02/04 Python
用TensorFlow实现戴明回归算法的示例
2018/05/02 Python
把csv文件转化为数组及数组的切片方法
2018/07/04 Python
使用tensorflow显示pb模型的所有网络结点方式
2020/01/23 Python
django下创建多个app并设置urls方法
2020/08/02 Python
美国滑雪板和装备购物网站:Skis.com
2018/12/20 全球购物
维德科技C#面试题笔试题
2015/12/09 面试题
班子个人四风问题整改措施
2014/10/04 职场文书
2014年店长工作总结
2014/11/17 职场文书
投诉书范文
2015/07/02 职场文书
导游词之沈阳清昭陵
2019/12/28 职场文书
使用Redis实现实时排行榜功能
2021/07/02 Redis
Python自动操作神器PyAutoGUI的使用教程
2022/06/16 Python