Generer des images à la volée  

Cet article est une traduction d'un article de Rasmus Lerdorf

Exemple de génération d'image avec PHP

De nombreuses personnes ne savent pas que PHP peut-être utilisé pour d'autres applications que la création de fichiers HTML. Une des particularités intéressante est la création d'images à la volée. Ce peut être de simples barres graphiques qui affichent des résultats pris dans une base, ou simplement un moyen de créer des boutons graphiques à la volée.

Quand je créé un site rapidement, je constate que c'est une perte de temps de me battre avec un éditeur d'image pour créer les boutons et les menus graphiques. A la place je vais choisir une belle font TTF et j'utiliserais le script suivant que j'appelle bouton.php

Le fichier de génération d'images
  1. <?php
  2.   header("Content-type: image/jpg");
  3.  
  4.   // On récupère les valeurs passées dans l'URL
  5.   if(isset($_REQUEST['s'])){
  6.     $s=$_REQUEST['s'];
  7.   }else{
  8.     $s=25;
  9.   }
  10.  
  11.   if(isset($_REQUEST['texte'])) {
  12.     $texte=$_REQUEST['texte'];
  13.   }else{
  14.     $texte='Anaska, conseil et formation en logiciel libre';   
  15.   }
  16.  
  17.   // On choisit la police à utiliser
  18.   $font = "./font/eurosti.ttf";
  19.  
  20.   $size = imagettfbbox($s,0,$font,$texte);
  21.   $dx = abs($size[2]-$size[0]);
  22.   $dy = abs($size[5]-$size[3]);
  23.   $xpad=9;
  24.   $ypad=9;
  25.  
  26.   $im = imagecreate($dx+$xpad,$dy+$ypad);
  27.   $blue = ImageColorAllocate($im, 0x2c,0x6D,0xAF);
  28.   $black = ImageColorAllocate($im, 0,0,0);
  29.   $white = ImageColorAllocate($im, 255,255,255);
  30.  
  31.  
  32.   ImageRectangle($im,0,0,$dx+$xpad-1,$dy+$ypad-1,$black);
  33.   ImageRectangle($im,0,0,$dx+$xpad,$dy+$ypad,$white);
  34.   ImageTTFText($im, $s, 0, (int)($xpad/2)+1, $dy+(int)($ypad/2), $black, $font, $texte);
  35.   ImageTTFText($im, $s, 0, (int)($xpad/2), $dy+(int)($ypad/2)-1, $white, $font, $texte);
  36.   ImagePNG($im);
  37.   ImageDestroy($im);
  38. ?>

 

Il est tres important de comprendre que je ne peux pas inserer de tags HTML dans ce fichier. Il ne doit pas y avoir non plus d'espaces ou de lignes vides apres les tags <?php et ?> .

Si vous obtenez un lien cassé d'image il y a de fortes chances pour qu'un espace ou un retour chariot se trouve quelques part en dehors des tags php.

Créer une image dynamique avec PHP

Le script ci dessus serait appellé avec un tag de cette sorte à partir d'une page : <img src="button.php">

Image

Dans l'exemple précédent on utilise les valeurs par défaut. Il est possible de faire passer des informations via l'URL. L'argument " s " défini la taille du fond, le bouton s'agrandira de lui même pour être à la bonne taille. L'argument texte indique ce qu'il faut écrire.

 

Voici le même avec s=18 et texte=PHPTeam.net:

Image

Notez que je dessine d'abord un rectangle noir et puis un rectangle blanc légèrement excentrés pour créer un effet 3d. Ceci pourrait être dur à voir sur un fond clair, mais vous pouvez ajuster vos couleurs selon.

 

Ensuite je fais la même chose avec la police de caractère. Je dessine d'abord une version noire et ensuite j'excentre légèrement une version blanche de la chaîne de caractères sur le dessus. Vous pouvez bien entendu jouer avec les paramètres pour rendre l'effet que vous désirez.

Ok, maintenant comment pouvez-vous faire ça sur votre site?

Vous devez vous assurer que votre installation de PHP supporte la lib GD et les TTF. Voyez le FAQ de PHP pour des liens vers ces bibliothèques.

Rasmus (traduction cyruss)


Retour à l'accueil des articles