将ImageMagick中的多个图像与相对(非绝对)偏移组合在一起

时间:2012-09-05 01:46:11

标签: imagemagick imagemagick-convert

我正在寻找在ImageMagick中将多个图像拼接在一起的最有效方法,在背景图像上,这样重叠图像之间的间距/填充是一致的吗?

我调查过使用+ append,convert -composite,并使用-page和-layers merge进行转换。

以下命令(convert -composite)有效,但需要预先计算图像尺寸才能指定绝对偏移。真的,我希望FIRST分层图像的末端和第二层图像的开始之间有10像素的间隙,但我能看到的唯一方法是通过指定画布左上角的绝对偏移量

convert \
  background.jpg \
  first.jpg -gravity Northwest -geometry  +10+10 -composite \
  second.jpg                   -geometry +300+10 -composite \
  third.jpg                    -geometry +590+10 -composite \
  output.jpg

我正在寻找某种类型的运算符,以便可以相对于分层中的“最后”图像解释水平偏移,因此不是为第二个图像指定+300+10而是为+590+10指定第三,我可以某种方式指定+10+10偏移。

我认为引力可以让我实现那个(-gravity Northwest),就像float: left;在CSS定位中的工作方式一样,但事实并非如此。

我在以下方面取得了一些成功:

convert \
  -page  +10+10 first.jpg  \
  -page +300+10 second.jpg \
  -page +590+10 third.jpg  \
  -background transparent  \
  -layers merge \
   layered.png

convert background.jpg layered.png -gravity Center -composite output.jpg

所描述的两种技术都需要预先计算绝对偏移,这有点痛苦。有更好的方法吗?

2 个答案:

答案 0 :(得分:8)

您忽略了montage命令。

添加所需间距的最简单命令是使用-frame 5设置-mattecolor none选项。这适用于不同宽度值的图像,并将它们以10像素的距离分开:

montage             \
  -alpha on         \
  -background none  \
  -mode concatenate \
  -tile x1          \
  -frame 5          \
  -mattecolor none  \
   *.jpg            \
   output1.png

然而,您会很容易注意到,生成的图像的边框在顶部,右侧,底部和左侧只有5个像素宽。要删除这五个像素,请使用:

convert  output1.png  -shave 5  output2.png

要在background.jpg上叠加此结果,请使用:

convert             \
  background.jpg    \
  output2.png       \
 -gravity Northwest \
 -geometry +10+10   \
 -composite         \
  final.jpg

答案 1 :(得分:2)

你也可以使用Kurt的透明框架技巧和附加。使用append而不是蒙太奇可以使用重力设置来对齐图像顶部(北部)底部(南部)或中心。

这是一个如何水平附加图像的示例,它们之间有10像素的间隙,图像顶部对齐:

convert \
  -frame 5 \
  -mattecolor none \
  -background none \
  -gravity north \
  first.jpg second.jpg third.jpg \
  +append \
  png:- | convert - -shave 5
  output.png

要垂直附加图像,请使用-append而不是+ append。我用过烟斗|在同一个命令中削掉外框。