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'];
    }
}
¿Fue útil?

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.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top