如何使用ImageMagick获取8位灰度和Alpha通道深度?

4

我正在尝试使用ImageMagick创建一个透明的PNG图片。无论我如何使用"convert"命令,当我使用identify命令查看该图片时,它总是显示:

Depth: 8/1 bit
Channel depth:
  gray: 1 bit
  alpha: 1 bit

当我查看网上找到的透明PNG图片时,它会显示:
Depth: 8 bit
  gray: 8 bit
  alpha: 8 bit

这似乎很重要的原因是我使用创建的透明PNG作为FFMPEG中的水印。当我使用ImageMagick创建的PNG时,视频会出现50%灰度不透明度的情况。然而,当我使用在网上找到的PNG时,它可以正常工作。根据identify,唯一的区别是深度。

以下是我尝试过的一些方法:

convert -size 640x480 xc:none -depth 8 test.png
convert -size 640x480 xc:transparent -depth 8 test.png

我注意到的另一件事是,即使identify说它是RGB格式,Gimp也显示ImageMagick图像的颜色空间为灰度。在网上找到的可用图像在Gimp和identify中都显示为RGB颜色空间。有什么想法吗?
1个回答

1

首先,关于ImageMagick的“灰度”。

实际上,ImageMagick并没有这样的颜色空间。它只是在RGB空间内伪造了它,通过将R(红色)、G(绿色)和B(蓝色)通道中的所有值设置为相同的值。(如果三个值不相同,则图像不再是灰度。)


其次,关于您(看起来)未成功创建带有8位Alpha通道的图像的尝试。

这是因为您没有在透明区域中放入任何不同的“颜色”值--它们都是纯粹的(完全透明)。

请尝试使用以下命令,将内置的ImageMagick logo:图片进行转换:

convert              \
   logo:             \
  -bordercolor white \
  -background black  \
  +polaroid          \
   polaroid.png

输出图像:

Polaroid effect by ImageMagick

将愉快地显示您所需的8位阿尔法值:

identify -verbose polaroid.png | grep -A 4 "Channel depth:"

  Channel depth:
    red: 8-bit
    green: 8-bit
    blue: 8-bit
    alpha: 8-bit

或者尝试将内置的rose:图像转换为半透明图像:

convert  rose:  -alpha set  -channel A  -fx '0.5'  semitransp-rose.png

相同的结果:alpha通道的8位深度。

要修改您原始命令中的一个:

convert  -size 640x480  xc:none  -depth 8  -channel A -fx 0.5  test.png

如果你使用identify -verbose命令查看生成的图像,你会发现R、G和B通道的深度只有1位,而A通道的深度是8位。这是因为它实际上使用了一个与0不同的值,而其他通道都是0


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接