API添加
文本笔划
stroke_width
和 stroke_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")
创建以下图像:
多监视器窗口上的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操作时速度的显著降低。
讨论区