我有一个灰度图像。我想将其转换为透明的PNG,以便黑色像素(在原始图像中)变得完全不透明,白色像素变得完全透明,50%的灰色像素将变成50%的透明性,依此类推在两者之间。
我该如何实现?
(是的,我知道这几乎与将灰度阴影转换为Alpha通道一样,但是我想知道如何仅使用命令行工具(例如ImageMagick或NetPBM)来执行此操作。)
这是上述问题的样本结果。该示例是我仅使用命令行工具即可实现的结果。
如果您在支持透明性的查看器中打开此PNG,您将会明白我的意思。
我有一个灰度图像。我想将其转换为透明的PNG,以便黑色像素(在原始图像中)变得完全不透明,白色像素变得完全透明,50%的灰色像素将变成50%的透明性,依此类推在两者之间。
我该如何实现?
(是的,我知道这几乎与将灰度阴影转换为Alpha通道一样,但是我想知道如何仅使用命令行工具(例如ImageMagick或NetPBM)来执行此操作。)
这是上述问题的样本结果。该示例是我仅使用命令行工具即可实现的结果。
如果您在支持透明性的查看器中打开此PNG,您将会明白我的意思。
Answers:
哎呀 经过大量的搜索,并阅读了我实际上并不关心的ImageMagick手册,这就是答案。假设您有一个称为的灰度图像source.png
,这是我的命令。
要使黑色像素透明并保持白色像素不变,请运行以下命令:
convert source.png -alpha copy -fx '#fff' result.png
要使白色像素透明,同时保持黑色不变,请使用:
convert source.png -alpha copy -channel alpha -negate +channel -fx '#000' result.png
让我们更彻底地解释最后一个命令:
convert
–是ImageMagic命令(多个命令之一)source.png
–灰度源图像。-alpha copy
–将上一个文件的内容复制到alpha通道中。-channel alpha
–指定以下运算符仅应影响Alpha通道。-negate
–反转Alpha通道(由于先前的通道-chanel alpha
不会影响图像的其他任何部分)。+channel
–指定仅以下运算符应会影响颜色通道,并且不再修改Alpha通道。(这是默认设置,因此我们不需要在第一个简单的示例中提供它。)-fx '#000'
–用黑色像素替换彩色通道的内容。(因为+channel
alpha通道不会受到影响)。包括该最终-fx
选项非常重要,否则生成的图像中的所有半透明像素将保留颜色。(由于这些像素是半透明的,因此可能并不明显,但是最终结果不是人们所期望的。)
我发现ImageMagick选项列表非常有用。
使用ImageMagick 7.0后,以上答案不再存在。但是您可以使用:
转换source.png -channel rgb -fx'#fff'result.png
再次,用空白填充RGB通道,然后像以前一样设置alpha。