使用ImageMagick合并多个图像


166

我想使用ImageMagick将多张图像合并为一张图像。为了更好地解释,我希望结果看起来像这样:

也就是说,我有许多屏幕截图,我想将它们变成一张图像,而原始图像彼此重叠。

通过Googling,我遇到了“ composite”命令,但我不知道是否可以,在这种情况下,如何使用它来获得所需的结果。



Answers:


256

对于任意数量的名为的输入文件:in-<something>.jpg

convert -append in-*.jpg out.jpg

为了附加特定的文件,或者跳过数字而不是完整的“ glob”,您可以明确提及输入文件,然后在后面添加append命令

转换in-1.jpg in-5.jpg in- N .jpg +追加out-in1-plus-in5-and-in N .jpg

您可以使用-append(而不是+append)进行垂直粘贴。

要么:

montage -mode concatenate -tile 1x in-*.jpg out.jpg

还将创建一个out.jpg包含源图像的垂直串联的文件。

convert

对于单个行或列中的简单串联append,该convert工具的选项就足够了。请注意,-append将所有图像垂直连接起来,创建一个包含n行的列,然后+append将其水平连接,创建一个包含n个列的行。

(请参阅ImageMagick:命令行选项。)

montage

为了更好地控制布局,我们需要该montage工具。montage -mode concatenate将像append选项一样将输入图像粘在一起,并-tile 1x控制要应用的布局。

tile如下格式 × ,但任何一方可能会丢失,并montage会找出如何满足约束条件。

我们在这里使用1x(恰好是一列,具有任意行数)来获得与相同的效果-append。没有-tile 1x,它将像一样加入图像+append,默认为-tile x1(一行中任意数量的列)。

(请参阅ImageMagick示例:蒙太奇,图像数组。)


1
谢谢。append可以正常工作,但我认为蒙太奇损坏了:如果未安装ghostscript字体,即使您不对图像进行注释,它也可以摆脱困境。字体应按需加载,而不是提前加载。
布拉姆2014年

@布拉姆:我不知道,并强烈同意。您知道GraphicsMagick的行为是否相同吗?
peth 2014年

2
@MikeRobinson convert -append `counter=0; for x in in-*; do if [[ $(($counter % 2)) == 0 ]]; then echo $x; fi; counter=$((counter + 1)); done` out.jpg应该做的工作。
gozzilli 2014年

2
请注意,convert -tile 2x2etc。命令将按字母顺序读取文件。这意味着名为的块0-10将读取为0,10,1,2,..,9。我花了将近2个小时来了解这个基本知识。
布劳伦

1
@Blauhirn:那是对文件名排序的转换,还是只是您的glob按此顺序返回文件?例如ls *将按该顺序返回这些值。
naught101 '18
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.