oujood.com

Dessiner des arcs avec PHP GD

Pour dessiner des arcs de cercle. C'est la fonction  imagearc() que l'on va utiliser .
La fonction ImageArc( ) étant très flexible, vous pouvez facilement créer des courbes courantes telles que des ellipses et des cercles en lui passant les bonnes valeurs.

chercher |

PHP cours tutorial

Dessiner des arcs de cercles avec PHP GD

Vous voulez dessiner des courbes ouvertes ou fermées. Par exemple, vous voulez dessiner un graphique circulaire montrant les résultats d'un sondage auprès des utilisateurs.

Pour dessiner un arc, utilisez ImageArc( ) :

ImageArc($image, $x, $y, $largeur, $hauteur, $debut, $fin, $couleur) ;

Pour dessiner une ellipse, utilisez ImageArc( ) et définissez $debut à 0 et $fin à 360 :

ImageArc($image, $x, $y, $largeur, $hauteur, 0, 360, $couleur) ;

Pour dessiner un cercle, utilisez ImageArc( ), définissez $debut à 0, définissez $fin à 360, et utilisez la même valeur pour $largeur et $hauteur :

ImageArc($image, $x, $y, $diametre, $diametre, 0, 360, $couleurr) ;


Comme la plupart des fonctions GD, le premier paramètre est le canevas. Les deux paramètres suivants sont les coordonnées x et y du centre de l'arc. Viennent ensuite la largeur et la hauteur de l'arc. Comme un cercle est un arc ayant la même largeur et la même hauteur, pour dessiner un cercle, réglez les deux nombres sur le diamètre de votre cercle.

Dessiner un arc vide


Pour dessiner des arcs de cercle. C'est la fonction  imagearc() que l'on va utiliser .
imagearc($image, $abscisse, $ordonnee, $largeur, $hauteur, $angle_debut, $angle_fin, $couleur)

Avec :

  • $abscisse et $ordonnee  sont les coordonnés du centre de l’arc de cercle.
  • $largeur  c’est la largeur de l’arc
  • $hauteur  c’est la hauteur de l’arc
  • $angle_debut  c’est l’angle de début de l’arc
  • $angle_fin  c’est l’angle de fin de l’arc

Mais faites attention, GD commence son arc à gauche et évolue dans le sens contraire des aiguilles d'une montre. Les angles devront être exprimés en degrés
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 couleur1 et on l'attribue à une variable
$couleur= imageColorAllocate($img, $rouge,$vert, $bleu);
//on créé un arc avec une ouverture de 180 degrés
imagearc($img,50,50,70,70,0,180,$couleur);
//on créé un second arc avec une ouverture de 250 degrés et une
epaisseur de 5px
$size="5";
imagesetthickness($img, $size);
imagearc($img,150,150,70,70,0,250,$couleur);
  imagePNG($img);
  imageDestroy($img); 
?>
  

Dessiner un arc plein

Pour dessiner un arc plein on utilise la fonction : imagefilledarc
mais elle demande un argument supplémentaire. L'argument  est limité à 4 choix.

  1. IMG_ARC_PIE : permet de créer une courbe entre deux points et de remplir
  2. IMG_ARC_CHORD : permet de créer une ligne droite entre deux points et de remplir
  3. IMG_ARC_NOFILL : permet de créer une ligne droite entre deux points et de NE PAS remplir
  4. IMG_ARC_EDGED : permet de créer une ligne droite entre un point de l'arc et son centre : utile avec IMG_ARC_NOFILL pour créer des camemberts. Pour remplir l'arc,

Avec l’argument supplémentaire devient comme suit :
imagearc($image, $abscisse, $ordonnee, $largeur, $hauteur, $angle_debut, $angle_fin, $couleur, IMG_ARC_PIE )

Exemple :

Exemple :       Copier le code

<?php
header('Content-type: image/png');
 
// Création de l'image
$image = imagecreatetruecolor(100, 100);
 
// Allocation de couleurs
$rouge      = imagecolorallocate($image, 0xFF, 0x00,
0x00);
 
/* On crée un arc plein */
imagefilledarc($image, 50, 50, 100, 50, 75, 360
, $rouge, IMG_ARC_PIE);
 
 
// Affichage de l'image
imagepng($image);
imagedestroy($image);
?>
  


Exemple pratique : graphique des visiteurs

