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



也就是说,我有很多屏幕截图,并且我想将它们变成

通过谷歌搜索,我遇到了'composite'命令,但是我不知道是否可以使用,在这种情况下如何使用它来得到我想要的结果。

评论

您是否查看过imagemagick多层图像示例?

stackoverflow.com/questions/12076293/…

#1 楼

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

convert -append in-*.jpg out.jpg


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

convert in-1.jpg in-5.jpg in-N.jpg +append out-in1-plus-in5-and-inN.jpg


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

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示例:蒙太奇,图像数组。)

评论


谢谢。 append可以正常工作,但是我认为蒙太奇损坏了:如果未安装ghostscript字体,即使您不对图像进行注释,它也将退出紧急状态。字体应按需加载,而不是提前加载。

–布拉姆
2014年1月5日19:26

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

– Peth
2014年1月6日4:00



@MikeRobinson convert -append`counter = 0;对于x in- *;如果[[$(($ counter%2))== 0]]来做;然后回显$ x; fi; counter = $((counter + 1));完成`out.jpg应该可以完成这项工作。

– gozzilli
2014年11月12日15:59

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

– phil294
17年7月23日在19:27

@Blauhirn:那是对文件名排序的转换,还是只是您的glob按此顺序返回文件?例如ls *将按该顺序返回这些值。

–naught101
18年5月8日在6:00