我有两张照片。一个是没有alpha的背景。另一种是白云。云图像的alpha预乘黑色。当我合成它们时,白云中有黑色,因此它看起来像灰色而不是白色。我在做:
convert -gravity Center bg.tga whitecloud.tga -composite comp.tga
有没有办法在ImageMagick中复合预乘图像,还是图像必须是非预乘的?我可以使用ImageMagick进行非预乘的预乘图像吗?
更新
好的,这里的图像是TGA下载:
http://acatysmoof.com/posting/problems/imagemagick/premultiplication/bg.tga http://acatysmoof.com/posting/problems/imagemagick/premultiplication/whitecloud.tga http://acatysmoof.com/posting/problems/imagemagick/premultiplication/aftereffects.tga http://acatysmoof.com/posting/problems/imagemagick/premultiplication/imagemagick.tga
并按照与jpgs相同的顺序在浏览器中查看:
我尝试了所有提供的模式,但没有一个创建与After Effects相同的结果。
答案 0 :(得分:2)
如果您展示图片会更容易,但请尝试在-compose lighten
之前添加-composite
,如下所示:
convert a.tga b.tga -compose lighten -composite out.tga
基本上,这将使ImageMagick在每个点选择两个图像的较亮像素。
如果不起作用,请尝试其他混合模式
for b in $(identify -list compose); do
convert -label "$b" bg.tga whitecloud.tga -compose $b -composite miff:-
done | montage - -tile 5x out.png
我有点想Atop
,Dissolve
,SrcAtop
和SrcOver
可能是你的朋友,但看看全尺寸,看看你的船浮起来了。那将是
convert a.tga b.tga -compose Atop -composite out.tga
答案 1 :(得分:0)
这是一个Imagemagick命令,可以执行您想要的操作:
convert -gravity Center whitecloud.tga -fx "u/max(u.a, 1/255)" bg.tga +swap -composite -fx "u*u.a" comp.tga
这是怎么回事?
-fx
命令#1:将whitecloud.tga从预乘的alpha转换为“ normal”。 max()
运算符是避免被零除的特例。+swap
命令:将bg.tga
作为第一张图片,将修订后的whitecloud.tga
作为第二张图片。-composite
这两个常规的非预乘图像。-fx
命令#2:获取结果,然后返回预乘的alpha格式。这提供与After Effects完全相同的结果。
请注意,如我所写,它仅适用于不透明的bg.tga
。您需要做一些额外的工作来处理透明的背景图像。
答案 2 :(得分:0)