PHP la programmation orientée objet
Ici on va utiliser la seconde fonction qui crée une image en vraies couleurs imagecreatetruecolor() on voir comment y allouer une couleur et dessiner des linges.
Dans le cours précédent nous avons vu comment créer une image vide avec
La fonction imagecreate($largeur, $hauteur); de PHP GD.
Ici on va utiliser la seconde fonction qui crée une image en vraies couleurs
imagecreatetruecolor($largeur, $hauteur);
qui fait le même travail que imagecreate($largeur, $hauteur); sauf qu’elle dessine en vraies couleurs
Puis on voir comment y allouer une couleur et dessiner des linges.
Les couleurs sont spécifiées avec des valeurs RVB, entier ou en
hexadécimal.
Il faut séparer les canaux Rouge, Vert et Bleu.
imagecolorallocate($image, $rouge, $vert, $bleu);
Exemple : pour une couleur hexadécimale #FFAA77, les canaux RVB seront Rouge=0xFF, Vert=0xAA, Bleu=0x77
Et donc pour cette couleur nous aurons les canaux comme suit :
Avec la fonction hexdec() qui transforme les valeurs hexadécimales en valeurs décimales.
Canal rouge $rouge = hexdec("FF");
Canal vert $vert = hexdec("AA");
Canal bleu $bleu = hexdec("77");
Ce qui donne :
Canal rouge $rouge = 255
Canal vert $vert = 170
Canal bleu $bleu = 119
Appliquer une couleur de fond à l’image
Pour appliquer une couleur de fond à notre image de base.
Nous utiliserons la fonction imagefill().
Dont la syntaxe est :
imagefill($img, $largeur, $hauteur, $couleur);
Exemple
Exemple : Copier le code
<?php header("Content-type: image/png"); $largeur = 250; $hauteur = 250; $img = imagecreatetruecolor($largeur, $hauteur); $noir = imageColorAllocate($img, 0, 0, 0); $color = "5CDF00"; $rouge = hexdec("5C"); // canal rouge $vert = hexdec("D2"); // canal vert $bleu = hexdec("00"); // canal bleu //on créé la couleur et on l'attribue à une variable $couleur= imageColorAllocate($img, $rouge,$vert, $bleu); //on remplit l'image imagefill($img,0,0,$couleur); imagePNG($img); imageDestroy($img); ?>
Pour dessiner une ligne dans notre image on utilise la fonction :
imageline($image, $x1, $y1, $x2, $y2, $couleur);
Avec :
$x1 et $y1 les coordonnés de la première extrémité
$x2 et $y2 les coordonnés de la sconde extrémité
Exemple
Exemple : Copier le code
<?php header("Content-type: image/png"); $largeur = 250; $hauteur = 250; $img = imagecreatetruecolor($largeur, $hauteur); $noir = imageColorAllocate($img, 0, 0, 0); $color = "5CDF00"; $rouge = hexdec("5C"); // canal rouge $vert = hexdec("D2"); // canal vert $bleu = hexdec("00"); // canal bleu //on créé la couleur et on l'attribue à une variable $couleur= imageColorAllocate($img, $rouge,$vert, $bleu); //on créé une première ligne imageline($img,10,10,140,140,$couleur); //on créé une seconde ligne imageline($img,140,140,200,10,$couleur); imagePNG($img); imageDestroy($img); ?>
Pour changer l’épaisseur des lignes, il faut utiliser la fonction :
imagesetthickness($image, $size);
$image est notre image et $size est l'épaisseur de la
ligne en pixels.
Vous pouvez également dessiner une ligne en pointillés grâce à
imagedashedline(), son utilisation est similaire à
imageline().
Exemple
Exemple : Copier le code
<?php header("Content-type: image/png"); $largeur = 250; $hauteur = 250; $img = imagecreatetruecolor($largeur, $hauteur); $noir = imageColorAllocate($img, 0, 0, 0); $color1 = "5CDF00"; $rouge1 = hexdec("5C"); // canal rouge $vert1 = hexdec("D2"); // canal vert $bleu1 = hexdec("00"); // canal bleu $color2 = "FFDF00"; $rouge2 = hexdec("FF"); // canal rouge $vert2 = hexdec("D2"); // canal vert $bleu2 = hexdec("00"); // canal bleu //on donne une épaisseur de 20 px pour une ligne $size1="20"; //on donne une épaisseur de 10 px pour la seconde ligne $size2="10"; //on créé la couleur1 et on l'attribue à une variable $couleur1= imageColorAllocate($img, $rouge1,$vert1, $bleu1); //on créé la couleur1 et on l'attribue à une variable $couleur2= imageColorAllocate($img, $rouge2,$vert2, $bleu2); // on alloue l'épaisseur 20px à la première ligne imagesetthickness($img, $size1); //on créé une première ligne imageline($img,50,20,140,140,$couleur1); // on alloue l'épaisseur 10px à la seconde ligne imagesetthickness($img, $size2); //on créé une seconde ligne imageline($img,140,140,200,10,$couleur2); imagePNG($img); imageDestroy($img); ?>
Attention ! à l'ordre des fonctions, imagesetthickness() doit se trouver avant imageline() sinon cela ne fonctionnera pas.