如何用imagemagick合成2张以上的图像?

问题描述 投票:0回答:1

如何使用 imagemagick 将多个图像重叠在一起?

我有一个基本图像

layers.png

我想剪掉图像的不同部分并将它们重叠。例如,将左臂的骨骼肋骨和血管重叠在肌肉体顶部(所需输出):

所以我提取了我需要的不同部分:

% convert layers.png -crop 400x1048+0+0 body.png
% convert layers.png -crop 140x180+522+230 -alpha set -channel Alpha -evaluate multiply 0.8 +channel -background none -gravity north -splice x230 -gravity west -splice 122x +gravity ribs.png
% convert layers.png -crop 100x340+1434+245 -alpha set -channel Alpha -evaluate multiply 0.8 +channel -background none -gravity north -splice x245 -gravity west -splice 271x +gravity arm.png

使用

-splice
根据身体部位与合成图像左上角的偏移方式来偏移身体部位。

合成这些图像一次适用于两个:

% convert body.png ribs.png -composite body_and_ribs.png

但是它不能同时用于三个:

% convert body.png ribs.png arm.png -composite all.png

我用

-flatten
而不是
-composite
的另一次尝试与我想要的甚至更远:

% convert body.png ribs.png arm.png -flatten all.png

如何在 imagemagick 中简单地将两个以上的输入图像重叠在一起?

imagemagick imagemagick-convert
1个回答
0
投票

为了使展平的部分正确对齐,ImageMagick 解决方案是“+重新分页”它们,以便它们在“-展平”之前都以相同的几何形状开始。

我已将整个操作放入一个命令中,读取一次输入并使用它来制作所有三个部分,然后展平并写入输出。

magick convert layers.png -background none -write mpr:img0 +delete ^
   ( mpr:img0 -crop 400x1048+0+0 ) ^
   ( mpr:img0 -crop 140x180+522+230 ^
      -channel A -evaluate multiply 0.8 +channel -splice 122x230 ) ^
   ( mpr:img0 -crop 100x340+1434+245 ^
      -channel A -evaluate multiply 0.8 +channel -splice 271x245 ) ^
   +repage -flatten body_and_ribs.png

该命令采用 Windows CLI 语法,并生成下图。

该命令使用 IM 的内置内存寄存器“mpr:anyname”来保存输入图像以供多次重复使用。在每组括号内,输入图像将根据需要进行裁剪、调整 alpha 并拼接以将其定位在结果中。在括号之后,所有三个图像都会获得“+repage”,因此它们都与“-flatten”正确对齐。

© www.soinside.com 2019 - 2024. All rights reserved.