Pour appliquer ces  notions, voici un  exemple très simple.
On veut créer un histogramme (graphique) sous forme d’un diagramme " camemberts " représentant le nombre de visites sur votre site web sur les 12 mois de l'année.
Imaginons donc que le nombre de visites pour chacun des 12 mois est placé dans le tableau $visites que vous avez récupéré de votre base de données   MySQL par exemple.

  • Les visites, l'image et les couleurs

    On commence donc par créer un tableau contenant les visites sur 12 mois (donc 12 valeurs) qui sont récupérées de la base de données.

Voici le tableau :
 $visites = array(88, 142, 288, 322, 676, 829, 536, 556, 693
, 352, 427, 888).
En suite nous allons faire un peu de mathématique.
Nous calculons le nombre total de visiteur sur nos 12 mois et nous le stockons dans une variable :
Pour ce calcule nous utilisons la fonction  de php array_sum($array) qui sert pour calculer la somme des valeurs d’un tableau.
$nbrVisiteur = array_sum($visites);
On calcule les angles pour  les éléments :
Pour chaque élément l’angle qui va le représenter est :
Le nombre de visite de l’élément divisé par le nombre total des visites  sur les 12 mois multiplier par 360.
Nous stockons ces angles dans la variable array $angle.
Puis nous calculons les angles de départ et d’arrivée de chaque élément que nous stockons dans la variable array $parciel.
Pour cela nous aurons le bout de code suivant :
$parciel[0] = 0;
for ($i = 0; $i <= 11 ; $i++) {
$angle[$i] = ($visites[$i]/$nbrVisiteur)*360;
$parciel[$i+1]=array_sum($angle);
}
On crée l'image du départ
$img  = imagecreate(210, 210);
On donne une couleur au fond de l'image
$background = imagecolorallocate($img, 255, 255, 255);
On crée les couleurs pour les éléments
$elementcolor[0] = imagecolorallocate($img, 255, 203, 3);
$elementcolor[1] = imagecolorallocate($img, 220, 101, 29);
$elementcolor[2] = imagecolorallocate($img, 189, 24, 51);
$elementcolor[3] = imagecolorallocate($img, 214, 0, 127);
$elementcolor[4] = imagecolorallocate($img, 98, 1, 96);
$elementcolor[5] = imagecolorallocate($img, 0, 62, 136);
$elementcolor[6] = imagecolorallocate($img, 0, 102, 179);
$elementcolor[7] = imagecolorallocate($img, 0, 145, 195);
$elementcolor[8] = imagecolorallocate($img, 0, 115, 106);
$elementcolor[9] = imagecolorallocate($img, 178, 210, 52);
$elementcolor[10] = imagecolorallocate($img, 137, 91, 74);
$elementcolor[11] = imagecolorallocate($img, 82, 56, 47);
Maintenant on peut  notre diagramme en utilisons encor une fois la boucle for.
 Et c'est terminé...
En fin regroupons tous ces bouts de code pour avoir le code de notre graphe en entier comme le montre l’exemple suivant :
Exemple : créer le diagramme des visiteurs d’un site web

Exemple :       Copier le code

<?php
 $visites = array(88, 142, 288, 322, 676, 829, 536, 556, 693,
352, 427, 888);
 // On calcule le nombre total des visiteurs.
$nbrVisiteur = array_sum($visites);
/*On calcule l'angle de départ et l'angle de fin pour les
éléments*/
$parciel[0] = 0;
for ($i = 0; $i <= 11 ; $i++) {
$angle[$i] = ($visites[$i]/$nbrVisiteur)*360;
$parciel[$i+1]=array_sum($angle);
}
 
//On crée l'image du départ
$img  = imagecreate(210, 210);
//On donne une couleur au fond de l'image
$background = imagecolorallocate($img, 255, 255, 255);
//On crée les couleurs pour les éléments
$elementcolor[0] = imagecolorallocate($img, 255, 203, 3);
$elementcolor[1] = imagecolorallocate($img, 220, 101, 29);
$elementcolor[2] = imagecolorallocate($img, 189, 24, 51);
$elementcolor[3] = imagecolorallocate($img, 214, 0, 127);
$elementcolor[4] = imagecolorallocate($img, 98, 1, 96);
$elementcolor[5] = imagecolorallocate($img, 0, 62, 136);
$elementcolor[6] = imagecolorallocate($img, 0, 102, 179);
$elementcolor[7] = imagecolorallocate($img, 0, 145, 195);
$elementcolor[8] = imagecolorallocate($img, 0, 115, 106);
$elementcolor[9] = imagecolorallocate($img, 178, 210, 52);
$elementcolor[10] = imagecolorallocate($img, 137, 91, 74);
$elementcolor[11] = imagecolorallocate($img, 82, 56, 47);
 
