使用ImageMagick合成预乘图像

使用ImageMagick合成预乘图像,imagemagick,premultiplied-alpha,Imagemagick,Premultiplied Alpha,我有两张照片。一个是没有阿尔法的背景。另一片是白云。云图像的alpha与黑色预乘。当我合成它们时,白色的云彩中有黑色,所以它看起来是灰色的,而不是白色的。我正在做: convert -gravity Center bg.tga whitecloud.tga -composite comp.tga 有没有办法在ImageMagick中合成预乘图像,或者图像必须是非预乘图像?我可以使用ImageMagick使预乘图像非预乘吗 更新: 好的,以下是TGA的图片供下载: 并按照与jpgs相同的顺序

我有两张照片。一个是没有阿尔法的背景。另一片是白云。云图像的alpha与黑色预乘。当我合成它们时,白色的云彩中有黑色,所以它看起来是灰色的,而不是白色的。我正在做:

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中实现预乘法,因此,如果您了解更多信息,并希望稍后添加注释或链接,则可以解决一些问题。