使用Graphicsmagick或pgmagik进行整体填充



问题

在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)
    

相关内容

  • 没有找到相关文章

最新更新