如何删除在PIL图像上绘制的图纸?

时间:2019-06-20 16:38:58

标签: python python-imaging-library

我需要在PIL Image对象上动态绘制形状,并根据用户输入更改这些形状。为此,删除PIL图像上的先前图形将很有帮助。我正在使用Jupyter笔记本电脑来使用display()功能。

我已经找到了一种解决方法,其中包括在内存中保存图像的两个副本(imim_draw),并通过添加绘图来修改im_draw,然后显示im_draw,然后分配im_draw = im.copy(),但这绝对不是一个很好的解决方案。

from PIL import Image, ImageDraw
from skimage import data
from IPython.display import display

im = Image.fromarray(data.astronaut()) # This is an example image but you could use Image.open('eg_image.jpg')
display(im)
# Draw the rectangle on im_draw
draw = ImageDraw.Draw(im)
draw.rectangle((120, 120, 380, 380), width=10, outline='red')
display(im)

# I would like to erase the drawing here, if possible, e.g.
# im.erase_drawing(), such that display(im) showed the original image

#########################

# Temporary workaround; Alternative Approach
im = Image.fromarray(data.astronaut())
im_draw = im.copy()
# Draw the rectangle on im_draw
draw = ImageDraw.Draw(im_draw)
draw.rectangle((120, 120, 380, 380), width=10, outline='green')
display(im_draw)
im_draw = im.copy() # Resets im_draw to im
display(im_draw)

另一种方法可行,但是会占用更多的内存,理想情况下,我只能从im删除图形。如果您对此有任何想法,请告诉我。

0 个答案:

没有答案