5

在 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'];
    }
}
4

2 回答 2

8

getImageSize 文档

bits 是每种颜色的位数。

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

尝试返回这个:

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

但是,这不适用于每种图像类型。阅读有关 gif 和 jpeg 如何工作的文档。

于 2011-06-15T09:51:28.193 回答
6

通道不支持 PNGgetimagesize()图像。但是,您可以使用一个小函数来获取这些值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 格式的更多信息旁边一样。位和通道旁边的值的含义记录在 PNG 规范中。

于 2011-06-21T17:08:18.397 回答