仅将颜色渐变应用于Image Magick中图像的非透明区域

Applying a colour gradient only to the non transparent area of an image in Image Magick

我想对图像应用彩色渐变,同时保持原始图像的透明度,以便我可以在地图上显示图像,original image to this output image(但没有地图)

我的理解是,我需要使用 +clone -alpha extract 提取图像的 alpha 通道,然后对其应用渐变,然后在原始图像之上合成渐变。

目前我已经尝试采用其他几个 Whosebug 答案并设法输出提取的 alpha 通道但无法使渐变工作。

这是我目前拥有的:

convert normal.png -write MPR:orig -alpha extract
\( +clone -define gradient:"rgba(0,126,15,5)"-"rgba(255,0,0,5)" \) \
-compose multiply -composite -write alpha.png \
MPR:orig +swap -compose copyopacity -composite result.png

也许这就是您在 Imagemagick 中想要的。请注意,在使用 gradient: 时,您必须为其指定 -size WxH。所以我使用 -sparse-color 重心从输入的克隆中形成梯度。

输入:

convert normal.png \
\( +clone -alpha extract -write MPR:alpha +delete \) \
\( -clone 0 -alpha off -sparse-color barycentric "0,0 rgb(0,126,15)  %w,%h rgb(255,0,0)  %w,0 rgb(255,0,0)" \) \
-compose multiply -composite \
MPR:alpha -alpha off -compose copyopacity -composite result.png

结果:

Line 1: Read the input
Line 2: Copy the input, extract the alpha and save to mpr:, then delete the alpha (not the mpr:)
Line 3: Copy the input and create a gradient for over that image
Line 4: Composite the gradient by multiplication with the input
Line 5: Read back the mpr:alpha and put it into the alpha channel of the input in place of the original alpha channel

这是一个几乎可以完成您描述的操作的命令...

magick input.png -size %wx%h -define gradient:angle=90 ^
   gradient:green-red -channel rgb -compose multiply -composite result.png

通过在合成操作之前指定-channel rgb,它应该只影响颜色通道并保持透明度。 运行 在 fmw42 的输入图像上使用 ImageMagick v7.1.0-24 在 Windows 上执行的命令的输出(对于 *nix OS 更改continued-line 插入符号“^”到反斜杠“\”)...

如果您正在执行其他操作,您可能需要在 -composite 之后和继续命令之前使用 +channel 重置通道并使用 -compose over 重置撰写方法。