使用 ImageMagick 在已经具有透明度的图像上应用渐变蒙版?

Roc*_*uts 6 transparency mask imagemagick alpha-transparency image-masking

我有一个透明的 PNG 图像:

原始.png
原来的

现在我想使用 ImageMagick 将对角渐变应用于其 alpha 通道。我的意思是,它的不透明度保持在左上角,并逐渐淡出到右下角完全透明。像这样:

结果.png
结果

所以基本上我想生成一个渐变,并将其用作图像的蒙版。但图像已经有自己的 Alpha 通道(透明度)。这是我正在尝试的可视化:

手术

(为了可见性,原始和结果显示在棋盘上,但我的意思是实际透明度)

我想我了解如何生成对角渐变(重心渐变命令对此非常有用)。但这会在颜色通道中创建渐变,即彩色或灰度渐变。而我想在Alpha通道上应用渐变。

IM 手册中我了解到-compose CopyOpacity操作员可以用于此目的。然而,这似乎将阿尔法从蒙版复制到我的图像上。我需要在现有的 Alpha 通道上“应用”此渐变颜色,因此基本上我需要将图像的 Alpha 通道乘以渐变图像中的灰度颜色。

执行上面显示的操作的正确 IM 命令行是什么?

Mar*_*ell 5

这是您可以做到的一种方法:

convert tree.png -write MPR:orig -alpha extract \
  \( +clone -colorspace gray -fx "1-j/h" \)     \
  -compose multiply -composite -write alpha.png \
  MPR:orig +swap -compose copyopacity -composite result.png
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

在此输入图像描述

可以-write alpha.png省略 - 它仅显示 alpha 层以用于调试和说明目的。

MPR只是我在使用 Alpha 通道闲逛时保存在内存中的原始图像的临时副本,并在接近尾声时将其带回来。Alpha 通道中的渐变是由 生成的,-fx我首先将颜色空间设为灰色,因此它只需运行一次,而不是运行三次。

如果您预先知道树图像的尺寸,则可以将括号中的部分替换为:

-size WxH gradient:black-white
Run Code Online (Sandbox Code Playgroud)

但我不知道前面的尺寸,并且我不想使用第二个convert命令来获取它们,所以我基本上克隆原始图像的 Alpha 通道以获得正确尺寸的画布并用-fx.