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