使用ImageMagick合成预乘图像
我有两张照片。一个是没有阿尔法的背景。另一片是白云。云图像的alpha与黑色预乘。当我合成它们时,白色的云彩中有黑色,所以它看起来是灰色的,而不是白色的。我正在做:使用ImageMagick合成预乘图像,imagemagick,premultiplied-alpha,Imagemagick,Premultiplied Alpha,我有两张照片。一个是没有阿尔法的背景。另一片是白云。云图像的alpha与黑色预乘。当我合成它们时,白色的云彩中有黑色,所以它看起来是灰色的,而不是白色的。我正在做: convert -gravity Center bg.tga whitecloud.tga -composite comp.tga 有没有办法在ImageMagick中合成预乘图像,或者图像必须是非预乘图像?我可以使用ImageMagick使预乘图像非预乘吗 更新: 好的,以下是TGA的图片供下载: 并按照与jpgs相同的顺序
convert -gravity Center bg.tga whitecloud.tga -composite comp.tga
有没有办法在ImageMagick中合成预乘图像,或者图像必须是非预乘图像?我可以使用ImageMagick使预乘图像非预乘吗
更新:好的,以下是TGA的图片供下载: 并按照与jpgs相同的顺序在浏览器中查看:
我尝试了提供的所有模式,但没有一种模式能产生与后效相同的效果。如果显示图像会更容易,但请尝试在命令中的
-composite
之前添加-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
我在想,top
,dissole
,SrcAtop
和SrcOver
可能是你的朋友,但看看你的船是怎么漂浮的。那就是
convert a.tga b.tga -compose Atop -composite out.tga
下面是一个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转换为“正常”。max()
+swap
命令:将bg.tga
作为第一个图像,将修改后的whitecloud.tga
作为第二个图像-合成这两个常规的非预乘图像
-fx
命令#2:获取结果,并返回到预乘alpha格式注意,正如我所写的,它只适用于不透明的
bg.tga
。你需要做一些额外的工作来处理透明的背景图像。如果你想复制后效效果,那么我相信你想在ImageMagick中做的是——使用云作为遮罩将背景图像与白色图像合成:
convert bg.tga \( -clone 0 -fill white -colorize 100 \) whitecloud.tga -compose over -composite cloud_blue.tga
我发布了一个JPG结果,但我的.tga结果是一样的。没有,但我真的很感谢您的努力。混合模式与预乘无关。在发生预乘之前,RGB是不正确的,并且没有混合模式可以解决这一问题。我做了一些研究,Imagemagick和Graphicsmagick都不支持预乘alpha。这真的让人恼火,因为大多数专业的2D和3D软件默认都会生成预乘图像。所有专业合成软件包也都采用预乘阿尔法,包括后效、融合、核武器、和谐等。Imagemagick不提供这一功能。为什么?我去问问他们的名单。好的,谢谢你的反馈。如果有一个公式可以执行/撤消预乘法,则可以使用
-fx
操作符或模块在ImageMagick中实现预乘法,因此,如果您了解更多信息,并希望稍后添加注释或链接,则可以解决一些问题。