如何从 PIL 的 ImageDraw 中获取图像?

13

我在项目中使用PIL,并且有一个ImageDraw对象。 我希望获取绘制在ImageDraw对象上的图像。如何获取图像?


1
pyscreenshot 能对你有帮助吗? - Jeroen Heier
谢谢,但我不能使用它。 - Nikhil Ashodariya
2个回答

15

这就是你在寻找的东西吗?

from PIL import Image, ImageDraw
im = Image.new('RGBA', (400, 400), (0, 255, 0, 0))
draw = ImageDraw.Draw(im) 
draw.text((20, 20), "DRAW TEXT", fill="red")
draw.polygon([(5,5), (25,5), (25,20), (5,25)], fill="green", outline=None)
im.show()
im.save("ImageDraw.png")

这是 ImageDraw.png 图像文件(缩放300%):

enter image description here

在这里, draw 对象用于在图像中绘制多边形。在向 draw 对象绘制时,您更改了 im 对象。

P.S. 还请查看:

使用 PIL 在图像上绘制线条

Python Imaging Library 保存函数


2
如果我只传递了ImageDraw.Draw对象怎么办?有没有办法从中获取图像? - Pro Q
抱歉,不知道如何从ImageDraw.Draw对象中取回图像。也许有一种方法,但我认为没有,因为图像内容本身不是ImageDraw.Draw对象的一部分。如果可能删除图像本身而不出现错误,则链接到它的ImageDraw.Draw对象将指向不存在的图像,因此至少在这一点上,在尝试在该图像上绘制时应出现错误。 - Claudio
尝试使用 draw.im(例如:draw.im.size 将返回图像大小) - tamersalama
你不需要从绘制中获取图像,你在第一次调用时使用的原始图像作为参数: draw = ImageDraw.Draw(im) 已经直接被修改了,因此你只需使用"im.width",那将是具有绘制内容的相同图像。 - MMEL
imd.im(如PIL.ImageDraw(PIL.Image.Image))返回类似于PIL.Image.Image的东西,并且具有许多相同名称的方法,但实际上并不相同。这对于获取大小、通道和许多其他内容非常有用。您可以将其用于粘贴和其他操作,但是它们需要类似但不同的参数,这些参数未记录,也没有任何承诺支持或一致性。因此,除非生产是重要部分或仅为一次性项目,否则最好不要使用它,除了获取图像大小和模式之外。 - Ismael Harun

8

非常简单:

original_image = edited_image._image

im对象传递给ImageDraw,然后保存到类变量_image中。就是这样。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接