getimagesize

(PHP 3, PHP 4 , PHP 5)

getimagesize -- Retourne la taille d'une image

Description

array getimagesize ( string filename [, array &imageinfo] )

getimagesize() va déterminer la taille des images de type GIF, JPG, PNG, SWF, SWC, PSD, TIFF, BMP, IFF, JP2, JPX, JB2, JPC, XBM, or WBMP et en retourner les dimensions, le type d'image et une chaîne type height/width à placer dans une balise HTML <IMG> normale.

Si l'accès à filename est impossible ou bien si filename n'est pas une image valide, getimagesize() retournera FALSE et générera une erreur de niveau E_WARNING.

Note : Le support de JPC, JP2, JPX, JB2, XBM et WBMP a été ajouté en PHP 4.3.2. Le support de SWC, lui, en PHP 4.3.0 et le support de TIFF en PHP 4.2.0.

Note : Le support de JPEG 2000 a été ajouté en PHP 4.3.2. Notez que JPC et JP2 sont capables d'avoir des composants avec une profondeur de bit différente. Dans ce cas, la valeur de "bits" est la plus grande profondeur de bit rencontrée. De même, les fichiers JP2 disposent du support de multiple JPEG 2000 codestreams. Dans ce cas, getimagesize() retourne les valeurs pour le premier codestream rencontré à la racine du fichier.

Note : La fonction getimagesize() ne requiert pas la bibliothèque GD.

getimagesize() retourne un tableau de 4 éléments. L'index 0 contient la longueur. L'index 1 contient la largeur. L'index 2 contient le type de l'image : 1 = GIF, 2 = JPG, 3 = PNG, 4 = SWF, 5 = PSD, 6 = BMP, 7 = TIFF (Ordre des octets Intel), 8 = TIFF (Ordre des octets Motorola), 9 = JPC, 10 = JP2, 11 = JPX, 12 = JB2, 13 = SWC, 14 = IFF. Ces valeurs correspondent aux constantes IMAGETYPE qui ont été ajoutées en PHP 4.3. L'index 3 contient la chaîne à placer dans les balises IMG : height="xxx" width="yyy".

Exemple 1. Exemple avec getimagesize()

<?php
list($width, $height, $type, $attr) = getimagesize("img/flag.jpg");
echo
"<img src=\"img/flag.jpg\" alt=\"Exemple de getimagesize()\" $attr />";
?>

Le support des URL a été ajouté en PHP 4.0.5.

Exemple 2. getimagesize() avec une URL

<?php
$size
= getimagesize("http://www.example.com/gifs/logo.gif");
// Si le nom du fichier comporte des espaces, encodez-le !
$size = getimagesize("http://www.example.com/gifs/lo%20go.gif");
?>

Avec les images JPG, deux en-têtes supplémentaires sont retournés : channels et bits. channels vaudra 3 avec les images RGB, et 4 avec les images CMYK. bits est le nombre de bits pour chaque couleur.

Depuis PHP 4.3, bits et channels sont présents pour tous types d'images. Cependant, la présence de ces valeurs peut mener à la confusion. Par exemple, une image GIF utilise toujours trois canaux par pixel, mais le nombre de bits par pixel ne peut être calculé dans le cas d'une image animée GIF ayant une table de couleur globale.

Certains formats peuvent ne contenir aucune image, ou bien plusieurs. Dans ces cas-là, getimagesize() peut ne pas être capable de déterminer correctement la taille de l'image. getimagesize() retourne alors zéro comme taille de hauteur et largeur.

Depuis PHP 4.3, getimagesize() retourne aussi un paramètre additionnel, mime, qui correspond au type MIME d'une image. Cette information peut être utilisée pour envoyer l'en-tête HTTP correct.

Exemple 3. getimagesize() et types MIME

<?php
$size
= getimagesize($filename);
$fp = fopen($filename, "rb");
if (
$size && $fp) {
  
header("Content-type: {$size['mime']}");
  
fpassthru($fp);
  exit;
} else {
  
// error
}
?>

Le paramètre optionnel imageinfo permet d'extraire des informations supplémentaires du fichier image. Actuellement, cette option va retourner différents marqueurs JPG APP dans un tableau associatif. Certains programmes utilisent ces marqueur APP pour préciser les informations dans les balises HTML. Un marqueur commun est le marqueur APP13, décrit à http://www.iptc.org/. Vous pouvez utiliser la fonction iptcparse() pour analyser ce marqueur, et obtenir des informations intelligibles.

Exemple 4. getimagesize() qui retourne IPTC

<?php
$size
= getimagesize("testimg.jpg", $info);
if (isset(
$info["APP13"])) {
  
$iptc = iptcparse($info["APP13"]);
  
var_dump($iptc);
}
?>

Voir aussi image_type_to_mime_type(), exif_imagetype(), exif_read_data() et exif_thumbnail().