Manipulation d'images en PHP - Librairie GD

Auteur: Mohamed CHINY Durée necessaire pour le cours de Manipulation d'images en PHP - Librairie GD Niveau recommandé pour le cours de Manipulation d'images en PHP - Librairie GD Supports vidéo non disponibles pour ce cours Exercices de renforcement disponibles pour ce cours Quiz non disponibles pour ce cours

Page 5: Dessiner les formes de base - Première partie

Toutes les pages

Lignes, rectangles et ellipses

Les lignes: fonction imageline()

Pour tracer une ligne on fait appel à la fonction imgeline($img , $x1 , $y1 , $x2 , $y2 , $couleur). Pour définir une ligne on indique au compilateur le point de départ dont les coordonnées sont $x1 et $y1 et le point d'arrivée dont les coordonnées sont $x2 et $y2. La ligne aura la couleur $couleur définie par la fonction imagecolorallocate(). Le premier paramètre ($img) désigne l'image sur laquelle on veut tracer la ligne. Ce paramètre est retourné par la fonction imagecreatetruecolor().

Exemple:
<?php
   header("content-type:image/png");
   $x=400;
   $y=300;
   $img = imagecreatetruecolor($x,$y);
   $gris = imagecolorallocate($img,220,220,220);
   $bleu = imagecolorallocate($img,0,0,200);
   imagefill($img,0,0,$gris);
   imageline($img,0,0,$x,$y,$bleu);
   imagepng($img);
?>
Ce qui donne:
Par défaut, l'épaisseur de la ligne (ainsi que les bordures de tous les objets qui vont suivre) mesure 1 pixel. Si on veut modifier cette épaisseur on fait appel à la fonction imagesetthickness($img , $ep). La variable $ep est un entier qui indique l'épaisseur souhaitée en pixel.

Notez que tous les objets qui vont suivre auront la nouvelle épaisseur définie. Pour modifier celle-ci on doit redéfinir la fonction imagesetthickness() avec la nouvelle épaisseur.

Exemple:
<?php
   header("content-type:image/png");
   $x=400;
   $y=300;
   $img = imagecreatetruecolor($x,$y);
   $gris = imagecolorallocate($img,220,220,220);
   $bleu = imagecolorallocate($img,0,0,200);
   imagefill($img,0,0,$gris);
   imagesetthickness($img,40);
   imageline($img,0,0,$x,$y,$bleu);
   imagesetthickness($img,10);
   imageline($img,$x,0,0,$y,$bleu);
   imagepng($img);
?>
Ce qui donne:
Dans ce cas, la première diagonale tracée fait 40 pixels d'épaisseur et la deuxième 10 pixels.

Les rectangles: fonctions imagerectangle() et imagefilledrectangle()

La fonction imagerectangle($img , $x1 , $y1 , $x2 , $y2 , $couleur) permet de tracer un rectangle creux dont le coin haut gauche est décrit par les coordonnées $x1 et $y1 et le coin bas droit par $x2 et $y2. La bordure du rectangle a la couleur $couleur.
L'épaisseur par défaut du rectangle mesure 1 piexl. Pour modifier cette valeur on fait appel à la fonction imagesetthickness().
Pour dessiner un rectangle plein on fait appel à la fonction imagefilledrectangle(). Ses paramètres restent les même que ceux de imagerectangle().

Dans cet exemple on va essayer de dessiner deux rectangles cote à cote, le premier et creux et le deuxième est plein:
<?php
   header("content-type:image/png");
   $x=400;
   $y=300;
   $img = imagecreatetruecolor($x,$y);
   $gris = imagecolorallocate($img,220,220,220);
   $bleu = imagecolorallocate($img,0,0,200);
   imagefill($img,0,0,$gris);
   imagerectangle($img,25,25,$x/2-25,$y-25,$bleu);
   imagefilledrectangle($img,$x/2+25,25,$x-25,$y-25,$bleu);
   imagepng($img);
?>
Ce qui donne:

Cercles et ellipses: fonctions imageellipse() et imagefilledellipse()

La fonction imageellipse($img , $cx , $cy , $l , $h , $couleur) permet de tracer une ellipse creuse dont le centre est le point aux coordonnées $cx et $cy. La largeur de l'ellipse (diamètre horizontale) est spécifiée par $l et la hauteur (diamètre vertical) est spécifiée par $h. La couleur de la bordure de l'ellipse est $couleur.

Si la largeur et la hauteur de l'ellipse sont égales, on obtient alors un cercle parfait.

Pour obtenir une ellipse pleine on fait appel à la fonction imagefilledellipse() dont les paramètres sont les mêmes que ceux de la fonction imageellipse().

Exemple:
<?php
   header("content-type:image/png");
   $x=400;
   $y=300;
   $img = imagecreatetruecolor($x,$y);
   $gris = imagecolorallocate($img,220,220,220);
   $bleu = imagecolorallocate($img,0,0,200);
   imagefill($img,0,0,$gris);
   imageellipse($img,$x/4,$y/2,$x/2-25,$x/2-25,$bleu);
   imagefilledellipse($img,3*$x/4,$y/2,$x/2-25,$x/2-25,$bleu);
   imagepng($img);
?>
Ce qui donne: