2011-06-14 133 views
4

我试图用ImageMagick创建一个透明的PNG。无论咒语“转换”,当我使用标识对图像,它总是说:如何用ImageMagick获得8位灰度和alpha通道深度?

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

当我看到在网络上发现了一个透明的PNG,它说:

Depth: 8 bit 
    gray: 8 bit 
    alpha: 8 bit 

这似乎很重要的原因是我使用我在FFMPEG中创建的透明PNG作为水印。当我使用ImageMagick创建的PNG时,它会导致视频看起来像有50%的灰色不透明。但是,当我使用我在网上找到的PNG时,它工作正常。根据确定,唯一的区别是深度。

这里有一些我已经试过的东西:

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

我注意到的另一件事是瘸子显示ImageMagick的图像具有灰度的色彩空间,即使识别说,这是RGB。我在网络上找到的图像显示了Gimp中RGB的色彩空间并能够识别。

任何想法?

回答

1

首先,关于ImageMagick的'灰度'。

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


其次,关于您的(表面上)不成功的尝试以产生具有8位的alpha通道的图像。

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

试试这个命令其将内置ImageMagick的logo:图片:

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

输出图像:

Polaroid effect by ImageMagick

将愉快地显示您所需的8位alpha值:

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

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

或试着合作nvert内置rose:图像半透明之一:

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

相同的结果:8比特深度为alpha通道。

要修改原始命令之一:

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

如果identify -verbose所得到的图像,你会发现在R,G和B通道是仅1比特深度,而A是信道8位。这是因为它实际上使用的值不同于0,而其他通道都是0