6.2.0

API添加

文本笔划

stroke_widthstroke_fill 参数已添加到文本绘图操作中。它们允许勾勒文本,分别设置笔划的宽度和颜色。如果没有提供, stroke_fill 将默认为 fill 参数。

from PIL import Image, ImageDraw, ImageFont

font = ImageFont.truetype("Tests/fonts/FreeMono.ttf", 40)
font.getsize_multiline("A", stroke_width=2)
font.getsize("ABC\nAaaa", stroke_width=2)

im = Image.new("RGB", (100, 100))
draw = ImageDraw.Draw(im)
draw.textsize("A", font, stroke_width=2)
draw.multiline_textsize("ABC\nAaaa", font, stroke_width=2)
draw.text((10, 10), "A", "#f00", font, stroke_width=2, stroke_fill="#0f0")
draw.multiline_text((10, 10), "A\nB", "#f00", font,
                    stroke_width=2, stroke_fill="#0f0")

例如,

from PIL import Image, ImageDraw, ImageFont

im = Image.new("RGB", (120, 130))
draw = ImageDraw.Draw(im)
font = ImageFont.truetype("Tests/fonts/FreeMono.ttf", 120)
draw.text((10, 10), "A", "#f00", font, stroke_width=2, stroke_fill="#0f0")

创建以下图像:

../_images/imagedraw_stroke_different.png

多监视器窗口上的ImageGrab

all_screens 参数已添加到 ImageGrab.grab .如果 True ,所有监视器都将包含在创建的图像中。

API更改

Image.getexif

为了允许延迟加载Exif数据, Image.getexif() 现在返回的共享实例 Image.Exif .

贬抑

Image.frombuffer

有一个长期的警告是 Image.frombuffer 未来可能会改变“原始”解码器。变化将发生在枕头7.0。

安全性

这个版本捕获了几个缓冲区溢出,以及寻址CVE-2019-16865。CVE涉及DOS问题,例如消耗大量内存,或者处理图像需要花费大量时间。

在RawDecode.c中,如果skip被计算为小于零,则会抛出一个错误。它的目的是跳过行之间的填充,而不是后退。

在PsdImagePlugin中,如果单个部分的组合大小大于额外数据字段的声明大小,则通过向后搜索查找下一层。现在可以通过寻求(层的开始+额外数据字段的大小)而不是(层的读取部分+层的其余部分)来更正此问题。

解压炸弹检查已添加到GIF和ICO格式。

如果TIFF维度是字符串,而不是尝试对其执行操作,则现在会引发错误。

其他变化

已删除bdist_wininst.exe安装程序

.exe安装程序不受PEP 527的欢迎,将在Python 3.8中被弃用。枕头将不再分发它们。应该改用轮子。

wheels中libwebp的标志

当构建包含在轮子中的libwebp时,枕头现在添加了-O3和-DNDEBUG CFLAGS。如果在未经调试的情况下构建libwebp,则默认情况下将使用这些标志,并且使用这些标志可以修复安装有轮子的枕头副本执行libwebp操作时速度的显著下降。