使用Graphicsmagick或pgmagick填充洪水

时间:2013-12-10 06:40:38

标签: python graphics imagemagick graphicsmagick pgmagick

问题

使用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命令行操作图形,我很满意。我开始觉得我可能会使用错误的工具来处理文档的状态。

2 个答案:

答案 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)