Come fare PHP a ottenere una profondità di un determinato file di immagine PNG?

StackOverflow https://stackoverflow.com/questions/6355692

  •  28-10-2019
  •  | 
  •  

Domanda

Nel codice PHP, dato un percorso dell'immagine .png, ho bisogno di rilevare la profondità di quell'immagine. Come lo posso fare?

Ho provato a usare getImageSize () e leggere il bits come sotto il codice di esempio ma restituisce sempre '8' per l'immagine a 24 bit/32 bit.

Per favore aiuto.

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

Soluzione

Le immagini PNG non sono così supportate per canali e bit di getimagesize(). Tuttavia, puoi usare una piccola funzione per ottenere questi valori: get_png_imageinfo():

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

Ti dà per l'immagine di esempio:

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

Restituisce i canali e i pezzi, così come alcuni si aspetterebbero da loro getimagesize() Accanto ad alcune ulteriori informazioni specifiche per il formato PNG. Il significato dei valori accanto a bit e canali sono documentato nella specifica PNG.

Altri suggerimenti

Dal GetImageSize Documentation:

Bit è il numero di bit per ogni colore.

Quindi 8 bit sono corretti, perché se ci sono tre canali (RGB) con otto bit ciascuno, finisci con un totale di 24 bit. Un ulteriore canale Alpha ti dà altri otto bit, per un totale di 32.

Prova a restituire questo:

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

Questo non funziona per ogni tipo di tipo di immagine, tuttavia. Leggi la documentazione su come funzionano GIF e JPEG.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top