2

我有两张图片。一种是没有 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 相同的顺序在浏览器中查看:

bg.jpg 白云.jpg 后效.jpg imagemagick.jpg

我尝试了提供的所有模式,但没有一个能产生与 After Effects 相同的结果。

4

3 回答 3

2

如果您显示图像会更容易,但请尝试在命令中添加-compose lightenbefore -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,但看看全尺寸,看看你的船漂浮着什么。那将是SrcAtopSrcOver

convert a.tga b.tga -compose Atop -composite out.tga
于 2015-03-07T08:10:39.210 回答
0

这是一个 Imagemagick 命令,可以满足您的要求:

convert -gravity Center whitecloud.tga -fx "u/max(u.a, 1/255)" bg.tga +swap -composite -fx "u*u.a" comp.tga

这里发生了什么事?

  1. -fx命令 #1:将 whitecloud.tga 从预乘 alpha 转换为“正常”。max()运算符是避免除以零的特殊情况。
  2. +swap命令:制作bg.tga第一张图片,修改whitecloud.tga后的第二张。
  3. -composite这两个常规的、非预乘的图像。
  4. -fx命令 #2:获取结果,并返回预乘 alpha 格式。

这给出了与 After Effects 完全相同的结果。

请注意,正如我所写,它仅适用于 opaque bg.tga。您需要做一些额外的工作来处理透明背景图像。

于 2020-09-21T15:15:05.020 回答
0

如果您想复制 After Effects 结果,那么我相信您想要在 ImageMagick 中执行以下操作 - 使用云作为蒙版将背景图像与白色图像合成:

convert bg.tga \( -clone 0 -fill white -colorize 100 \) whitecloud.tga -compose over -composite cloud_blue.tga

在此处输入图像描述

我发布了一个 JPG 结果,但我的 .tga 结果是一样的。

于 2020-09-21T17:31:11.257 回答