PIL 基本用法

  1. 安装PIL,Python2
  2. Pillow,Python3
  3. 操作图像
  4. 查看实例
  5. 模糊效果
  6. 查看实例的属性
  7. 生成字母验证码图片

PIL (Python Image Library) 是 Python 平台处理图片的事实标准,兼具强大的功能和简洁的 API。但只支持 python2。

安装PIL,Python2

在 Debian/Ubuntu Linux 下直接通过 apt 安装:

$ sudo apt-get install python-imaging

Mac 和其他版本的 Linux 可以直接使用 easy_install 或 pip 安装,安装前需要把编译环境装好:

$ sudo easy_install PIL

如果安装失败,根据提示先把缺失的包(比如 openjpeg)装上。

Windows 平台就去PIL官方网站下载 exe 安装包。

Pillow,Python3

Pillow 是 PIL 的一个派生分支,但如今已经发展成为比 PIL 本身更具活力的图像处理库。支持 python3

Pillow 的 Github 主页:https://github.com/python-pillow/Pillow

Pillow的文档:https://pillow.readthedocs.org/en/latest/handbook/index.html

Pillow的文档中文翻译(对应版本v2.4.0):http://pillow-cn.readthedocs.io/zh_CN/latest/

安装

pip install Pillow

操作图像

来看看最常见的图像缩放操作,只需三四行代码:

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')

查看实例

使用 show() 方法来查看实例。注意,PIL 会将实例暂存为一个临时文件,而后打开它。

im.show()

模糊效果

from PIL import Image, ImageFilter

im = Image.open('test.jpg')
# 应用模糊滤镜:
im2 = im.filter(ImageFilter.BLUR)
im2.save('blur.jpg', 'jpeg')

查看实例的属性

Image 类的实例有 5 个属性,分别是:

  • format: 以 string 返回图片档案的格式(JPG, PNG, BMP, None, etc.);如果不是从打开文件得到的实例,则返回 None。
  • mode: 以 string 返回图片的模式(RGB, CMYK, etc.);完整的列表参见 官方说明·图片模式列表
  • size: 以二元 tuple 返回图片档案的尺寸 (width, height)
  • palette: 仅当 mode 为 P 时有效,返回 ImagePalette 示例
  • info: 以字典形式返回示例的信息

生成字母验证码图片

from PIL 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');

如果运行的时候报错:

IOError: cannot open resource

这是因为PIL无法定位到字体文件的位置,可以根据操作系统提供绝对路径,比如:

'/Library/Fonts/Arial.ttf'

要详细了解 PIL 的强大功能,请请参考PIL官方文档

PIL - 廖雪峰的官方网站

PIL 简明教程 - 基本用法


转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 bin07280@qq.com

文章标题:PIL 基本用法

文章字数:784

本文作者:Bin

发布时间:2017-12-17, 17:57:22

最后更新:2019-08-06, 00:07:35

原始链接:http://coolview.github.io/2017/12/17/Python/PIL-%E5%9F%BA%E6%9C%AC%E7%94%A8%E6%B3%95/

版权声明: "署名-非商用-相同方式共享 4.0" 转载请保留原文链接及作者。

目录