//On crée le diagramme des visiteurs
for ($i = 0; $i <= 11 ; $i++) {         
       imagefilledarc($img, 100, 100, 200, 200, $parciel[$i],
$parciel[$i + 1], $elementcolor[$i], IMG_ARC_PIE);
 }
//On affiche l'image le diagramme des visiteurs
header('Content-type: image/png');
imagepng($img);
imagedestroy($img);
?>

Vous pouvez améliorer ce code on ajoutant du texte. Une légende par exemple.
Et voila notre diagramme avec un effet 3D
Exemple :

Exemple :       Copier le code

<?php
 $visites = array(88, 142, 288, 322, 676, 829, 536, 556, 693,
352, 427, 888);
 // On calcule le nombre total des visiteurs.
$nbrVisiteur = array_sum($visites);
/*On calcule l'angle de départ et l'angle de fin pour les
éléments*/
$parciel[0] = 0;
for ($i = 0; $i <= 11 ; $i++) {
$angle[$i] = ($visites[$i]/$nbrVisiteur)*360;
$parciel[$i+1]=array_sum($angle);
}
 
//On crée l'image du départ
$img  = imagecreate(250, 250);
//On donne une couleur au fond de l'image
$background = imagecolorallocate($img, 255, 255, 255);
//On crée les couleurs pour les éléments
$elementcolor[0] = imagecolorallocate($img, 255, 203, 3);
$elementcolor[1] = imagecolorallocate($img, 220, 101, 29);
$elementcolor[2] = imagecolorallocate($img, 189, 24, 51);
$elementcolor[3] = imagecolorallocate($img, 214, 0, 127);
$elementcolor[4] = imagecolorallocate($img, 98, 1, 96);
$elementcolor[5] = imagecolorallocate($img, 0, 62, 136);
$elementcolor[6] = imagecolorallocate($img, 0, 102, 179);
$elementcolor[7] = imagecolorallocate($img, 0, 145, 195);
$elementcolor[8] = imagecolorallocate($img, 0, 115, 106);
$elementcolor[9] = imagecolorallocate($img, 178, 210, 52);
$elementcolor[10] = imagecolorallocate($img, 137, 91, 74);
$elementcolor[11] = imagecolorallocate($img, 82, 56, 47);
//on créer les couleurs pour l'effet 3D
$delementcolor[0] = imagecolorallocate($img, 205, 153, 0);
$delementcolor[1] = imagecolorallocate($img, 170, 51, 0);
$delementcolor[2] = imagecolorallocate($img, 139, 0, 1);
$delementcolor[3] = imagecolorallocate($img, 164, 0, 77);
$delementcolor[4] = imagecolorallocate($img, 48, 0, 46);
$delementcolor[5] = imagecolorallocate($img, 0, 12, 86);
$delementcolor[6] = imagecolorallocate($img, 0, 52, 129);
$delementcolor[7] = imagecolorallocate($img, 0, 95, 145);
$delementcolor[8] = imagecolorallocate($img, 0, 65, 56);
$delementcolor[9] = imagecolorallocate($img, 128, 160, 2);
$delementcolor[10] = imagecolorallocate($img, 87, 41, 24);
$delementcolor[11] = imagecolorallocate($img, 32, 6, 0);
//on crée l'effet 3D
for ($i = 0; $i <= 11 ; $i++) {
               for($n = 115; $n > 100; $n--){             
                                             
       imagefilledarc($img, 100, $n, 200, 100, $parciel[$i],
$parciel[$i + 1], $delementcolor[$i], IMG_ARC_PIE);
               }
 }
 //On crée le diagramme des visiteurs
 for ($i = 0; $i <= 11 ; $i++) {                             
                                                            
           
       imagefilledarc($img, 100, 100, 200, 100, $parciel[$i],
$parciel[$i + 1], $elementcolor[$i], IMG_ARC_PIE);  
 }
//On affiche l'image le diagramme des visiteurs
header('Content-type: image/png');
imagepng($img);
imagedestroy($img);
?>
  
Par carabde 20 Aout 2014



Voir aussi nos tutoriel :

fonction nl2br

Insère un retour la ligne HTML chaque nouvelle ligne

Détermine si une variable est un tableau

 Détermine si une variable est un tableau

fonction date_sunrise

Retourne l'heure de levé du soleil pour un jour et un endroit donnés