我需要使用ImageMagick,因为PIL没有我正在寻找的图像功能。但是,我想使用Python。
自2009年以来,python绑定(PythonMagick)尚未更新。我唯一能找到的是os.system
调用使用命令行界面,但这看起来很笨拙。
有没有办法直接使用ctypes
和某种转换来访问API?
作为最后的手段,还有其他任何图书馆都有大量的ImageMagick图像编辑工具供我查看吗?
答案 0 :(得分:62)
我建议使用Wand(解释如下)。
我正在寻找与ImageMagick库的正确绑定,即:
但实际上python API(绑定)有太多不同的(大多数已停产)版本。在阅读了Benjamin Schweizer的精彩历史概述之后,它已经变得清晰(也见他的github wiki):
现在Wand只是ImageMagick的一个(简化的)C API“.. API是C编程语言和ImageMagick图像处理库之间的推荐接口。与MagickCore C API不同,MagickWand只使用几种不透明类型。存取器可用于设置或获取重要的魔杖属性。“ (See project homepage)
因此,它已经是一个易于维护的简化界面。
答案 1 :(得分:3)
我发现ImageMagick没有很好的Python绑定,所以为了在Python程序中使用ImageMagick,我必须使用subprocess
模块来重定向输入/输出。
例如,我们假设我们需要将PDF文件转换为TIF:
path = "/path/to/some.pdf"
cmd = ["convert", "-monochrome", "-compress", "lzw", path, "tif:-"]
fconvert = subprocess.Popen(cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
stdout, stderr = fconvert.communicate()
assert fconvert.returncode == 0, stderr
# now stdout is TIF image. let's load it with OpenCV
filebytes = numpy.asarray(bytearray(stdout), dtype=numpy.uint8)
image = cv2.imdecode(filebytes, cv2.IMREAD_GRAYSCALE)
在这里,我使用tif:-
告诉ImageMagick的命令行实用程序,我想将TIF图像作为stdout流。以类似的方式,您可以通过将-
指定为输入文件名来告诉它使用stdin流作为输入。
答案 2 :(得分:0)
这对我来说有用,可以使用以下命令从文本中为字母“P”创建图像:
import subprocess
cmd = '/usr/local/bin/convert -size 30x40 xc:white -fill white -fill black -font Arial -pointsize 40 -gravity South -draw "text 0,0 \'P\'" /Users/fred/desktop/draw_text2.gif'
subprocess.call(cmd, shell=True)