8.2.0#

废弃#

类别#

im.category 已弃用,将在Pillow 10.0.0(2023-07-01)中删除,以及相关的 Image.NORMALImage.SEQUENCEImage.CONTAINER 属性。

为了确定图像是否具有多个帧, getattr(im, "is_animated", False) 可以改为使用。

Tk/Tcl 8.4#

对Tk/TCL 8.4的支持已弃用,将在Pillow 10.0.0(2023-07-01)中删除,届时Tk/TCL 8.5将是最低支持。

API更改#

Image.alpha_Composite:目标#

当呼叫时 alpha_composite() ,即 dest 参数现在接受负坐标,如 box 论证 paste() 可能是阴性的。自然,这具有裁剪叠加图像的效果。

Image.getexif:EXIF和GPS IFD#

在此之前, getexif() 将EXIF IFD扁平成睡觉的数据,丢失信息。此信息现在保持独立,移动到 im.getexif().get_ifd(0x8769)

可以通过以下方式直接访问GPS IFD字典 im.getexif()[0x8825] 。这现在与其他IFD一致,必须通过访问 im.getexif().get_ifd(0x8825)

这些更改仅影响 getexif() ,在Pillow 6.0中引入。年纪较大的 _getexif() 方法不受影响。

Image._MODEINFO#

自PIL以来,此内部词典已被注释弃用,现在已被删除。相反, Image.getmodebase()Image.getmodetype()Image.getmodebandnames()Image.getmodebands()ImageMode.getmode() 可以使用。

API添加#

JPEG图像的getxmp()#

添加了一个新方法以返回 XMP data 用于JPEG图像。它将XML数据读取到名称和值的字典中。

例如::

>>> from PIL import Image
>>> with Image.open("Tests/images/xmp_test.jpg") as im:
>>>     print(im.getxmp())
{'RDF': {}, 'Description': {'Version': '10.4', 'ProcessVersion': '10.0', ...}, ...}

ImageDraw.rounded_rectangle#

增列 rounded_rectangle() 。它的工作原理与 rectangle() ,除非有一个额外的 radius 争论。 radius 限制为宽度或高度的一半,这样用户可以创建一个圆,但不能创建任何其他椭圆。**

from PIL import Image, ImageDraw
im = Image.new("RGB", (200, 200))
draw = ImageDraw.Draw(im)
draw.rounded_rectangle(xy=(10, 20, 190, 180), radius=30, fill="red")

ImageOps.autoContrast:保留色调#

的默认行为 autocontrast() 是对每个颜色通道的单独直方图进行归一化,从而改变图像的色调。新的 preserve_tone 参数通过对所有通道使用一个亮度直方图来保持色调不变。

ImageShow.GmDisplayViewer#

如果GraphicsMagick存在,则此新 PIL.ImageShow.Viewer 子类将被注册。它使用 GraphicsMagick, 一个 ImageMagick fork,用于显示图像。

基于GraphicsMagick的查看器的优先级低于其对应的ImageMagick查看器。因此,如果既安装了ImageMagick又安装了GraphicsMagick, im.show()ImageShow.show() 更喜欢基于ImageMagick的查看器,即安装了ImageMagick的枕头用户的行为保持不变。

ImageShow.IPythonViewer#

如果存在IPython,则此新的 PIL.ImageShow.Viewer 子类将被注册。它在所有IPython前端上显示图像。这将对Google Colab的用户有所帮助,允许 im.show() 要显示图像,请执行以下操作。

它的优先级低于其他默认值 PIL.ImageShow.Viewer 实例,因此它将仅由以下用户使用 im.show()ImageShow.show() 如果没有其他查看器可用。这意味着 PIL.ImageShow 对于大多数枕头用户来说将保持不变。

使用ICC配置文件保存TIFF#

与JPEG、PNG和WebP一样,现在可以通过关键字参数指定TIFF文件的ICC配置文件::

im.save("out.tif", icc_profile=...)

安全性#

这些都是在 OSS-Fuzz

CVE-2021-25287CVE-2021-25288 :修复Jpeg2KDecode中的OOB读取#

  • 对于具有多个波段的J2k图像,每个波段具有不同的宽度是合法的,例如,对于 L ,4字节用于 A

  • 这可以追溯到枕头2.4.0。

CVE-2021-28675 :修复PsdImagePlugin中的DOS#

CVE-2021-28676 :修复FLI DOS#

  • FliDecode.c 没有正确检查挡路推进是否是非零,可能会导致加载无限循环。

  • 这可以追溯到皮尔叉。

CVE-2021-28677 :修复EPS DOS ON_OPEN#

  • EPS中使用的readline必须处理 \r\n 作为行尾。它在查找行尾时意外地使用了二次累加行的方法。

  • 在图像被接受打开之前,恶意EPS文件可以利用该漏洞在打开阶段执行Pillow拒绝服务。

  • 这可以追溯到皮尔叉。

CVE-2021-28678 :修复BLP DOS#

  • BlpImagePlugin 未正确检查跳转到文件偏移量后读取返回的数据。这可能会导致拒绝服务,解码器可能会在空数据上运行大量时间。

  • 这可以追溯到枕头5.1.0。

修复ImageFont中的内存DOS#

  • 损坏或巧尽心思构建的TTF字体在以字体呈现文本时,其字体度量可能会导致不合理的大小。 ImageFont.py 在为其分配内存之前未检查图像大小。

  • 这可以追溯到皮尔叉。

其他变化#

GIF编写器使用LZW编码#

GIF文件现在使用LZW编码编写,这将生成较小的文件,通常约为旧编码器生成大小的70%。

中指定的格式对像素数据进行编码。 CompuServe GIF standard

较旧的编码器使用游程长度编码的变体,虽然兼容,但效率较低。

GraphicsMagick#

测试套件现在可以在以下系统上运行: GraphicsMagick 但不是 ImageMagick 已安装。如果两者都安装,则测试首选ImageMagick。

Libraqm和FriBiDi链接#

复杂文本脚本的libraqm依赖项的链接方式已更改:

源代码构建现在将在构建时链接到libraqm的系统版本,而不是默认在运行时。

二进制轮子现在包括一个静态链接的修改版本的libraqm,它在运行时链接到FriBiDi。此更改旨在解决某些平台上以前实现的问题。这些是通过使用新的构建标志构建Pillow来创建的 --vendor-raqm --vendor-fribidi

Windows用户现在需要安装 fribidi.dll (或 fribidi-0.dll )仅限, libraqm.dll 已不再使用。

看见 installation documentation 了解更多信息。

PyQt6#

添加了对PyQt6的支持。如果安装了它,将使用它而不是PySide6、PyQt5或PySide2。