Les couleurs et les lignes en PHP GD

PHP cours tutorial

Les couleurs et les lignes en PHP GD

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

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

Sélectionner 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); 
  ?>
         
 

Les lignes


 

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

Sélectionner 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); 
  ?>
         
 

Réglage de l’épaisseur


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

 

Sélectionner 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.




Par carabde 20 Aout 2014