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


14

我有一个灰度图像。我想将其转换为透明的PNG,以便黑色像素(在原始图像中)变得完全不透明,白色像素变得完全透明,50%的灰色像素将变成50%的透明性,依此类推在两者之间。

我该如何实现?

(是的,我知道这几乎将灰度阴影转换为Alpha通道一样,但是我想知道如何仅使用命令行工具(例如ImageMagick或NetPBM)来执行此操作。)

这是上述问题的样本结果。该示例是我仅使用命令行工具即可实现的结果。

样品

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

Answers:


18

哎呀 经过大量的搜索,并阅读了我实际上并不关心的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选项列表非常有用。


当我使用第二个命令使我的图像比实际的灰度图像更暗时,可以很好地解释实现我的目标。实际上,我的目标是实现与灰度相同的色调(除了透明度之外),这是预期的。任何想法实现这一目标?
Hardik Patel 2014年

这非常有用,谢谢!:)很高兴我没有弄明白为自己
萨姆·沃特金斯

我爱你!!!!!!
mescarra'6

这些评论可能最好通过以下渠道发送给我:okcupid.com/profile/zrajm :)
zrajm

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

0

使用ImageMagick 7.0后,以上答案不再存在。但是您可以使用:

转换source.png -channel rgb -fx'#fff'result.png

再次,用空白填充RGB通道,然后像以前一样设置alpha。


我怀疑您错过了“ -alpha副本” :)
克里斯(Chris)

0

对于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
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.