使用 imagemagick 将图像叠加为透明层

overlay images as transparent layers with imagemagick

我想使用 imagemagick 堆叠多个图像。我想要的结果与我将所有图像作为图层导入 Gimp 并将图层透明度设置为某个值时得到的结果相同。

每张图片都是透明的,中间有一个不同大小的圆圈。用 100/N% 的不透明度覆盖所有 N 个图像应该给我一些类似模糊斑点的东西,透明度呈径向增加。这是三个示例图片。

但是,如果我尝试使用 imagemagick 执行此操作,我会得到黑色背景:

convert image50.png -background transparent -alpha set -channel A -fx "0.2" \( image60.png -background transparent -alpha set -channel A -fx "0.2" \) -compose overlay -composite -flatten result.png

编辑: 在 Mark Setchells 的最新评论之后,我得到了

我想要的是那些出现在所有图像中的区域(示例中的中心)加起来为 non-transparent 区域,而那些只出现在较少图像中的区域变得越来越透明。标记示例似乎适用于 3 张图像,但不适用于更大的堆栈。我想要得到的结果是这个(这里我通过添加 non-white 背景来强调透明区域):

范例图就是这张

使用此 bash 命令:

for i in $(seq 10 10 90); do
    f="image$i.png"
    convert http://i.stack.imgur.com/hjWgF.png -quality 100 -fuzz $i% -fill white -transparent black $f
done
#!/bin/bash

# Calculate how many images we have
N=$(ls image*.png|wc -l)
echo N:$N

# Generate mask, start with black and add in components from each subsequent image
i=0
convert image10.png -evaluate set 0 mask.png
for f in image*png;do
   convert mask.png \( "$f" -alpha extract -evaluate divide $N \) -compose plus -composite mask.png 
done

# Generate output image
convert image*.png      \
   -compose overlay -composite \
   mask.png -compose copy-opacity -composite out.png

您在这里需要的是一种不同的合成模式。您使用的是 -compose overlay ,这将使每个连续层的结果变亮。您可能想要的是 -compose blend 仅保留最饱和的值,或者只是 -compose over 将它们分层而不进行任何修改。