使用Imagemagick在某些像素级别重叠多个图像

时间:2018-01-05 04:22:36

标签: imagemagick imagemagick-convert imagemagick-montage

例如,我有4张图片,大小为 1000x800 。我想将所有这些图像合并为一个图像。我知道有一个

的命令
convert +append image[1-4].jpg output.jpg

但我想通过重叠 250像素将第二张图像合并到第一张图片中。

即,在我的最终图像中,image1有750像素以及image2& 3和最后一个图像有1000像素。

通过使用上面的 convert 命令,我们将获得 4000x800 的图片大小,但在这里我希望它是((750 * 3)+ 1000 * 1) X800。即 3250x800

另外,我如何通过垂直附加来做到这一点?

3 个答案:

答案 0 :(得分:2)

" + smush"运算符将表现为" +追加",但它需要一个参数。正数将附加由许多像素分隔的图像。负数将附加具有大量重叠的图像。你的示例命令看起来像这样......

convert image[1-4].jpg +smush -250 output.jpg

要垂直附加图像,请使用" -smush"运营商的形式。在任何一种情况下,操作员都将根据当前的" -gravity"来对齐图像。设置。

答案 1 :(得分:1)

您没有说明如何重叠它们。如果你不需要混合,那么在ImageMagick中,你可以使用smush而不是append。 Smush允许偏移(间隙)或重叠。前者具有正值,后者具有负值以重叠后续图像。 -smush垂直附加,+ smush水平附加。当为参数使用正值时,背景颜色控制间隙的间距。

所以试试

convert image[1-4].jpg +smush -256x0 output.jpg

convert image1.jpg image2.jpg image3.jpg image4.jpg +smush -256x0 output.jpg

或者如果那些是具有该语法的唯一图像,那么

convert image*.jpg +smush -256x0  output.jpg

答案 2 :(得分:0)

我刚刚在Imagemagick 6.9.9.33 Q16 Mac OSX中测试了以下内容。

注意我使用-smush测试了正值,以便查看间隙而不是重叠。那只是为了测试。如果你按照最后一个命令,它应该可以正负值,如果你想重叠而不是在图像之间放置间隙。

创建13张名为rose0.jpg的图片... rose12.jpg

convert rose: -fill white -gravity center -pointsize 18 -annotate +0+0 "0" test/rose0.jpg
convert rose: -fill white -gravity center -pointsize 18 -annotate +0+0 "1" test/rose1.jpg
convert rose: -fill white -gravity center -pointsize 18 -annotate +0+0 "2" test/rose2.jpg
convert rose: -fill white -gravity center -pointsize 18 -annotate +0+0 "3" test/rose3.jpg
convert rose: -fill white -gravity center -pointsize 18 -annotate +0+0 "4" test/rose4.jpg
convert rose: -fill white -gravity center -pointsize 18 -annotate +0+0 "5" test/rose5.jpg
convert rose: -fill white -gravity center -pointsize 18 -annotate +0+0 "6" test/rose6.jpg
convert rose: -fill white -gravity center -pointsize 18 -annotate +0+0 "7" test/rose7.jpg
convert rose: -fill white -gravity center -pointsize 18 -annotate +0+0 "8" test/rose8.jpg
convert rose: -fill white -gravity center -pointsize 18 -annotate +0+0 "9" test/rose9.jpg
convert rose: -fill white -gravity center -pointsize 18 -annotate +0+0 "10" test/rose10.jpg
convert rose: -fill white -gravity center -pointsize 18 -annotate +0+0 "11" test/rose11.jpg
convert rose: -fill white -gravity center -pointsize 18 -annotate +0+0 "12" test/rose12.jpg


然后嘘他们。这失败了,只追加0-2。 (我认为这种结构仅限于它看到的任何数字)

convert test/rose[0-12].jpg -smush 10 test/rose_smush.jpg

enter image description here

如果仅使用一位数字,则此方法有效。

convert test/rose[0-9].jpg -smush 10 test/rose_smush.jpg

enter image description here

执行此操作的正确方法是使用以下结构。

convert test/rose%d.jpg[0-12] -smush 10 test/rose_smush.jpg

enter image description here

请参阅http://www.imagemagick.org/script/command-line-processing.php

上的文件名参考部分