2

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

主图

这是面具图像的屏幕截图。它与主图像大小相同,并具有“馅饼”部分,以掩盖除被悬停的扇区之外的所有部分。

蒙面图像

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

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

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

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

新图片

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

4

2 回答 2

4

您需要蒙面合成来执行此操作。 http://imagemagick.org/Usage/compose/#mask

该技术是将原始图像(src)合成到相同大小的完全透明图像(dst)上,使用蒙版来限制合成区域(蒙版)。它是-composite运算符的一种特殊情况,涉及 3 张图像,而不是像其他 compose 方法那样使用 2 张图像。您没有-compose为此指定任何模式。

获得此技术所需的完全透明 dst 的一种快速方法是克隆 src 图像并将其 alpha 通道清零,然后交换 src 和 dst 的顺序,以便它们处于正确的顺序以进行-composite操作:

convert main.png -alpha on \( +clone -channel a -fx 0 \) +swap mask.png -composite out.png
于 2014-03-14T23:40:07.697 回答
1

我对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 通道相乘。这里的诀窍是将灰度蒙版转换为 alpha 通道,这是用-alpha copy.

于 2017-02-21T03:44:14.233 回答