2012-11-30 40 views
2

我需要创建一个图像用作翻转背景图像。这是一个分成8个部分的圆形图案。这里的主图像的screengrab(用透明PNG):在Imagemagick中掩盖图像的alpha

main-image

而这里的掩模图像的screengrab。它与主图像的大小相同,并且具有“馅饼”片段的功能,以便遮盖除了正在被覆盖的区域以外的所有区域。

masked-image

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

这里是我用来创建新的模板图像的命令:

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

麻烦的是,创造了扁平化的原始图像的Alpha的黑色背景的新形象:

new-image

我该如何获取Imagemagick以保留原始PNG的透明度?

回答

2

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

该技术是将原始图像(src)合成到相同大小(dst)的完全透明图像上,使用遮罩来限制组合区域(蒙版)。它是-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 
+0

太棒了!测试和完美的作品。很好的解释。谢谢! –

+0

有谁知道如何用RMagick做到这一点?我无法弄清楚。 –

0

我不满意retroj's solution,因为它似乎忽略面膜的灰度。

这一个为我工作:

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通道,并使用-alpha copy完成。