Images
Pré-requis
importants
Ceci concerne les
versions de PHP avant la 4.2.3 et EasyPHP 1.6: certaines fonctions comme 
gd_info() ou
encore imagecreatetruetype() ne sont pas toujours disponibles car PHP fait
appel à une 
bibliothèque   externe  
appelée  GD2.  Pour  
les   version  4.2.3  et   au-delà 
on  trouve  des  
patches   à 
l'adresse  http://www.boutell.com/gd/.  Avant 
ces versions,   la version GD  linkée avec PHP est   la
. 
Ceci concerne les
utilisateurs de PHP 4.2.3 et + et EasyPHP 1.7 sur Windows : la configuration 
par défaut de
EasyPHP 1.7 n'inclut pas le support des images. Pour cela il faut modifier le
fichier 
PHP.INI en
retirant le commentaire de
:
extension=php_gd2.dll
Créer une image
Types possibles
Il faut tout d'abord
choisir le type de l'image que vous souhaitez créer. Pour cela on peut tester
quels 
types PHP peut
générer avec la fonction imagetypes() et ses constantes associées :
• IMG_PNG : format PNG
• IMG_JPG : format JPEG
• IMG_GIF : format GIF
• IMG_WBMP : format Windows Bitmap BMP
if (imagetypes() &
IMG_PNG) {
  
echo "Le type PNG est supporté";
Puis au début du
script, on envoie un header spécifiant le type d'image :
S. ROHAUT Cours
Programmation PHP Page 67/93header ("Content-type: image/png"); // ou
image/gif ou image/jpeg
Création
Nouvelle
image dynamique
Et enfin on créé
une image avec la fonction imagecreate() (basée sur une table de couleurs
indexée) 
ou  imagecreatetruecolor()  (en 
truecolor)   avec   comme 
paramètres   la   largeur  
et   la  hauteur. 
La 
seconde est
conseillée par la documentation PHP. Les fonctions retournent une ressource
identifiant 
l'image. Par
défaut l'image est noire.
$img=@createimage(100,100) or
die("Votre PHP ne supporte pas les images");
Récupération d'une image existante
PHP peut charger
une image existante au lieu de la créer de toutes pièces. Dans ce cas l'image
est 
chargée depuis un
fichier et on peut ensuite la retravailler comme on le souhaite. On peut
utiliser les 
fonctions :
• imagecreatefromgif() : charge
une image GIF
• imagecreatefromjpeg() : charge
une image JPEG
• imagecreatefrompng() : charge
une image PNG
• imagecreatefromstring() : charge
une image depuis une chaîne de texte (par exemple un champ)
Publication
Enfin, on publie l'image
avec les fonctions imagexxx(). Si cette fonction est utilisée sans paramètre, 
l'image créée est
redirigée vers la sortie standard. On peut toutefois préciser comme paramètre
un 
nom de fichier. Dans
ce cas, l'image est sauvée sur disque au format spécifié.
• imagepng() : créé une
image au format PNG
• imagegif() : créé une
image au format GIF
• imagejpeg() : créé une
image au format JPEG
Une fois l'image crée,
on peut la supprimer avec imagedestroy() ce qui la décharge de la mémoire.
Voici donc le code
d'une page PHP image.php retournant une image :
header ("Content-type:
image/png");
$img=@imagecreatetruecolor (100,
50) or die ("Impossible de crée un flux d'image 
GD");
/* ICI ON PLACE LES COMMANDES
DE DESSIN OU MANIPULATION
*/
imagepng ($img);
imagedestroy ($img);
S. ROHAUT Cours
Programmation PHP Page 68/9314.2.4 Chargement via une autre page
Pour appeler cette
image dynamique depuis une page HTML ou PHP il suffit de la placer dans une 
balise IMG :
<img src="image.php">
Travailler
sur les Images
Récupérer
des informations
La fonction
getimagesize() permet de récupérer des informations sur une image si on lui
passe un 
nom de fichier (pas
de ressource image). Elle retourne un tableau indexé.
list($width,$height,$type,$attr)=getimagesize("toto.gif");
• width : largeur x
• height : hauteur y
• type : 1 = GIF, 2 = JPG, 3 = PNG, 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
• attr: chaine width/height pour HTML
Si on travaille
sur une image qu'on a créé nous-même
:
• imagesx() : largeur x de l'image
• imagesy() : hauteur de l'image
Les couleurs
Il n'est pas
possible de voir  toutes les fonctions
cependant  une chose est à retenir  :  la
notion de 
palette  indexée  
(createimage())  et   la notion de 
truetype.  Dans   le premier 
cas   les  couleurs  
sont 
indexées via un
numéro. Dans le second cas, la couleur est une composante RVB.
La fonction
imagecolorallocate() permet de définir une couleur qui sera utilisée pour une
image. Le 
premier paramètre
est le ressource de l'image, les trois autres les niveaux de rouge, vert et
bleu de la 
couleur.
ATTENTION : Avec une image créée
avec createimage(), la palette est indexée et le premier 
index est   la couleur du  fond.  Donc  :  un
premier appel  à  imagecolorallocate()  dans ce cas 
modifie la couleur
du fond.
$white=imagecolorallocate($img,255,255,255);
La fonction
imagecolorat() retourne la valeur exacte (soit l'index de la palette, soit un
entier RVB) 
du point aux
coordonnées x/y de l'image.
S. ROHAUT Cours
Programmation PHP Page 69/93$color=imagecolorextact($img,50,50);
La fonction
imagecolortransparent() permet de définir la couleur de transparence d'une
image dont 
la   palette  
est   indexée.  Le  
premier   paramètre   est  
la   ressource   de   l'image 
OBLIGATOIREMENT   créée  
avec   imagecreate(),   le  
second   une   valeur  
retournée   par 
imagecolorallocate().
La fonction
imagecolorstotal() retourne le nombre total de couleurs utilisées pour l'image
donnée.
Dessin
Remplissage
On utilise la
fonction imagefill()
:
$background=imagecolorallocate ($img,255,255,255);
ImageFill($img,0,0,$background);
La   fonction 
imagefilltoborder()  permet   un  
remplissage   d'une   zone  
délimitée   par   une  
couleur 
donnée.  Dans ce cas 
les deux derniers paramètres sont 
la couleur de la bordure et  la
couleur de 
remplissage.
Point
On utilise
imagesetpixel() :
$green=imagecolorallocate ($img,0,255,0);
Imagesetpixel($img,2,2,$green);
Ligne
On utilise
imageline() :
imageline($img, 10,10,30,40,$blue);
Rectangle
On utilise  imagerectangle()  pour 
un  rectangle simple,  imagefilledrectangle()  pour 
un  rectangle 
rempli.
$blue=ImageColorAllocate($img,0,0,255);
imagerectangle($img, 10,10,30,40,$blue);
imagefilledrectangle($img,12,12,27,37,$green);
Cercle, ellipse
On utilise
imageellipse() ou imagefilledellipse(). Attention les deux premiers paramètres
sont les 
coordonnées du
centre de l'ellipse, les deux autres la largeur et la hauteur de l'ellipse.
imageellipse ($img,
50, 50,30, 20, $red);
On peut  aussi 
faire des arcs de cercles avec les fonctions  imagearc() 
et  imagefilledarc()  :  Juste 
S. ROHAUT Cours
Programmation PHP Page 70/93avant la couleur on précise le début et la fin de l'arc
en degrés (de 0 à 360).
Polygones
On utilise les
fonctions imagepolygone() et imagefilledpolygone(). Les sommets du polygone
sont 
définis dans un
tableau : Tab[0]=x0, Tab[1]=y0, Tab[1]=x1, Tab[2]=y1, ...
On doit aussi
préciser le nombre de sommets.
imagepolygon($img, array (0, 0,100, 200, 300, 200),3,
$blue);
Texte simple
On utilise imagestring() :
imagestring($img, 1, 5, 5,  "Une simple chaîne de texte", $text_color);
Le second
paramètre est le numéro de police par défaut de la page actuelle ou du
navigateur.
