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 ,并且将在Python3.8中弃用。枕头将不再分发它们。应该用轮子代替。

wheels中libwebp的标志#

在构建包含在轮子中的libwebp时,Pillow现在添加了 -O3-DNDEBUG CFLAGS.如果在没有调试的情况下构建libwebp,则默认情况下将使用这些标志,并且使用它们可以修复安装在轮子上的Pillow执行libwebp操作时速度的显著降低。