Как PHP получить битовую глубину данного файла изображения PNG? - PullRequest
5 голосов
/ 15 июня 2011

В коде 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 ]

8 голосов
/ 15 июня 2011

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

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

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

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

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

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

6 голосов
/ 21 июня 2011

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 .

...