我有一张灰度图像。我想将其转换为透明的 PNG,这样黑色像素(在原始图像中)将变得完全不透明,白色像素将变得完全透明,50% 灰色像素将变得 50% 透明,依此类推,中间的所有阴影也是如此。
我怎样才能实现这个目标?
(是的,我知道这是几乎同样的疑问将灰度阴影转换为 alpha 通道,但我想知道怎么做仅使用命令行工具– 例如 ImageMagick 或 NetPBM。)
这是上述问题的一个示例结果。这个示例是我希望仅使用命令行工具实现的结果。
如果您在支持透明度的查看器中打开此 PNG,您就会明白我的意思。
答案1
好吧。经过大量的谷歌搜索,以及阅读了比我真正关心的更多的 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 选项非常有用。
答案2
使用 ImageMagick 7.0,上述答案不再适用。但您可以使用:
convert source.png -channel rgb -fx '#fff' result.png
也就是说,用空白填充 RGB 通道,并让 alpha 与之前一样。
答案3
使用 imagemagick 7 时,我发现有必要-channel RGB
在 之前指定-fx
,否则您会得到纯黑色图像,如下所示:
convert input.png -alpha copy -channel RGB -fx '#000' out.png
如果您希望黑色不透明、白色透明,则取反很有用:
convert input.png -negate -alpha copy -channel RGB -fx '#000' out.png