在unix shell中将灰度图像转换为alpha通道图像

在unix shell中将灰度图像转换为alpha通道图像

我有一张灰度图像。我想将其转换为透明的 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'– 用黑色像素替换颜色通道内容。(因为+channelalpha 通道不会受到影响)。

包含最后一个-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

相关内容