PHP如何获取给定PNG图像文件的位深度?

时间:2011-06-15 09:32:59

标签: php png bit-depth

在PHP代码中,给定.png图像路径,我需要检测该图像的位深度。我怎样才能做到这一点?

我尝试使用getImageSize()并读取bits,如下面的示例代码,但对于24位/ 32位图像,它总是返回'8'。

请帮忙。

class Utils {
    //Ham de lay bits cua image
    public static function getBits($image) {
        $info = getImageSize($image);
        return $info['bits'];
    }
}

2 个答案:

答案 0 :(得分:8)

来自getImageSize documentation

  

位是每种颜色的位数。

所以8位是正确的,因为如果有三个通道(RGB),每个通道有8位,那么最终总共有24位。额外的alpha通道为您提供另外8位,总计32位。

尝试返回此内容:

return $info['channels'] * $info['bits'];

然而,这并不适用于所有类型的图像。阅读有关gif和jpeg如何工作的文档。

答案 1 :(得分:5)

通过getimagesize() 通道不支持PNG图像。但是,您可以使用一个小函数来获取这些值:get_png_imageinfo()

$file = 'Klee_-_Angelus_Novus.png';
$info = get_png_imageinfo($file);
print_r($info);

为您提供示例图片:

Array
(
    [bit-depth] => 4
    [bits] => 4
    [channels] => 1
    [color] => 3
    [color-type] => Indexed-colour
    [compression] => 0
    [filter] => 0
    [height] => 185
    [interface] => 0
    [width] => 291
)

它会返回通道和位,就像有些人希望它们来自getimagesize()旁边的一些特定于PNG格式的信息。位和通道旁边的值的含义是documented in the PNG specification