¿Cómo obtener php la profundidad de bit de un archivo de imagen PNG dado?
Pregunta
En el código PHP, dada una ruta de imagen .png, necesito detectar la profundidad de bit de esa imagen. ¿Cómo puedo hacer eso?
He intentado usar getImagesize () y leer el bits
como se muestra a continuación código de muestra, pero siempre devuelve '8' para una imagen de 24 bits/32 bits.
Por favor ayuda.
class Utils {
//Ham de lay bits cua image
public static function getBits($image) {
$info = getImageSize($image);
return $info['bits'];
}
}
Solución
Las imágenes de PNG no son compatibles con canales y brocas por getimagesize()
. Sin embargo, puede usar una pequeña función para obtener estos valores: get_png_imageinfo()
:
$file = 'Klee_-_Angelus_Novus.png';
$info = get_png_imageinfo($file);
print_r($info);
Te da para la imagen de ejemplo:
Array
(
[bit-depth] => 4
[bits] => 4
[channels] => 1
[color] => 3
[color-type] => Indexed-colour
[compression] => 0
[filter] => 0
[height] => 185
[interface] => 0
[width] => 291
)
Devuelve los canales y bits, así como algunos, los esperaría de getimagesize()
junto a una información más específica para el formato PNG. El significado de los valores junto a bits y canales son documentado en la especificación de PNG.
Otros consejos
Desde el GetImageSize Documentation:
Bits es el número de bits para cada color.
Entonces, 8 bits es correcto, porque si hay tres canales (RGB) con ocho bits cada uno, termina con un total de 24 bits. Un canal alfa adicional le da otros ocho bits, por un total de 32.
Intenta devolver esto:
return $info['channels'] * $info['bits'];
Sin embargo, esto no funciona para todo tipo de tipo de imagen. Lea la documentación de cómo funcionan los GIF y los JPEG.