如何使用 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 解决方案是“+重新分页”它们,以便它们在“-展平”之前都以相同的几何形状开始。
我已将整个操作放入一个命令中,读取一次输入并使用它来制作所有三个部分,然后展平并写入输出。
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”正确对齐。