在Imagemagick中屏蔽图像的alpha

时间:2012-11-30 16:17:09

标签: imagemagick imagemagick-convert

我需要创建一个用作翻转背景图像的图像。这是一个圆形图案,分为8个部分。这是主图像的屏幕抓图(png具有透明度):

main-image

这是屏幕图像的屏幕抓图。它与主图像大小相同,并以“馅饼”为特色,以掩盖除了悬停在其上的扇区之外的所有部分。

masked-image

我包括screengrabs,因为我相信答案应该非常简单(当你知道它们时,并不是所有的答案都很简单吗?!)所以我会节省带宽,但如果它有用,我可以上传原始文件。

这是我用来创建新蒙版图像的命令:

convert main.png \( mask.png -colorspace gray -alpha off \) \
-compose copy-opacity -composite new.png

问题是创建的新图像将原始图像的alpha变为黑色背景:

new-image

如何让Imagemagick保留原始png的透明度?

2 个答案:

答案 0 :(得分:2)

你想要蒙面合成来做到这一点。 http://imagemagick.org/Usage/compose/#mask

该技术是将原始图像(src)组合到相同大小(dst)的完全透明图像上,使用遮罩来限制构图区域(遮罩)。这是-composite运算符的一个特例,涉及3个图像,而不是其他2个组合方法。您没有为此指定任何-compose模式。

获得此技术所需的完全透明dst的一种快速方法是克隆src图像并将其alpha通道清零,然后交换src和dst的顺序,使它们的顺序正确{ {1}}要遵循的操作:

-composite

答案 1 :(得分:0)

我对Dst_In不满意,因为它似乎忽略了蒙版的灰度。

这个对我有用:

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

-alpha copy方法将两个图像的Alpha通道相乘。这里的技巧是将灰度掩码转换为alpha通道,使用here完成。