Как 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.
биты - это количество бит для каждого цвета.
Итак, 8 бит - это правильно, потому что если есть три канала (RGB) с восемью битами в каждом, вы получите всего 24 бита. Дополнительный альфа-канал дает вам еще восемь битов, всего 32.
Попробуйте вернуть это:
return $info['channels'] * $info['bits'];
Однако это не работает для всех типов изображений. Прочитайте документацию о том, как работают GIF и JPEG.