我正在寻找在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
所描述的两种技术都需要预先计算绝对偏移,这有点痛苦。有更好的方法吗?
答案 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。我用过烟斗|在同一个命令中削掉外框。