在Imagemagick中掩盖图像的alpha通道

4
我需要创建一张用作rollover背景图的图片。它是一个被分成8个部分的圆形图案。这是主要图片的截图(png格式,带透明度): main-image 这是遮罩图片的截图。它与主要图片大小相同,并具有“饼”形状的部分,以便遮盖除了悬停部分之外的所有部分。 masked-image 我包含了截图,因为我认为答案应该很简单(当你知道答案时,所有答案都很简单!),所以我将节省带宽,但如果有用的话,我可以上传原始文件。
这是我用来创建新的遮罩图像的命令:
convert main.png \( mask.png -colorspace gray -alpha off \) \
-compose copy-opacity -composite new.png

问题在于新创建的图像已经将原始图像的Alpha通道压平为黑色背景:

new-image

如何让Imagemagick保留原始PNG文件的透明度?

2个回答

5
您想要使用遮罩合成来达到此目的。具体操作请参考http://imagemagick.org/Usage/compose/#mask
该技术是将原始图像(src)与完全透明的同等大小图像(dst)结合使用遮罩来限制合成区域(mask)。这是-composite运算符的特殊情况,涉及3个图像,而不是像其他合成方法一样涉及2个图像。在此情况下,您不需要指定任何-compose模式。
快速获取所需的全透明dst的方法是克隆src图像并将其alpha通道清零,然后交换src和dst的顺序,以便它们按照正确的顺序进行-composite操作。
convert main.png -alpha on \( +clone -channel a -fx 0 \) +swap mask.png -composite out.png

太棒了!测试通过,完美无缺。解释也很好。谢谢! - wayfarer_boy
有人知道如何使用RMagick实现这个吗?我搞不明白。 - John Pollard

2

我对retroj的解决方案不满意,因为它似乎忽略了蒙版的灰度。

这个解决方案对我有用:

composite -compose Dst_In \( mask.png -alpha copy \) main.png -alpha Set PNG32:result.png

或者

convert -compose Dst_In \( mask.png -alpha copy \) main.png -alpha Set -composite PNG32:result.png

Dst_In 方法可以将两张图片的透明度通道相乘。这里的技巧是将灰度掩模转换为透明度通道,使用-alpha copy 命令可以实现。


如果掩码使用RGB而不是Alpha通道来表示掩码的正部分,会怎样呢? 编辑:我在您提供的链接中找到了答案,在“编辑图像掩码”一节下。 - pete

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接