使用Graphicsmagick命令行或python的pgmagick包装器使用泛洪填充的好方法是什么?
到目前为止,这就是我所拥有的,但它表示签名不匹配:
码: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)
错误:
File "C:/Dropbox/COC/automate/coc_automate/python/__init__.py", line 62, in take_main_screen_shot img.floodFillColor(geo, cRGB, cRGB) Boost.Python.ArgumentError: Python argument types in Image.floodFillColor(Image, Geometry, ColorRGB, ColorRGB) did not match C++ signature: floodFillColor(class Magick::Image {lvalue}, class Magick::Geometry, class Magick::Color, class Magick::Color) floodFillColor(class Magick::Image {lvalue}, class Magick::Geometry, class Magick::Color)
另外,如果你知道一种更好的方法,我可以从Python应用程序或Windows命令行操作图形,我很满意。我开始觉得我可能会使用错误的工具来处理文档的状态。
答案 0 :(得分:1)
我建议您查看Python Imaging Library(PIL)
e.g。 draw a gray cross over an image
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")
答案 1 :(得分:1)
正如你所说,文档并不好。 pgmagick是一个用于C ++前端的瘦Python包装器,因此您必须深入了解界面层以找出如何使其工作。除非您需要额外的功能,否则Pillow可能是更好的选择。
我一直在使用pgmagick和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)