使用Graphicsmagick或pgmagi进行洪水填充

2024-06-17 14:11:29 发布

您现在位置:Python中文网/ 问答频道 /正文

问题

在Graphicsmagick命令行或其pgmagick包装器for python中使用flood fill的好方法是什么?在

背景

到目前为止,这是我所掌握的,但它的意思是签名不匹配:

代码:
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)
错误: ^{pr2}$

额外

另外,如果你知道我可以从Python应用程序或windows命令行操作图形的更好方法,我会全神贯注的。我开始觉得我可能在文档状态下使用了错误的工具。在


Tags: 方法代码命令行imageimgfor错误fill
2条回答

正如你所说,文档不是很好。PGMAGIK是一个用于C++前端的薄Python包装器,因此你必须挖掘接口层来找出如何使它工作。除非你需要额外的功能,枕头可能是一个更好的选择。在

我一直在使用pgmagick和ImageMagick,而不是GraphicsMagick作为后端。我不知道这是否有什么不同。在任何情况下,以下是我需要做的调整,以使您的代码工作:

  • 使用颜色而不是rgb颜色

    from pgmagick import Color
    color = Color('white')
    
  • 实例化几何体对象时再提供两个0:

    from pgmagick import Geometry
    geo = Geometry(0, 0, 1, 1)
    
  • 与其将两个颜色参数传递给floodFillColor,不如先调用fillColor,然后再调用fillColor 调用floodFillColor,如下所示:

    img.fillColor(color)
    img.floodFillColor(geo, color)
    

我建议您看看Python Imaging Library(PIL)

例如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")

相关问题 更多 >