8

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

我研究了 +append 的使用、转换 -composite 以及使用 -page 和 -layers 合并进行转换。

以下命令 (convert -composite) 有效,但需要预先计算图像尺寸以指定绝对偏移量。真的,我想要在第一个分层图像的结尾和第二个分层图像的开始之间有 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我认为重力可以让我以与 CSS 定位相同的方式实现 ( ) float: left;,但事实并非如此。

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

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

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

4

2 回答 2

8

你忽略了montage命令。

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

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

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

convert  output1.png  -shave 5  output2.png

要将此结果覆盖在您的 上background.jpg,请使用:

convert             \
  background.jpg    \
  output2.png       \
 -gravity Northwest \
 -geometry +10+10   \
 -composite         \
  final.jpg
于 2012-09-05T03:28:10.780 回答
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。我用过管道 | 在同一命令中刮掉外框。

于 2014-02-24T21:52:02.523 回答