Как PHP получить битовую глубину данного файла изображения PNG?

В коде PHP, учитывая путь к изображению в формате.png, мне нужно определить битовую глубину этого изображения. Как я могу это сделать?

Я пытался использовать getImageSize() и читать bits как приведенный ниже пример кода, но он всегда возвращает "8" для 24-битного /32-битного изображения.

Пожалуйста помоги.

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

2 ответа

Решение

Изображения PNG не поддерживаются для каналов и битов getimagesize(), Однако вы можете использовать небольшую функцию для получения этих значений: 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.

Из документации getImageSize:

биты - это количество бит для каждого цвета.

Итак, 8 бит - это правильно, потому что если есть три канала (RGB) с восемью битами в каждом, вы получите всего 24 бита. Дополнительный альфа-канал дает вам еще восемь битов, всего 32.

Попробуйте вернуть это:

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

Однако это не работает для всех типов изображений. Прочитайте документацию о том, как работают GIF и JPEG.

Другие вопросы по тегам