II. On commence !▲
II-1. Première image▲
Prenez votre éditeur de fichier favori et allons-y ! Si vous n'avez pas d'éditeur, voici un lien intéressant d'un comparatif des différents éditeurs. Créez le fichier 01_first_image.php. Il existe plusieurs fonctions pour créer une image, cela dépend de ce que vous voulez faire. Nous n'allons en voir que deux. La première est imagecreate. Cette fonction crée une image à palette. Pour vous donner une idée, une image à palette est comme une image gif : elle est limitée à un maximum de 255 couleurs avec un canal alpha (transparence). C'est donc une image plus légère, mais moins belle. Nous n'allons pas nous intéresser à cette fonction, car elle produit des images pas très jolies. Nous allons donc voir imagecreatetruecolor qui crée une image en vraies couleurs (24 bits). Pour utiliser cette fonction, c'est simple.
<?php
$x
=
50
;
//largeur de mon image en PIXELS uniquement !
$y
=
100
;
//hauteur de mon image en PIXELS uniquement !
/* on crée l'image en vraies couleurs avec une largeur de 50 pixels et une hauteur de 100 pixels */
$image
=
imagecreatetruecolor($x
,
$y
);
imagepng($image
);
//renvoie une image sous format png
?>
Il est obligatoire d'attribuer le résultat de imagecreatetruecolor à une variable, sans quoi on ne pourra plus accéder à l'image. J'utilise ici la fonction imagepng que nous n'avons pas encore vue : elle sert à afficher une image au format png. Maintenant, appelez votre fichier dans votre navigateur.
II-2. Zut, on a oublié quelque chose ! Les headers▲
Mais que se passe-t-il ? Aucune image n'est affichée, mais seulement un texte bizarre. C'est normal. C'est une erreur que l'on rencontre souvent quand on commence avec GD, je voulais vous la faire voir. Votre navigateur ne sait pas que le fichier qu'il doit afficher est une image au format png. Il faut lui dire en utilisant la fonction header de PHP. On a plusieurs headers (ou en-têtes) disponibles pour les images.
header("
Content-type: image/png
"
);
//format png
header("
Content-type: image/jpeg
"
);
//format jpg
header("
Content-type: image/gif
"
);
//format gif
header("
Content-type: image/psd
"
);
//format psd *
header("
Content-type: image/bmp
"
);
//format bmp
header("
Content-type: image/tiff
"
);
//format tiff *
header("
Content-type: image/jp2
"
);
//format jp2 *
header("
Content-type: image/iff
"
);
//format iff *
header("
Content-type: image/vnd.wap.wbmp
"
);
//format wbmp *
header("
Content-type: image/xbm
"
);
header("
Content-type: application/x-shockwave-flash
"
);
//animation flash *
* Les bibliothèques correspondantes doivent être installées.
II-3. Correction du code▲
<?php
header("Content-type: image/png"
);
//la ligne qui change tout !
$x
=
50
;
//largeur de mon image en PIXELS uniquement !
$y
=
100
;
//hauteur de mon image en PIXELS uniquement !
/* on crée l'image en vraies couleurs avec une largeur de 50 pixels et une hauteur de 100 pixels */
$image
=
imagecreatetruecolor($x
,
$y
);
imagepng($image
);
//renvoie une image sous format png
imagedestroy($image
);
//détruit l'image, libérant ainsi de la mémoire
?>
La fonction imagedestroy prend en argument la variable contenant l'image. Pour faire compliqué, on choisira $image
comme nom de variable :). La fonction détruit l'image en mémoire, libérant ainsi de la place. Cette fonction est à exécuter en dernier dans le script sinon vous risquez d'avoir un petit carré avec une croix rouge sous IE ou « L'image http://localhost/02_first_image.php ne peut être affichée, car elle contient des erreurs » si vous êtes sous Firefox. Utilisez imagedestroy, votre serveur ne pourra que mieux se porter.
En visualisant à nouveau le fichier dans votre navigateur, vous devriez voir un rectangle noir. En effet, GD attribue automatiquement la couleur noire sur toute l'image si rien ne dit le contraire (une fonction par exemple).
II-4. Enregistrer une image▲
On peut afficher une image en GD, c'est son rôle après tout, mais on peut aussi enregistrer une image. Voici la liste des fonctions permettant d'afficher, enregistrer des images.
imagepng($image
);
imagejpeg($image
);
imagegd($image
);
imagegd2($image
);
imagegif($image
);
imagewbmp($image
);
imagexbm($image
);
Toutes ces fonctions peuvent prendre un deuxième argument. C'est un chemin vers un fichier dans lequel sera enregistrée l'image. Vous devez avoir les droits d'écriture dans le répertoire : GD ne sait pas changer les droits tout seul : ça deviendrait vite la pagaille si GD en était capable. Exemple d'utilisation :
<?php
$file
=
'/images/mon_image.png'
;
imagepng($image
,
$file
);
//enregistre l'image dans le répertoire images à la racine du site.
?>
Heureusement, GD ne s'arrête pas là !