Python 如何使用PIL“取消绘制”图像中的方框

Python 如何使用PIL“取消绘制”图像中的方框,python,python-3.x,image,python-imaging-library,Python,Python 3.x,Image,Python Imaging Library,本质上,我有一个函数,通过使用PIL中的ImageDraw.Draw.rectangle方法,在用户单击图像的位置周围绘制一个小框。它工作得很好,但问题是,我需要这样的能力,当用户在新框中单击时,它应该被删除。但是,由于长方体成为图像的一部分,我不能这样做 有什么办法可以解决这个问题吗?在PIL之外有没有一个图书馆可以让这更容易 谢谢 一种方法是保留基本背景图像的原始、未注释的副本,并保留注释列表,我称之为您提到的正方形,如下所示: 正方形,黑色,10,10,20,20 红色广场,1001102

本质上,我有一个函数,通过使用PIL中的ImageDraw.Draw.rectangle方法,在用户单击图像的位置周围绘制一个小框。它工作得很好,但问题是,我需要这样的能力,当用户在新框中单击时,它应该被删除。但是,由于长方体成为图像的一部分,我不能这样做

有什么办法可以解决这个问题吗?在PIL之外有没有一个图书馆可以让这更容易


谢谢

一种方法是保留基本背景图像的原始、未注释的副本,并保留注释列表,我称之为您提到的正方形,如下所示:

正方形,黑色,10,10,20,20 红色广场,100110200210 圆圈,绿色,50,50,25 矩形,蓝色,30,3040300 然后每次重新绘制屏幕时,复制一份背景图像,并循环浏览绘制每个图像的注释列表

当需要删除时,浏览列表并删除中心最近的条目,然后重新绘制屏幕

您可以将此方法与@Mika72在评论中的建议相结合。所以你会有你的原始,干净的图像和一个单独的图像为你的覆盖,这是相同的大小,并开始作为一个空的纯透明画布。在用户单击时在此层上绘制注释正方形和矩形,每次重新绘制屏幕时,在原始图像上合成注释层。现在,您只需迭代注释列表,并在删除注释时重新绘制它们,因此重新绘制会更快


另一个选项是用XOR绘制橡皮筋,请参见答案。

有第二层,在那里添加框并相应地隐藏/取消隐藏该层。对不起,您能详细说明一下吗?如何在PIL中为图像文件创建第二层?即使我这样做了,我如何擦除第二层中的框?您是否为用户创建的每个长方体推荐另一层?您应该有两个图像,其中长方体绘制在具有透明背景的图像中。首先绘制UI,然后在其顶部的框层图像仅重新绘制像素,这些像素是不透明的,例如黑色。