Pillow图像处理库

PIL 的友好分支:用 Python 打开、转换并保存图像。

安装 Pillow

它能做什么

同一张照片,跑八次真实运算;括号里就是 Pillow 的那一行。

一张照片经 打开 处理后的结果
打开读入文件,惰性解码 · Image.open()
一张照片经 灰度 处理后的结果
灰度丢掉颜色,只留亮度 · ImageOps.grayscale()
一张照片经 反相 处理后的结果
反相每个通道取反 · ImageOps.invert()
一张照片经 模糊 处理后的结果
模糊高斯核,半径可调 · GaussianBlur()
一张照片经 色调分离 处理后的结果
色调分离每通道压到几位 · posterize()
一张照片经 像素化 处理后的结果
像素化降采样再放大 · Image.resize()
一张照片经 镜像 处理后的结果
镜像左右翻转 · ImageOps.mirror()
一张照片经 增强 处理后的结果
增强先提对比,再锐化 · ImageEnhance
成堆的 135 胶卷暗盒,来自不同品牌,堆在一起
照片:Petar Milošević,CC BY-SA 4.0,来自 Wikimedia Commons

在浏览器里试一试

原图

im = Image.open("photo.jpg")

林中苔藓与枯枝的近景照片(原始照片)

换一张底图

选一个运算

画面由浏览器实时算出,上面的代码就是这一步在 Pillow 里的写法。

样图:AS Photography from Poland,CC BY 4.0;Petar Milošević,CC BY-SA 4.0。均来自 Wikimedia Commons

一张图,三步

打开

Image.open() 读入文件,惰性解码,直到你真正动到像素。

处理

缩放、裁剪、调色、滤镜、绘制,一次一个函数,工作几乎都在这里。

保存

im.save() 写出,格式由扩展名或 format 参数决定。

它认识的格式

Pillow 对几种常见图像格式的读取与写入支持
格式读取写入说明
JPEG支持支持有损压缩,最通用
PNG支持支持无损,支持透明度
GIF支持支持支持动画与调色板
WebP支持支持支持动画与透明
TIFF支持支持支持多页
BMP支持支持Windows 位图,通常不压缩
ICO支持支持多尺寸图标
PSD支持不支持可读取 Photoshop 图层

以上只是最常见的几种,Pillow 还支持一大批其它图像格式,具体以官方文档的格式列表为准。

从 1995 年续写至今

1988 年出品的 Olivetti M200 台式电脑,带 CRT 显示器与键盘
照片:ValorosoIT,CC BY-SA 4.0,来自 Wikimedia Commons
PIL

1995 年由 Fredrik Lundh 写出,最后一个版本停在 2009 年。许可证宽松,但代码停更了。

Pillow

2010 年 Jeffrey 'Alex' Clark 把它接过来,取名 Pillow,继续在同一个导入路径下维护。

读更新日志

谁在背后支持

Tidelift 从 2018 年起协调安全修复与披露,Thanks.dev 按依赖的比例分配捐赠,GitHub Sponsors 让维护者直接收到赞助,OpenSSF 提供工程与安全规范,OSS-Fuzz 在社区自己的机器上持续跑模糊测试,Zenodo 给每个发行版一个 DOI,PyPI 把包送到你手上。

资金、基础设施与安全流程各有人负责:商业支持来自 Tidelift,捐赠由 Thanks.dev 按依赖比例分配,模糊测试跑在社区自己的机器上。

真实世界的图像

森林地表闪着光的苔藓、地衣与草叶,缀满水珠
佛蒙特林地里长满苔藓的松树桩

视频:Pristurus,CC BY-SA 3.0。照片:Extemporalist,CC0;Paul Harrison,CC BY-SA 4.0。均来自 Wikimedia Commons

常见问题

Pillow 和 PIL 是什么关系?

Pillow 是 PIL 的活跃分支。PIL 由 Fredrik Lundh 在 1995 年写出,最后一个版本发布于 2009 年;2010 年 Jeffrey 'Alex' Clark 把它接续下来,取名 Pillow,维护至今。导入路径仍然是 from PIL import Image,旧代码一行都不用改。

怎么安装,需要自己编译吗?

先升级 pip,再安装:python3 -m pip install --upgrade pip,然后 python3 -m pip install --upgrade Pillow。主流平台都有预编译的 wheel,常用的解码库已经打包在内,不需要自己编译;只有少数格式要在系统里另行安装依赖。

打开一张图要写什么?

两行:from PIL import Image,然后 im = Image.open("photo.jpg")。返回的 Image 对象是惰性的,只有真正读取像素或做转换时才会解码。

怎么存成另一种格式?

im.save("photo.png"),格式由扩展名推断,也可以用 format="PNG" 显式指定;有损格式还能用 quality 参数控制质量。

大图会不会很占内存?

像素会在内存里展开,尺寸越大占用越多。读 JPEG 时用 draft() 让解码器直接降采样,或者用 thumbnail() 生成缩略图,都能把占用压下来。

支持哪些 Python 版本?

Pillow 为当前仍在维护的 Python 3 版本提供 wheel,并随 Python 的版本节奏一起更新,不支持的旧版本不再发布二进制包。

许可证是什么?

宽松的 MIT-CMU 许可证,和 PIL 一致:可以自由地用于商业项目与再分发,只需在副本中保留版权声明。

怎么参与贡献?

先看仓库里的 CONTRIBUTING 指南,再从标记为需要帮助的 issue 入手,提交拉取请求即可。文档改动和示例同样是贡献。

发现安全漏洞怎么报告?

通过 GitHub 的私密安全通道提交,不要公开。如果无法使用 GitHub,可以联系 Tidelift 的安全渠道,由它来协调修复与披露。

把图像交给 Python

一条命令装好,之后 from PIL import Image 就能用了。

在终端里运行

python3 -m pip install --upgrade Pillow

装好之后,打开一张图只要两行:

from PIL import Image安装 Pillow