9.0.0#

弗雷德里克·伦德#

这一版本是为了纪念弗雷德里克·伦德,也就是埃夫博特,他于2021年11月去世。Fredrik在1995年创建了PIL,他对Python的早期成功起到了重要作用。

Guido wrote:

Fredrik是早期的Python贡献者(例如Elementtree和‘re’模块),他对语言和社区的热情鼓舞了所有遇到他或他的工作的人。他在com.lang.python上花了无数个小时来回答新手和高级用户的问题。

他还与人共同创立了一家早期的Python初创公司Secret Labs AB,该公司在其他软件中发布了一款名为PythonWorks的IDE。Fredrik还创建了Python图像库(PIL),它仍然是用Python语言与图像交互的方式,现在最常见的方式是通过它的枕头叉。他的effbot.org站点对于一代又一代的Python用户来说是一个宝贵的资源,尤其是它的Tkinter文档。

谢谢你,弗雷德里克。

向后不兼容的更改#

Python3.6#

Pillow已经放弃了对Python3.6的支持,该版本于2021-12-23年停产。

Pillow版本常数#

PILLOW_VERSION 已删除。使用 __version__ 相反。

FreeType 2.7#

已删除对FreeType 2.7的支持;支持的最低版本为FreeType 2.8。

我们建议至少升级到 FreeType 2.10.4,修复了在FreeType 2.6中引入的一个严重漏洞 (CVE-2020-15999 )。

图像.show命令参数#

这个 command 参数已删除。使用的子类 PIL.ImageShow.Viewer 取而代之的是。

Image._showxv#

Image._showxv 已被移除。使用 show() 取而代之的是。如果需要自定义行为,请使用 register() 添加自定义的步骤 Viewer 班级。

ImageFile.raise_ioerror#

IOError 被合并到 OSError 在Python3.3中。所以, ImageFile.raise_ioerror 已被移除。使用 ImageFile.raise_oserror 取而代之的是。

API更改#

向ImageDraw多边形添加了线宽参数#

可选的一行 width 参数已添加到 ImageDraw.Draw.polygon

API添加#

ImageShow.XDGViewer#

如果 xdg-open 出现在Linux上,这是一个新的 PIL.ImageShow.Viewer 子类将被注册。它使用系统选择的应用程序显示图像。

它的优先级高于其他默认设置 PIL.ImageShow.Viewer 实例,因此它将优先于 im.show()ImageShow.show()

向DisplayViewer添加了对“title”参数的支持#

中添加了对“title”参数的支持 DisplayViewer ,这样当 im.show()ImageShow.show() 使用 display 命令行工具,现在也将支持“标题”参数,例如 im.show(title="My Image")ImageShow.show(im, title="My Image")

安全性#

确保JpegImagePlugin在截断文件的结尾处停止#

JpegImagePlugin 可以将EOF标记附加到截断文件的末尾,从而数据的最后一段仍将由解码器处理。

然而,如果没有检测到EOF标记,这可能导致无限循环,其中 JpegImagePlugin 一直试图结束文件。

移除仅在偏移上不同的连续重复切片#

为了防止试图减慢图像的加载时间,如果图像具有连续的重复拼贴,而这些拼贴只是在其偏移量上有所不同,则仅加载最后一个拼贴。谷歌的功劳 OSS-Fuzz 用于查找此问题的项目。

限制ImageMath.val可用的内置#

CVE-2022-22817 :限制 PIL.ImageMath 对于处理图像,Pillow现在将限制可用于 PIL.ImageMath.eval() 。这将有助于防止在用户计算任意表达式时出现问题,例如 ImageMath.eval("exec(exit())")

已修复ImagePath.Path数组处理#

CVE-2022-22815 (CWE-126) and CVE-2022-22816 (CWE-665) were found when initializing ImagePath.Path.

其他变化#

将后续GIF帧转换为RGB或RGBA#

由于GIF的每一帧最多可以有256种颜色,因此在第一帧之后,可能会有太多的颜色无法适应P模式图像。为此,现在搜索任何后续GIF帧都会将图像转换为RGB或RGBA,具体取决于第一个帧是否具有透明度。

在MacOS和Linux轮子中切换到libjpeg-turbo#

针对MacOS和Linux的Pillow车轮已从适用于MacOS和Linux的Pillow车轮从libjpeg改为libjpeg-turbo。它是libjpeg的一个分支,因其速度而广受欢迎。

由于不同的JPEG解码器加载图像的方式不同,因此JPEG像素可能会因此更改而稍有变化。

添加了对酸洗TrueType字体的支持#

TrueType字体现在可以进行酸洗和非酸洗。例如::

import pickle
from PIL import ImageFont

font = ImageFont.truetype("arial.ttf", size=30)
pickled_font = pickle.dumps(font, protocol=pickle.HIGHEST_PROTOCOL)

# Later...
unpickled_font = pickle.loads(pickled_font)

添加了对其他TGA方向的支持#

现在支持右上或右下方向的TGA图像。