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

Nam*_* VU 5 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'];
    }
}
Run Code Online (Sandbox Code Playgroud)

Her*_*eon 8

getImageSize文档:

bits是每种颜色的位数.

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

尝试返回此:

return $info['channels'] * $info['bits'];
Run Code Online (Sandbox Code Playgroud)

但是,这并不适用于各种图像类型.阅读有关gif和jpegs如何工作的文档.

  • 是啊.它不适用于PNG图像.所以PHP无法处理PNG位深度问题,可以吗?我真的觉得很奇怪,因为PHP正在快速增长 (2认同)

hak*_*kre 6

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

$file = 'Klee_-_Angelus_Novus.png';
$info = get_png_imageinfo($file);
print_r($info);
Run Code Online (Sandbox Code Playgroud)

为您提供示例图片:

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

它返回通道和位,就像有些人希望它们可以从getimagesize()PNG格式特有的更多信息旁边看到的那样.PNG规范记录了位和通道旁边的值的含义.