在Python 3中使用PythonMagick的蒙太奇?

我希望能够使用PythonMagick生成蒙太奇。 这个文档看起来很稀疏,但是我一直试图用Eclipse的代码完成部分来追查它,以及其他一些关于Stack Overflow的问题。 看来,MagickWand API有我正在寻找的function,根据这个:

http://www.imagemagick.org/api/MagickWand/montage_8c.html

但是,我似乎无法在PythonMagick中find它。 这是简单的吗? 如果是这样,我可能只是抛弃我的PythonMagick代码的其余部分,并依赖于便携式ImageMagick发行版或类似的东西(这个程序将必须是可移植的,并在Windows上运行一个简单的端口到Mac OS上的subprocess.call …到目前为止,我还有一些其他的PythonMagick命令可以工作,所以如果可能的话,我想让这条路线继续运行)。

谢谢!

使用python imagemagick / graphicsmagick绑定有很多帮助,但不幸的是并不是所有的功能都在那里。 我实际上有@FizxMike同样的问题。 我需要使用蒙太奇,然后做一些进一步的操作,但将文件保存在硬盘上,然后将其重新加载到适当的pgmagick对象中,以执行其余的操作并再次保存。

最终我使用了子进程解决方案,但不是保存在文件中,而是将输出重定向到标准输出。 然后,我使用stdout从pgmagick.Image对象中的pgmagick.Blob加载图像,并在python代码中执行其余的处理。

该过程如下代码所示:

import os import pgmagick import subprocess my_files = [] # Dir with the images that you want to operate on dir_with_images = "." for file in os.listdir(dir_with_images): if file.endswith(".png"): my_files.append(os.path.join(dir_with_images, file)) montage_cmd = ['gm', 'montage'] montage_cmd.extend(my_files) # The trick is in the next line of code. Instead of saving in a file, eg myimage.png # the montaged file will just be "printed" in the stdout with 'png:-' montage_cmd.extend(['-tile', '2x2', '-background', 'none', '-geometry', '+0+0', 'png:-']) # Use the command line 'gm montage' since there are not python bindings for it :( p = subprocess.Popen(montage_cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE) # Get the stdout in a variable stdout, stderr = p.communicate() # Load the stdout in a python pgmagick Image object using the pgmagick.Blob # and do the rest of the editing on python code img = pgmagick.Image(pgmagick.Blob(stdout)) # Display the image img.display() geometry = pgmagick.Geometry(300, 200) geometry.aspect(True) # Resize the montaged image to 300x200, but keep the aspect ratio img.scale(geometry) # Display it again img.display() # And finally save it <- Only once disk access at this point. img.write('myimage.png') 

我有同样的问题,即使pgmagick缺少所需的蒙太奇图像()功能( Magick +蒙太奇的例子 )

这就是我所做的(在Django视图中):

 #ImageMagick CLI is better documented anyway (-background none preserves transparency) subprocess.call("montage -border 0 -geometry "+str(cols)+"x -tile 1x"+str(len(pages))+" "+target_path[0:len(target_path)-4]+"[0-9]*.png -background none "+target_path,shell=True)` 

不好玩,因为我不得不先绕过一堆文件……写入硬盘并不是最快的事情,然后删除临时文件。

我宁愿用公羊来做这件事。

我自己还在寻找更好的答案。