dan*_*451 9 python python-imaging-library python-2.7 pillow
我正在使用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))
Run Code Online (Sandbox Code Playgroud)
这会引发以下异常:
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)
Run Code Online (Sandbox Code Playgroud)
我不明白,为什么这段代码失败了:在Pillow,我们自己的文档 PIL.ImageDraw.Draw.rectangle是用这些参数定义的:rectangle(xy, fill=None, outline=None).
由于文件明确列出了可选参数fill和outline,为什么枕头抱怨,只需要1个参数?
pip freeze枕头版说是3.3.1.
Ken*_*iff 16
如果您读取灰度图像并尝试在其上绘制颜色矩形,您将收到错误消息:TypeError: function takes exactly 1 argument (3 given)
你需要给出一种颜色outline=(255),而不是RGB颜色outline=(255, 0, 0).否则你会得到错误,因为你给出了3个颜色参数,而不是一个.如果您确实想要在灰度图像上绘制颜色,可以先将图像转换为RGB:img = img.convert('RGB')
(我在遇到错误后找到了这个页面,@ ascenator的测试用例帮助我弄清楚发生了什么.由于我的代码使用了一些图像而不是其他图像,因此非常令人困惑.)
在稍微调整您的代码以使其运行后,我无法重现异常。
from PIL import Image, ImageDraw
img = Image.open('testfig.png')
rimg = img.copy()
rimg_draw = ImageDraw.Draw(rimg)
rimg_draw.rectangle((10, 10, 30, 30), fill=None, outline=(255, 0, 0))
rimg.show()
Run Code Online (Sandbox Code Playgroud)
但是,我在我的系统上运行 Python 3.4.4 和 Pillow 3.2.0。与台式机相比,您的笔记本电脑上的版本有什么明显的不同吗?
您能否分别更深入地查看您的代码行 124 和 203,或者向我们提供一个可以为您创建此异常的工作代码片段?
| 归档时间: |
|
| 查看次数: |
4635 次 |
| 最近记录: |