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

Prz*_*icz 8 imagemagick imagemagick-convert

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

我已经研究过使用+ append,convert -composite和转换-page和-layers合并.

以下命令(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
Run Code Online (Sandbox Code Playgroud)

我正在寻找某种类型的运算符,以便可以相对于分层中的"最后"图像解释水平偏移,因此我可以以某种方式指定偏移,而不是指定+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
Run Code Online (Sandbox Code Playgroud)

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

Kur*_*fle 8

你忽略了这个montage命令.

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

montage             \
  -alpha on         \
  -background none  \
  -mode concatenate \
  -tile x1          \
  -frame 5          \
  -mattecolor none  \
   *.jpg            \
   output1.png
Run Code Online (Sandbox Code Playgroud)

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

convert  output1.png  -shave 5  output2.png
Run Code Online (Sandbox Code Playgroud)

要将此结果叠加到您的上background.jpg,请使用:

convert             \
  background.jpg    \
  output2.png       \
 -gravity Northwest \
 -geometry +10+10   \
 -composite         \
  final.jpg
Run Code Online (Sandbox Code Playgroud)