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

zra*_*ajm 16 linux command-line imagemagick ubuntu image-editing

我有一个灰度图像。我想将其转换为透明的 PNG,以便黑色像素(在原始图像中)变得完全不透明,白色像素变得完全透明,50% 灰色像素将变得 50% 透明,等等所有阴影之间。

我怎样才能做到这一点?

(是的,我知道这与Converting grayscale shades into alpha channel几乎相同,但我想知道如何仅使用命令行工具来做到这一点——例如 ImageMagick 或 NetPBM。)

以下是上述问题的示例结果。此示例是我希望仅使用命令行工具实现的结果。

样本

如果您在支持透明度的查看器中打开此 PNG,您就会明白我的意思。

zra*_*ajm 19

哎呀。经过大量的谷歌搜索,并阅读了比我实际关心的更多的 ImageMagick 手册,这就是答案。鉴于您有一个名为 的灰度图像source.png,以下是我的命令。

要使黑色像素透明并保持白色像素不变,请运行以下命令:

 convert source.png -alpha copy -fx '#fff' result.png
Run Code Online (Sandbox Code Playgroud)

要在保持黑色原样的同时使白色像素透明,请使用:

 convert source.png -alpha copy -channel alpha -negate +channel -fx '#000' result.png
Run Code Online (Sandbox Code Playgroud)

让我们更彻底地解释最后一个命令:

  • convert – 是 ImageMagic 命令(多个命令之一)
  • source.png – 灰度源图像。
  • -alpha copy – 将上一个文件的内容复制到 Alpha 通道中。
  • -channel alpha – 指定以下运算符仅应影响 Alpha 通道。
  • -negate– 反转 alpha 通道(会,因为之前-chanel alpha不会影响图像的任何其他部分)。
  • +channel– 指定以下操作符仅应影响颜色通道,不再修改 Alpha 通道。(这是默认设置,因此我们不需要在第一个更简单的示例中提供它。)
  • -fx '#000'– 用黑色像素替换颜色通道内容。(因为+channelalpha 通道不会受到影响)。

包含最后一个-fx选项非常重要,否则生成的图像中的所有半透明像素都将保留颜色。(由于这些像素是半透明的,所以可能并不明显,但最终的结果并不是人们所期望的。)

我发现ImageMagick 选项列表非常有用。

  • 不知道为什么,但在当前版本(ImageMagick 7.0.7-21)中,我只能得到纯白色/黑色图像,没有任何 Alpha 通道。我逐字复制了命令行,仅更改了输入/输出文件路径。也许他们做了一些向后不兼容的更改。 (3认同)