我正在使用 Pillow 在 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)
我不明白,为什么这段代码会失败:在 Pillow's very own documentation PIL.ImageDraw.Draw.rectangle
使用这些参数定义:rectangle(xy, fill=None, outline=None)
。
既然文档明确列出了可选参数 fill
和 outline
,为什么 Pillow 提示它只需要 1 个参数?
pip freeze
表示 Pillows 版本为 3.3.1
。
最佳答案
如果您读取一张灰度图像并尝试在其上绘制一个彩色矩形,您将收到错误消息:TypeError: function takes exactly 1参数(给定 3)
您需要提供像 outline=(255)
这样的颜色,而不是像 outline=(255, 0, 0)
这样的 RGB 颜色。否则你会得到错误,因为你给出了 3 个颜色参数,而不是一个。如果您确实想在灰度图像上绘制颜色,您可以先将图像转换为 RGB:img = img.convert('RGB')
编辑:由于许多其他人也遇到了这个问题,我向 Pillow 提交了一个错误,他们立即 made a fix .所以这个问题和答案有望很快过时。
关于python - Pillow :使用 Draw.rectangle 的奇怪行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39080087/