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

时间:2019-02-12 06:25:31

标签: python python-3.x image python-imaging-library

基本上,我有一个函数,可以使用PIL中的ImageDraw.Draw.rectangle方法在用户单击图像的位置周围绘制一个小方框。它很好用,但是问题是,我需要这样的功能,以便用户在新框内单击时,它应该被删除。但是,由于盒子成为图像的一部分,所以我不能这样做。

有什么解决办法吗? PIL之外是否有一个库可以使此操作更容易?

谢谢!

1 个答案:

答案 0 :(得分:1)

执行此操作的一种方法是保留基本的原始背景图像的原始,未注释的副本,并保留注释列表(这就是我所说的正方形),如下所示:

  • 正方形,黑色,10、10、20、20
  • 方形,红色,100,110、200,210
  • 圆形,绿色,50、50、25
  • 矩形,蓝色,30,30、40,300

然后,每次重新绘制屏幕时,请复制背景图像,并遍历绘制每个图像的注释列表。

要删除时,请遍历列表并删除中心最近的条目,然后重新绘制屏幕。

您可以在评论中将此方法与@ Mika72的建议结合使用。这样一来,您将获得原始的原始图像以及用于覆盖的单独图像,该图像的大小相同,并且开始时是一块空的纯透明画布。用户单击时,将注释(正方形和矩形)绘制到该层上,并且每次重新绘制屏幕时,都将注释层合成到原始图像上。现在,您只需要遍历注释列表,并在删除注释时重新绘制它们,因此重新绘制将更快。


另一种选择是通过XOR绘制的“橡皮筋” ,请参见答案here