Création d'une image de statistique : le camembert

Soyez le premier à donner votre avis sur cette source.

Snippet vu 19 801 fois - Téléchargée 27 fois

Contenu du snippet

Un petit camembert parametrable pour les stats ;)

(parametrables :
?id1=nb1&id2=nb2&id3=nb3&id4=nb4&id5=nb5&pid1=nom1&pid2=nom2&pid3=nom3&pid4=nom4&pid5=nom5 )

Source / Exemple :


<?

if(isset($_GET['id1']) && isset($_GET['id2']) && isset($_GET['id3']) && isset($_GET['id4']) && isset($_GET['id5']) && isset($_GET['pid1']) && isset($_GET['pid2']) && isset($_GET['pid3']) && isset($_GET['pid4']) && isset($_GET['pid5']))
{

    /*

    • Graphique sectoriel au format GIF
  • /
/*
    • Convertir les degrés en radians
  • /
function radians($degrees) { return($degrees * (pi()/180.0)); } /*
    • prendre x,y dans le cercle,
    • centre = 0,0
  • /
function circle_point($degrees, $diameter) { $x = cos(radians($degrees)) * ($diameter/2); $y = sin(radians($degrees)) * ($diameter/2); return (array($x, $y)); } //remplir les paramètres $ChartDiameter = 300; $ChartFont = 5; $ChartFontHeight = imagefontheight($ChartFont); $ChartData = array($_GET['id1'], $_GET['id2'], $_GET['id3'], $_GET['id4'], $_GET['id5']); $ChartLabel = array($_GET['pid1'], $_GET['pid2'], $_GET['pid3'], $_GET['pid4'], $_GET['pid5']); //déterminer la taille du graphique $ChartWidth = $ChartDiameter + 20; $ChartHeight = $ChartDiameter + 20 + (($ChartFontHeight + 2) * count($ChartData)); $ChartTotal = ""; //détermine le total de toutes les valeurs for($index = 0; $index < count($ChartData); $index++) { $ChartTotal += $ChartData[$index]; } $ChartCenterX = $ChartDiameter/2 + 10; $ChartCenterY = $ChartDiameter/2 + 10; //image $image = imagecreate($ChartWidth, $ChartHeight); //couleurs $colorBody = imagecolorallocate($image, 0xFF, 0xFF, 0xFF); $colorBorder = imagecolorallocate($image, 0x00, 0x00, 0x00); $colorText = imagecolorallocate($image, 0x00, 0x00, 0x00); $colorSlice[] = imagecolorallocate($image, 0xFF, 0x00, 0x00); $colorSlice[] = imagecolorallocate($image, 0x00, 0xFF, 0x00); $colorSlice[] = imagecolorallocate($image, 0x00, 0x00, 0xFF); $colorSlice[] = imagecolorallocate($image, 0xFF, 0xFF, 0x00); $colorSlice[] = imagecolorallocate($image, 0xFF, 0x00, 0xFF); $colorSlice[] = imagecolorallocate($image, 0x00, 0xFF, 0xFF); $colorSlice[] = imagecolorallocate($image, 0x99, 0x00, 0x00); $colorSlice[] = imagecolorallocate($image, 0x00, 0x99, 0x00); $colorSlice[] = imagecolorallocate($image, 0x00, 0x00, 0x99); $colorSlice[] = imagecolorallocate($image, 0x99, 0x99, 0x00); $colorSlice[] = imagecolorallocate($image, 0x99, 0x00, 0x99); $colorSlice[] = imagecolorallocate($image, 0x00, 0x99, 0x99); //arrière-plan imagefill($image, 0, 0, $colorBody); /*
    • Dessiner chaque portion
  • /
$Degrees = 0; for($index = 0; $index < count($ChartData); $index++) { $StartDegrees = round($Degrees); $Degrees += (($ChartData[$index]/$ChartTotal)*360); $EndDegrees = round($Degrees); $CurrentColor = $colorSlice[$index%(count($colorSlice))]; //dessiner un arc imagearc($image, $ChartCenterX, $ChartCenterY, $ChartDiameter, $ChartDiameter, $StartDegrees, $EndDegrees, $CurrentColor); //Tracer le début de la ligne à partir du centre list($ArcX, $ArcY) = circle_point($StartDegrees, $ChartDiameter); imageline($image, $ChartCenterX, $ChartCenterY, floor($ChartCenterX + $ArcX), floor($ChartCenterY + $ArcY), $CurrentColor); //dessiner la fin de la ligne list($ArcX, $ArcY) = circle_point($EndDegrees, $ChartDiameter); imageline($image, $ChartCenterX, $ChartCenterY, ceil($ChartCenterX + $ArcX), ceil($ChartCenterY + $ArcY), $CurrentColor); //remplir les portions $MidPoint = round((($EndDegrees - $StartDegrees)/2) + $StartDegrees); list($ArcX, $ArcY) = circle_point($MidPoint, $ChartDiameter/2); imagefilltoborder($image, floor($ChartCenterX + $ArcX), floor($ChartCenterY + $ArcY), $CurrentColor, $CurrentColor); } //la bordure imagearc($image, $ChartCenterX, $ChartCenterY, $ChartDiameter, $ChartDiameter, 0, 180, $colorBorder); imagearc($image, $ChartCenterX, $ChartCenterY, $ChartDiameter, $ChartDiameter, 180, 360, $colorBorder); imagearc($image, $ChartCenterX, $ChartCenterY, $ChartDiameter+7, $ChartDiameter+7, 0, 180, $colorBorder); imagearc($image, $ChartCenterX, $ChartCenterY, $ChartDiameter+7, $ChartDiameter+7, 180, 360, $colorBorder); imagefilltoborder($image, floor($ChartCenterX + ($ChartDiameter/2) + 2), $ChartCenterY, $colorBorder, $colorBorder); //la légende for($index = 0; $index < count($ChartData); $index++) { $CurrentColor = $colorSlice[$index%(count($colorSlice))]; $LineY = $ChartDiameter + 20 + ($index*($ChartFontHeight+2)); //la couleur des boîtes imagerectangle($image, 10, $LineY, 10 + $ChartFontHeight, $LineY+$ChartFontHeight, $colorBorder); imagefilltoborder($image, 12, $LineY + 2, $colorBorder, $CurrentColor); //Les titres imagestring($image, $ChartFont, 20 + $ChartFontHeight, $LineY, "$ChartLabel[$index]: $ChartData[$index]", $colorText); } //afficher l'image header("Content-type: image/gif"); imagegif($image); }else{ echo '<fieldset style="position:absolute;border-color:#0000FF;border:1 solid"><b>Une erreur c\'est produite lors de la création du graphique :<br><li><font color=red>Tout les Arguments ne sont pas spécifier</b></font></fieldset>'; } ?>

A voir également

Ajouter un commentaire Commentaires
Messages postés
135
Date d'inscription
samedi 18 janvier 2003
Statut
Membre
Dernière intervention
17 avril 2009

Messages postés
459
Date d'inscription
dimanche 9 janvier 2005
Statut
Membre
Dernière intervention
11 mai 2013
1
normale il faut activer la librairy de gestions des images
Messages postés
26
Date d'inscription
samedi 23 décembre 2006
Statut
Membre
Dernière intervention
27 février 2008

j sais pas pour koi ça marche pas, ça degage une erreur fatale : Fatal error: Call to undefined function: imagefontheight()
Messages postés
459
Date d'inscription
dimanche 9 janvier 2005
Statut
Membre
Dernière intervention
11 mai 2013
1
Comme dit dans l'autre source je vais essayer de te le bricoler et je te préviendrai.
Messages postés
11
Date d'inscription
jeudi 24 novembre 2005
Statut
Membre
Dernière intervention
28 décembre 2005

C'est tu possible davoir le meme script mais cette fois ci pas délémité a 5, ce que je veux dire, tout dépendant de la requete, il peut y avoir 5, 6, 7 ou meme 20 colone créé dynamiquement. sans avoir a délémité dans le $GraphData et $GraphLabel
Afficher les 19 commentaires

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.