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

时间:2015-01-19 22:32:18

标签: 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最新评论之后,我得到了

我想要的是,所有图像中出现的区域(示例中的中间)加起来到非透明区域,而那些仅出现在较少图像上的区域变得越来越透明。标记示例似乎适用于3个图像,但不适用于较大的堆栈。我想得到的结果就是这个(这里我通过添加非白色背景来强调透明区域):

示例图像来自这个

使用此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

2 个答案:

答案 0 :(得分:0)

#!/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

答案 1 :(得分:0)

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