使用 ImageMagick 组合多个图像

Pet*_*ter 208 imagemagick image-processing

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

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

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

pet*_*eth 317

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

convert -append in-*.jpg out.jpg
Run Code Online (Sandbox Code Playgroud)

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

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

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

或者:

montage -mode concatenate -tile 1x in-*.jpg out.jpg
Run Code Online (Sandbox Code Playgroud)

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

convert

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

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

montage

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

tile遵循格式columns × rows,但任一方可能会丢失,并montage会弄清楚如何满足约束。

我们在这里使用1x(正好是一列具有任意行数)来获得与-append. 如果没有-tile 1x,它会加入像 的图像+append,默认为-tile x1(一行上的任意数量的列)。

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

  • 谢谢。append 工作正常,但我认为蒙太奇坏了:如果没有安装 ghostscript 字体,它会退出,即使你没有注释图像。字体应该按需加载,而不是提前加载。 (2认同)
  • @MikeRobinson `convert -append `counter=0; 对于 in-* 中的 x;做 if [[ $(($counter % 2)) == 0 ]]; 然后回显 $x; fi; 计数器=$((计数器+ 1)); done` out.jpg`` 应该可以完成这项工作。 (2认同)
  • 请注意,`convert -tile 2x2` 等命令将**按字母顺序**读取文件。这意味着名为“0-10”的块将被读取为“0,10,1,2,..,9”。我花了将近 2 个小时才意识到这个基本的东西。 (2认同)

Cir*_*郝海东 13

-resize 如果图像不具有相同的宽度/高度,则使用

您可以使用以下选项固定所有图像的高度-resize,例如,在水平连接的两个图像上固定 500 像素的高度:

convert +append image_1.png image_2.png -resize x500 new_image_conbined.png
Run Code Online (Sandbox Code Playgroud)

或者对于垂直连接,您需要设置固定宽度:

convert -append image_1.png image_2.png -resize 500x new_image_conbined.png
Run Code Online (Sandbox Code Playgroud)

例子:

图片_1.png 1067x600

在此输入图像描述

图片_2.png 1920x1080

在此输入图像描述

新图像联合.png 889x500

在此输入图像描述

如何与 GIMP 交互地执行此操作

如果您需要首先以交互方式裁剪/调整图像大小(通常是这种情况),那么 GIMP 是完美的工具,这里有详细的分步步骤:https: //graphicdesign.stackexchange.com/questions/83446/gimp -如何并排组合两个图像/145543#145543

在此输入图像描述

SVG

ImageMagick 6.9.11-60 不处理它们,所以请参阅: