【问题标题】:Apply gradient mask on image that already has transparency with ImageMagick?使用 ImageMagick 在已经具有透明度的图像上应用渐变蒙版?
【发布时间】:2017-03-15 20:15:00
【问题描述】:

我有一个透明的 PNG 图像:

original.png

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

result.png

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

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

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

IM manual 我了解到-compose CopyOpacity 运算符可用于此目的。但是,这似乎将蒙版中的 alpha 复制到我的图像上。我需要在我现有的 Alpha 通道上“应用”这种渐变颜色,所以基本上我需要将图像的 Alpha 通道乘以来自渐变图像的灰度颜色。

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

【问题讨论】:

    标签: imagemagick transparency mask alpha-transparency image-masking


    【解决方案1】:

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

    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
    

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

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

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

    -size WxH gradient:black-white
    

    但我不知道前面的尺寸,我不希望第二个convert 命令来获取它们,所以我基本上克隆原始图像的 alpha 通道以获得合适大小的画布并用-fx.

    【讨论】:

    • 谢谢,MPR:-fx 的用法对我来说是新的!受您的解决方案的启发,我现在这样做:convert tree.png \( +clone -alpha extract \( +clone -fx "1-(i+j*w/h)/(2*w)" \) -compose multiply -composite \) -compose CopyOpacity -composite result.png 其中-fx "1-(i+j*w/h)/(2*w)" 创建对角线渐变
    猜你喜欢
    • 2018-02-16
    • 2012-01-12
    • 1970-01-01
    • 2014-06-23
    • 1970-01-01
    • 2013-02-19
    • 2012-07-20
    • 2019-10-11
    • 2011-03-20
    相关资源
    最近更新 更多