使用imagemagick将图像覆盖为透明层
我想使用imagemagick堆叠几个图像。我想要的结果与我将所有图像作为层导入Gimp并将层透明度设置为某个值时得到的结果相同 每个图像都是透明的,中心有一个大小不同的圆圈。用100/N%的不透明度覆盖所有N幅图像,会让我感觉像是一个模糊的斑点,透明度呈放射状增加。下面是三个示例图像 但是,如果我尝试使用imagemagick执行此操作,我会得到一个黑色背景:使用imagemagick将图像覆盖为透明层,imagemagick,Imagemagick,我想使用imagemagick堆叠几个图像。我想要的结果与我将所有图像作为层导入Gimp并将层透明度设置为某个值时得到的结果相同 每个图像都是透明的,中心有一个大小不同的圆圈。用100/N%的不透明度覆盖所有N幅图像,会让我感觉像是一个模糊的斑点,透明度呈放射状增加。下面是三个示例图像 但是,如果我尝试使用imagemagick执行此操作,我会得到一个黑色背景: convert image50.png -background transparent -alpha set -channel
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
编辑:
在马克·塞切尔的最新评论之后,我得到了
我想要的是,所有图像中出现的区域(示例中的中心)加起来就是非透明区域,而那些仅出现在较少图像上的区域变得越来越透明。Marks示例似乎适用于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
这里需要的是不同的合成模式。您使用的是
-compose overlay
,它将使每个连续层的结果变亮。您可能希望这里的-compose blend
只保留最饱和的值,或者只-compose over
不做任何修改地对其进行分层。不完全是我想要的-请参见上面的编辑。由于某些原因,背景仍然是黑色的。好的,我将尝试不同的透明度设置,但是,您发送的代码仍然会使背景变为黑色-请将我所需输出的角点(由于透明度,它们是白色的)与您的命令输出的角点(半透明黑色)进行比较。你知道怎么摆脱它吗?我想我已经得到它了。。。请尝试我答案中的第一个命令。上面只是一个有3张图片的例子,我真的使用了更多的图片,结果并不像我想要的那样。你知道如何像上面解释的那样简单地添加透明层吗?请再看一看。
#!/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