我正在用枕头在for循环中绘制矩形。这在我的台式电脑上有效,但在我的笔记本电脑上引发了一个奇怪的例外。
这是代码(简称):

from PIL import Image, ImageDraw
(...)
img = Image.open(sys.argv[1])
rimg = img.copy()
rimg_draw = ImageDraw.Draw(rimg)
(...)
(for-loop)
    rimg_draw.rectangle((x1, y1, x2, y2), fill=None, outline=(255, 0, 0))

这将引发以下异常:
rimg_draw.rectangle((x1, y1, x2, y2), fill=None, outline=(255, 0, 0))
  File "/home/daniel/tensorflow2.7/lib/python2.7/site-packages/PIL/ImageDraw.py", line 203, in rectangle
    ink, fill = self._getink(outline, fill)
  File "/home/daniel/tensorflow2.7/lib/python2.7/site-packages/PIL/ImageDraw.py", line 124, in _getink
    ink = self.draw.draw_ink(ink, self.mode)
TypeError: function takes exactly 1 argument (3 given)

我不明白,这段代码为什么会失败:在枕头上,用这些参数来定义。
由于文档明确列出了可选参数PIL.ImageDraw.Draw.rectanglerectangle(xy, fill=None, outline=None),为什么枕头抱怨它只需要1个参数?
说枕头版本是。

最佳答案

如果读取灰度图像并尝试在其上绘制颜色矩形,则会收到错误消息:TypeError: function takes exactly 1 argument (3 given)
您需要提供类似于outline=(255)的颜色,而不是类似于outline=(255, 0, 0)的RGB颜色。否则,您会得到错误,因为您提供了3个颜色参数,而不是一个。如果要在灰度图像上绘制颜色,可以先将图像转换为RGB:img = img.convert('RGB')
(我在点击错误后找到了这个页面,@ascentator的测试案例帮助我弄清楚发生了什么。因为我的代码处理的是一些图像,而不是其他图像,所以非常混乱。)

关于python - 枕头:使用Draw.rectangle的奇怪行为,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/39080087/

10-12 22:20