贬抑
类别
im.category
已弃用,将在Pillow 10.0.0(2023-01-02)中删除,以及相关的 Image.NORMAL
, Image.SEQUENCE
和 Image.CONTAINER
属性。
为了确定图像是否具有多个帧, getattr(im, "is_animated", False)
可以改为使用。
Tk/Tcl 8.4
对Tk/Tcl 8.4的支持已弃用,将在Pillow 10.0.0(2023-01-02)中删除,届时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-25287 , CVE-2021-25288 :修复Jpeg2KDecode中的OOB读取
-
对于具有多个波段的J2k图像,每个波段具有不同的宽度是合法的,例如,对于
L
,4字节用于A
。 -
这可以追溯到枕头2.4.0。
CVE-2021-28675 :修复PsdImagePlugin中的DOS
-
PsdImagePlugin.PsdImageFile
未就数据挡路的大小正常检查输入层的数量,这可能会导致上的拒绝服务open()
在此之前load()
。 -
这可以追溯到皮尔叉。
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。
讨论区