问题
在python的Graphicsmagick命令行或其pgmagik包装器中使用洪水填充的好方法是什么?
背景
到目前为止,这就是我所拥有的,但它说签名不匹配:
代码:from pgmagick import Image, ColorRGB
img = Image('C:\test.png')
cRGB = ColorRGB(256.0, 256.0, 256.0)
geo = Geometry(1,1)
img.floodFillColor(geo, cRGB, cRGB)
错误:文件"C:\Dropbox/COC/automatic/COC_automate/python/_init__.py",第62行,take_min_screen_shotimg.floodFillColor(geo,cRGB,cRGB)Boost.Python.ArgumentError:中的Python参数类型Image.floodFillColor(图像、几何体、ColorRGB、ColorRGB)与C++签名不匹配:floodFillColor(类Magick::Image{lvalue},类Magick::Geometry,类agick::Color,类Magick::Color)floodFillColor(类Magick::Image{lvalue},类Magick::Geometry,类魔术师::Color)
额外
此外,如果你知道从Python应用程序或windows命令行操作图形的更好方法,我会洗耳恭听。我开始觉得,在文档的状态下,我可能使用了错误的工具。
我建议看一下Python Imaging Library(PIL)
例如在图像上画一个灰色十字
import Image, ImageDraw
im = Image.open("lena.pgm")
draw = ImageDraw.Draw(im)
draw.line((0, 0) + im.size, fill=128)
draw.line((0, im.size[1], im.size[0], 0), fill=128)
del draw
# write to stdout
im.save(sys.stdout, "PNG")
正如您所说,文档并不好。pgmagick是一个面向C++前端的瘦Python包装器,因此您必须深入研究接口层,以找出如何使其工作。除非你需要额外的功能,否则枕头可能是一个更好的选择。
我一直在使用pgmagik和ImageMagick,而不是GraphicsMagick作为后端。我不知道这是否有多大区别。无论如何,以下是我需要进行的调整,以使您的代码发挥作用:
-
使用Color而不是RGBColor
from pgmagick import Color color = Color('white')
-
实例化Geometry对象时再提供两个0:
from pgmagick import Geometry geo = Geometry(0, 0, 1, 1)
-
与其将两个Color参数传递给floodFillColor,不如先调用fillColor,然后再调用调用floodFillColor,如下所示:
img.fillColor(color) img.floodFillColor(geo, color)