我正在用枕头在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.rectangle
和rectangle(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/