4 votes

Comment obtenir en PHP la profondeur de bits d'un fichier image PNG donné ?

Dans le code PHP, étant donné un chemin d'accès à une image .png, je dois détecter la profondeur de bits de cette image. Comment puis-je faire cela ?

J'ai essayé d'utiliser la fonction getImageSize() et de lire la valeur de l'image. bits comme dans l'exemple de code ci-dessous, mais il renvoie toujours '8' pour les images de 24 bits/32 bits.

Merci de m'aider.

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

7voto

majestzim Points 349

A partir de la documentation getImageSize :

bits est le nombre de bits pour chaque couleur.

Le chiffre de 8 bits est donc correct, car s'il y a trois canaux (RVB) avec huit bits chacun, on obtient un total de 24 bits. Un canal alpha supplémentaire vous donne huit bits de plus, soit un total de 32.

Essayez de renvoyer ceci :

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

Cela ne fonctionne cependant pas pour tous les types d'images. Lisez la documentation pour savoir comment fonctionnent les gifs et les jpegs.

7voto

hakre Points 102271

Les images PNG ne sont pas prises en charge par canaux y bits par getimagesize() . Cependant, vous pouvez utiliser une petite fonction pour obtenir ces valeurs : get_png_imageinfo() :

$file = 'Klee_-_Angelus_Novus.png';
$info = get_png_imageinfo($file);
print_r($info);

Vous donne l'exemple de l'image :

Array
(
    [bit-depth] => 4
    [bits] => 4
    [channels] => 1
    [color] => 3
    [color-type] => Indexed-colour
    [compression] => 0
    [filter] => 0
    [height] => 185
    [interface] => 0
    [width] => 291
)

Il renvoie les canaux et les bits comme on s'y attendrait de la part de getimagesize() pour plus d'informations sur le format PNG. La signification des valeurs en regard des bits et des canaux est la suivante documenté dans la spécification PNG .

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X