dimanche 31 Août 2008

Images en PHP avec GD2

Informatique et tutoriels PHP

Comme je l'ai déjà dit, PHP ne sert pas qu'à faire des pages web. On peut aussi faire des images. Pour commencer, nous allons voir comment rajouter un texte sur une image.

Comme c'est un tutoriel très long et qui sera suivi par d'autres parties concernant la gestion des images en PHP, je l'ai divisé en deux.

Les images en PHP avec GD2 - Partie 1 la création de l'image

Les utilisations possibles sont entre autres

  • faire de jolis titres en images avec des polices complexes comme ci-dessus (regardez l'adresse de l'image ;-) ),
  • rajouter un texte de signature sur toutes ses images,
  • faire un captcha (image anti-spam),
  • mettre du texte dynamique donc venant de variables PHP.

Pour ce dernier point, cela peut permettre d'afficher des informations sur votre visiteur comme le propose Danasoft avec ses signatures:

ip

Mais alors comment ça marche? :-)

Tout d'abord la librairie GD2 doit être activée sur votre hébergement. Mais rassurez-vous, c'est le cas la plupart du temps. Ensuite, il y a plein de choses à savoir, du coup l'article est un peu long, mais ça rentre facilement à l'usage. :-p


Le type MIME

Le type MIME est la première chose que va lire un navigateur qui reçoit un fichier. Il lui indique le type du fichier qui est reçu. Dans notre cas nous cherchons à envoyer des images, nous devons donc envoyer le type MIME correspondant au format de l'image (PNG, GIF, JPEG ...). Nous ne ferons que des PNG actuellement car c'est le meilleur format possible pour un texte en image.

Donc le type MIME sera "image/png" et il faut l'envoyer en PHP en utilisant la fonction header. Ce qui donne: header("Content-type: image/png");

Une fois cette ligne ajoutée au début de notre fichier PHP, le navigateur comprendra que ce fichier est une image PNG et son contenu sera interprété comme s'il provenait d'un fichier portant l'extension .png alors qu'il est en réalité un fichier .php.

Rappel : les instructions header doivent être la première chose envoyée au navigateur. Il faut donc les mettre avant tout envoi de texte (y compris des espaces ou lignes vides qu'il pourrait y avoir avant d'entrer en mode PHP avec <?php). J'ai déjà parlé de cette fonction dans l'article sur CSS ou Javscript dynamiques et des flux RSS Atom. Preuve qu'on peut envoyer toute sorte de contenu en PHP si on indique bien le type MIME.

Fin de l'introduction, passons aux choses sérieuses!


Création de l'image

Tout d'abord il faut créer une image vide, ou ouvrir une image existante. Nous allons pour cette fois, faire uniquement une image vide. C'est très simple : il suffit d'indiquer la taille de l'image à la fonction imagecreate ou imagecreatetruecolor. Cette dernière est de qualité supérieure, mais fait des images plus lourdes. Par exemple pour créer une image de 800 par 600 pixels:
$image = imagecreatetruecolor (800, 600);

Cela renvoie une variable qui est un identifiant vers une ressource image, comme un pointeur vers l'image en mémoire. C'est cette variable qu'il faudra passer en paramètre à toutes les fonctions utilisant cette image.

Les images obtenues et modifiées par PHP sont ensuite envoyées au navigateur avec des fonctions suivant le type souhaitée. Comme j'ai choisi le type MIME pour PNG, ma fonction est imagepng ($image);

$image est donc ma ressource image. Après l'avoir envoyée, il faut la détruire pour libérer cette mémoire avec imagedestroy($image)

Notez au passage qu'il est possible d'enregistrer l'image obtenue dans un fichier au lieu de l'envoyer immédiatement au navigateur. Ceci se fait simplement en rajoutant un nom de fichier comme paramètre: imagepng ($image, 'fichier.png').

Lorsque vous créez ou modifiez une image, vous avez donc le choix:

  • soit de l'enregistrer, puis l'utiliser plus tard comme n'importe quel fichier image,
  • soit d'utiliser l'image dans un fichier PHP séparé, contenant l'instruction header, que vous appelerez en HTML avec <img src="image_générée.php" alt="image" /> (ce que je fais dans ce tutoriel).

Les couleurs

Pour choisir les couleurs à dessiner, il faut utiliser la fonction imagecolorallocate avec comme paramètres une image, puis la couleur sous forme RVB (rouge, vert, bleu). C'est à dire qu'on indique le niveau de chaque couleur entre 0 et 255.

On peut aussi utiliser la forme hexadécimale comme en HTML de 00 à FF. Par exemple le bleu est #0000FF d'où:
imagecolorallocate($image, 0, 0, 255) //avec des entiers, ou
imagecolorallocate($image, 0x00, 0x00, 0xFF) //avec des valeurs hexadécimales.

A noter : avec imagecreate la première utilisation de imagecolorallocate définit la couleur du fond, alors qu'avec imagecreatetruecolor il faut dessiner un grand rectangle pour avoir un fond différent (vous verrez dans l'exemple final). ;-)

texte en image


café Cet article vous a aidé? 
Offrez-moi un café!
Agrégateur informatique

Une réponse à “Images en PHP avec GD2”

  1. Rétrolien de Écrire un texte sur une image - Azur Dev

Laisser un commentaire

Azur Dev