LES CAMEMBERTS 3D

ImmortalPC Messages postés 954 Date d'inscription mardi 11 mai 2004 Statut Membre Dernière intervention 11 novembre 2008 - 8 oct. 2005 à 18:37
darknior Messages postés 2 Date d'inscription mardi 16 novembre 2010 Statut Membre Dernière intervention 11 mai 2011 - 12 mai 2011 à 09:51
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/34131-les-camemberts-3d

darknior Messages postés 2 Date d'inscription mardi 16 novembre 2010 Statut Membre Dernière intervention 11 mai 2011
12 mai 2011 à 09:51
Bonjour,

Je ne comprend pas une chose s'il vous plais ...
Tous les scripts GD pour générer un graphe sur le net tel que celui-ci finissent par un ECHO pour afficher celui-ci.

Moi je voudrais enregistrer l'image dans un fichier image sur le ddur pour la re-utiliser derrière dans un pdf ou autre ...
Comment faire pour enregistrer cet echo ?

Prendre :
echo "
";

Et en avoir à la place un .PNG dans le dossier en cour pour l'afficher plustard.

Merci
fabien178 Messages postés 11 Date d'inscription lundi 11 mai 2009 Statut Membre Dernière intervention 4 octobre 2010
4 oct. 2010 à 14:29
Bonjour!
J'utilise le code de l'exemple inclus dans le ZIP nommé moncamembert.php.
Je voulais savoir si il était possible de ne pas prendre en compte les données égales à 0.

Merci de votre aide
opossum_farceur Messages postés 147 Date d'inscription lundi 16 août 2004 Statut Membre Dernière intervention 14 novembre 2009
11 mai 2008 à 00:16
Bonjour!
L'adresse de mon dernier camembert (crémeux et moelleux bien comme il faut!) :
http://www.javascriptfr.com/codes/SVG3DCAMEMBERT_46033.aspx
a++
cs_rottweiler Messages postés 117 Date d'inscription dimanche 7 avril 2002 Statut Membre Dernière intervention 23 octobre 2013
29 avril 2008 à 12:07
tout simplement extra , j'avais presque abandonné l'idée d'en utiliser tellement que c'était long à étudier ses graph
opossum_farceur Messages postés 147 Date d'inscription lundi 16 août 2004 Statut Membre Dernière intervention 14 novembre 2009
28 août 2006 à 01:26
Avis aux amateurs de camembert,
j'ai publié une nouvelle source de camembert, "Smooth 3D Camembert", à l'adresse suivante :
http://www.phpcs.com/codes/SMOOTH-3D-CAMEMBERT_39291.aspx
Gallient Messages postés 15 Date d'inscription vendredi 29 avril 2005 Statut Membre Dernière intervention 7 novembre 2007
11 juil. 2006 à 11:03
Et bien sur tout les camenberts que j'ai trouvé, ca doit être le seul qui marche... donc je note déjà minimun 5/10, et vu en plus qu'il y a une légende incrustée sur le camembert et que camembert est bien écrit rire(lol); je met 9/10.
cs_badoux Messages postés 137 Date d'inscription samedi 21 février 2004 Statut Membre Dernière intervention 16 décembre 2008
20 juin 2006 à 08:28
Salut, Michel VAN THODIEP :-)

Merci pour ton nom !

// Par "un peux pixelisé", tu veux dire je pense que les tracés ressemblent un peu trop à des "escaliers" dont les marches gagneraient à être moins visibles. //

Tout à fais !

A vrai dire, je suis pas en craque dans la lib GD !

Donc je garde telle quel pour le moment, je corrigerai ce detail plus tard !

++ et merci encors !:-)
opossum_farceur Messages postés 147 Date d'inscription lundi 16 août 2004 Statut Membre Dernière intervention 14 novembre 2009
20 juin 2006 à 01:57
Salut, BADOUX !
Mon nom : Michel VAN THODIEP
Par "un peux pixelisé", tu veux dire je pense que les tracés ressemblent un peu trop à des "escaliers" dont les marches gagneraient à être moins visibles. La solution de ce problème passe, il me semble, par la réécriture des fonctions de gd2 qui sont utilisées, ce qui représente un véritable effort. On pourrait aussi envisager le traitement de l'image par des filtres, quoique le résultat n'est pas garanti, surtout en ce qui concerne le texte, qui risque de devenir illisible.
Amicalement.
cs_badoux Messages postés 137 Date d'inscription samedi 21 février 2004 Statut Membre Dernière intervention 16 décembre 2008
19 juin 2006 à 10:49
Salut, ImmortalPC !

Je pense pas que ce sois très cool de parler d'un concurent et de lui faire une pub direct avec un lien ;-), mais étant donnée que "jpowered Graph3D" est payant, je te la donne quand meme ! mais, par MP ! :-)

++
ImmortalPC Messages postés 954 Date d'inscription mardi 11 mai 2004 Statut Membre Dernière intervention 11 novembre 2008 2
19 juin 2006 à 10:05
Salut,
badoux as tu le lien pour jpowered Graph3D pour voir ce que ça donne.
Merci
@+
cs_badoux Messages postés 137 Date d'inscription samedi 21 février 2004 Statut Membre Dernière intervention 16 décembre 2008
18 juin 2006 à 12:34
Bonjour et bon dimanche !:)

Je cite:
"Quant à ta question concernant les bords du camembert, j'avoue ne pas avoir bien compris : "

Il sagit simplement de la qualité du traisvai "un peux pixelisé" ! Mais ce n'ai pas grave du tout ! J'avais essayé, jpowered Graph3D, qui offre divers Graph plus propre (graphiquement)! mais il n'ait pas facile de le modifier à ca gise ! Alors j'ai opté pour le tien !:-) Merci encor !

P.S. J'utilise ton code source pour un projet d'annuaire en ligne, je voudrai bien ton nom et prénom pour le citer dans ma rubrique: "avec le soutien de:" :-) Si tu est d'accord biensur !
opossum_farceur Messages postés 147 Date d'inscription lundi 16 août 2004 Statut Membre Dernière intervention 14 novembre 2009
18 juin 2006 à 03:04
Bonjoir,
Merci pour les compliments, j'en retiens le terme "léger" : ce code a été conçu à l'origine pour aller sur php.net, on y trouve des "bouts" de code de quelques dizaines de lignes maxi, qui sont généralement suffisants pour débloquer le développeur en difficulté.
Mais voilà, la fonction "camembert" prenait encore trop de place, c'est pourquoi elle a finalement échoué à CODES SOURCES.
Bravo si t'arrives à l'assaisonner avec de l'AJAX, en fait le but de la manoeuvre, c'est que, comme le code n'est pas trop long, des gens comme toi n'hésitent pas à l'adapter à leurs besoins, tu peux en faire une classe, tu peux rendre les dimensions du camembert paramétrables, tu peux faire intervenir une véritable police de caractères pour gérer correctement les accents, etc...

Quant à ta question concernant les bords du camembert, j'avoue ne pas avoir bien compris :
s'agit-il des bords de l'image qui ne sont pas visibles? Si c'est le cas, vu que le fond de l'image est transparent, il y a des choses que l'on peut faire dans le fichier "main.php" (voir l'exemple), comme mettre une image de fond qui peut être un cadre. Il va sans dire que l'on peut intervenir également directement dans la fonction "camembert", en remplaçant le fond transparent par un vrai fond, en "dessinant" un cadre, etc...
Amicalement.
cs_badoux Messages postés 137 Date d'inscription samedi 21 février 2004 Statut Membre Dernière intervention 16 décembre 2008
17 juin 2006 à 10:19
Bonjour,

SUper script, moi j'ai qu'une chose à dire, MERCI, très complet, léger, simple ! Tout ce qui constitue un bon code source !

Additionner à de l'AJAX, il peut être vraiment très pratique, pour des stats dynamiques ;-) !

Juste une question, il n'ai pas possible de travailler un peu les bords du camembert ? Je sais que php n'est pas fais à la base pour travailler les images, mais dans la prog il y a toujour une solution à quelque part :-)!

Merci encors opossum_farceur :-)
cs_niko14 Messages postés 209 Date d'inscription jeudi 12 janvier 2006 Statut Membre Dernière intervention 10 octobre 2014
13 févr. 2006 à 08:09
Merci bien oppossum_farceur, en fait j'avais retravaillé dessus et j'avais trouvé comment faire pour alimenter mon cammbert avec une base!
De plus pour les couleurs je vais proposer les couleurs a choisir dans une liste deroulante a coté d'ou on rentrera les données dans la base comme ca l'administrateur choisira lui meme la couleur qu'il veut donner a sa portion de camembert!
Et pour ca qui est de retraiter l'image et de l'afficher apres, ca roule aussi en fait je ne stocke qu'une fois l'image et le traitement se fait en direct qd la personne choisit le budget qu'elle veut afficher, le resultat de la requete par rapport au mysql_query alimente mon tableau...
Je ne sais pas si je me fais bien comprendre il est tot le matin et je suis encore ds le coltard!!!
;-)
Merci beaucoup de ton aide et a bientot par ici!!!
opossum_farceur Messages postés 147 Date d'inscription lundi 16 août 2004 Statut Membre Dernière intervention 14 novembre 2009
11 févr. 2006 à 14:46
Réponse de opossum_farceur à niko14 :

1) l'objectif de la fonction camembert($arr)" est évidemment de pouvoir représenter dynamiquement des données, d'où l'interface que constitue le tableau $arr : tu l'alimentes comme tu veux, avec ou sans base de données, et si les couleurs te posent problème, tu peux les stocker dans un tableau annexe.

Ex :

$mycolor=array(0xFF99CC,0xFF9900,0xFFCB03,0x99CC00,0x339966,0x33CCCC);
$arr=array(); // initialisation du tableau à transmettre
.......................................................................
$sql="select myvalue,mylegend from mytable;";
$query=mysql_query($sql) or die("Erreur requête :
".$sql);

// alimentation dynamique du tableau $arr
for ($j=0;$assoc=mysql_fetch_assoc($query);$j++) {
$arr[$j][0]=$assoc['myvalue'];
$arr[$j][1]=$mycolor[$j];
$arr[$j][2]=$assoc['mylegend'];
}

camembert($arr);
.......................................................................

Un problème peut se poser, c'est que tu épuises ton "stock" de couleurs : qu'à celà ne tienne, tu fais un "modulo" :
$arr[$j][1]=$mycolor[$j%count($mycolor)];
qui fait repartir les couleurs au début.
Le mieux évidemment c'est de prévoir à l'avance le nombre maxi de portions que va comporter ton camembert, et les couleurs qui vont avec. Quant à générer les couleurs de manière aléatoire, je déconseille vivement, le résultat risque d'être vraiment trop décevant.

2) La vraie difficulté, il me semble, c'est celle évoquée par pichpoich (voir commentaires) : comment intégrer l'image générée dans une véritable application.
Une réponse à cette question se trouve dans le zip (mais l'as-tu téléchargé?).

3) J'espère avoir répondu à ta question.
cs_niko14 Messages postés 209 Date d'inscription jeudi 12 janvier 2006 Statut Membre Dernière intervention 10 octobre 2014
10 févr. 2006 à 08:34
j'ai une question!
vu que moi mes données vont venir d'une base de données est ce qu'il serait possible de changer qqch ds le script pour que les couleurs se générent automatiquement parce que d'une année sur l'autre il peut y aoir plus ou moins de parties a mon camembert et pis c'est en gestion de contenu donc je vais pas leur faire ecrire ds le code ni ecrire les couleurs ds la bdd sous forme #.....
merce de me repondre
opossum_farceur Messages postés 147 Date d'inscription lundi 16 août 2004 Statut Membre Dernière intervention 14 novembre 2009
14 déc. 2005 à 02:08
Réponse à PICHPOICH
Ok pour la remarque, et désolé pour le contretemps.
Nouvelle mise à jour, cette fois ci dans le calme et la sérénité.
Mais il y a quand même un problème, du côté de Nix, vu que le contenu (affiché) du zip ne correspondait pas à la réalité.
pichpoich Messages postés 26 Date d'inscription lundi 5 janvier 2004 Statut Membre Dernière intervention 29 janvier 2009
13 déc. 2005 à 18:22
Salut, ce message pour te dire que le zip n'est pas à jour et que l'on ne peut pas accéder aux fichiers (il y a une erreur sur la page dixit nix).
A plus.
pichpoich Messages postés 26 Date d'inscription lundi 5 janvier 2004 Statut Membre Dernière intervention 29 janvier 2009
7 déc. 2005 à 22:21
Salut opossum,

c'est sympa d'avoir répondu et d'avoir pris du temps pour éditer l'exemple, je passe membre du club et je télécharge les fichiers.

Je t'avoue que certain concepts de programation sont encore totalement flous pour moi, et quand j'ai regardé ton code, je me suis demandé si pour écrire un truc comme ça, il fallait être bon en math ou en graphisme (bon, initialiser des valeurs pour des axes ou calculer un angle, ça peut se conçevoir, mais les ellipses, alors là! chapeau), du coup le fait que le texte soit dessiné n'a pas eu en moi l'impact qu'il aurait dû avoir.

J'ai compris à présent (tout du moins ton explication), Je vais donc potasser ce que tu as fait et voir comment je peux l'appliquer avec ce que je fais. Si jamais j'apporte quelque chose (on peut toujours réver un peu) je te le ferais savoir.

Le cas échéant, je te remercie pour tout.
opossum_farceur Messages postés 147 Date d'inscription lundi 16 août 2004 Statut Membre Dernière intervention 14 novembre 2009
7 déc. 2005 à 20:27
Réponse du 07/12/2005 de opossum_farceur à pichpoich.

Le fichier contenant la fonction "camembert()" ne doit pas contenir de code "html" : donc pas de <html>, de <head> et autre , et donc pas non plus de "echo" et autre "print".
Par contre, il n'est pas interdit d'écrire sur l'image en mode graphique : tu aurais étudié un peu le code, tu aurais peut-être remarqué que le texte est "dessiné" grâce à la fonction "imagestring()".
Ceci-dit, le problème que tu évoques s'inscrit dans un cadre plus général que l'on peut résumer ainsi :
comment mettre en oeuvre la fonction "camembert()" dans une véritable application ?

J'apporte des éléments de réponse dans le répertoire "exemple" de camembert.zip (que j'ai mis à jour pour l'occasion et qu'il faut donc recharger).
Ce répertoire contient 2 fichiers :

- main.php : fichier principal dans lequel est écrit le commentaire du graphique, et dans lequel on peut faire tout ce que l'on veut. Ce fichier détient initialement les données dans le tableau "$arr".
Ce tableau est converti en une chaîne de caractère par la fonction "arr2str()" de manière à pouvoir être incorporé à une url.

- moncamembert.php : fichier php "pur" qui dessine le camembert. La chaîne transmise par $_GET est reconvertie en tableau par la fonction "str2arr()", lequel pourra alors alimenter la fonction "camembert()".

Voilà, d'autres mécanismes de transmission sont certainement possibles et, s'ils ne font pas intervenir de variables "globales", je suis preneur.
J'espère que j'ai été clair et que j'ai répondu à ta question.
pichpoich Messages postés 26 Date d'inscription lundi 5 janvier 2004 Statut Membre Dernière intervention 29 janvier 2009
6 déc. 2005 à 00:09
Tout d'abord, merci opposum pour cette source qui m'ouvre des perspectives auxquelles je ne révais pas (sur mon petit site en bout de ligne et dans mon coin bien entendu).

Un tout petit bémol cependant, je voudrais commenter des résultats puis insérer ton graph, mais aucun texte ne passe, même lorsque je mets un bon vieux echo au milieu de ton code.

Alors j'ai l'impression que le header("Content-type: image/png"); en fin de fonction y est pour quelque chose, mais étant auto pas tout à fait didacte, je ne sais pas vraiment quoi faire. Je suppose qu'il existe une fonction adéquate ou une déclaration tout bête à faire quelque part mais bon...

En attendant un peu d'aide, si ça n'est pas trop exagéré, je vais rererepotasser le tutorial de nexen dés fois que...

Encore merci pour ta source opposum.
stepibou Messages postés 112 Date d'inscription jeudi 11 mars 2004 Statut Membre Dernière intervention 11 octobre 2006
27 nov. 2005 à 17:09
ouai pardon,
pour la transparence, c'est vrai que c'est pas evident!
si on est en png , y faut rester en png. De meme pour les gif.
Sauf que sous IE, y a des pbs avec la transparence de png, encore merci IE!
si tu veux la transparence : tu as :
imageSaveAlpha($img, true);
imagealphablending($img, true);
n'oublie pas la fct imagecolorallocatealpha,
tu trouvera tous les renseignement sur fr.php.net.
Sinon, les caractères spéciaux dépendent uniquement de la font , je pense.
Bon code à toi! ;)
opossum_farceur Messages postés 147 Date d'inscription lundi 16 août 2004 Statut Membre Dernière intervention 14 novembre 2009
27 nov. 2005 à 16:31
Réponse de : opossum_farceur

- tout d'abord, la fonction c'est
"imagecreatetruecolor", et non pas
"imagecreatetruecolors" (non mais...)

- lors de l'écriture du code j'ai opté pour
"imagecreate" car avec "imagecreatetruecolor"
j'arrivais pas à obtenir de fond transparent (si une solution existe, je suis preneur).

- ceci dit le véritable problème (mais est-ce vraiment un problème?) est ailleurs : il s'agit de
la technique utilisée pour écrire sur l'image.
L'intérêt de cette technique est qu'elle ne nécessite pas de fichier externe contenant la police.
La mise en oeuvre du code est alors d'une simplicité extrême : on fait un copier-coller, on enregistre et paf!, çà marche.
Mais essayez de changer le texte des légendes, de mettre par exemple quelque part le mot "problème" : aie!, le caractère accentué est mal affiché.
Mise à part la solution consistant à écrire en anglais (no problem!), la solution est à rechercher dans l'arsenal de fonctions proposées par la bibliothèque gd2.
Personnelement, j'utilise la police "verdana.ttf" associée aux fonctions "imagettftext" et
"imagettfbbox"; la mise en oeuvre est différente mais ne devrait pas poser de problèmes aux tueurs en PHP que vous êtes!
stepibou Messages postés 112 Date d'inscription jeudi 11 mars 2004 Statut Membre Dernière intervention 11 octobre 2006
27 nov. 2005 à 00:56
salut,
bien bien, tu peux utiliser imagecreatetruecolors à la place de imagecreate.
a+
EMSIEN Messages postés 194 Date d'inscription lundi 26 juillet 2004 Statut Membre Dernière intervention 11 juin 2009
9 oct. 2005 à 00:06
Je vois que c'est une bonne idée,mais puisque tu utilises une bibliothèque je t'informe que JPgraph est très performante dans le traitement des graphiques,puisque tu n'a pas besoin de calculer ni la somme ni les angles ni tous ça.
juste un vecteur contenant tes statistiques et le tour est joué.
En tout Continue et surtout bonne porg.
http://ntic.blogspirit.com
ImmortalPC Messages postés 954 Date d'inscription mardi 11 mai 2004 Statut Membre Dernière intervention 11 novembre 2008 2
8 oct. 2005 à 18:37
Salut,
1) Remplace <? par <?php dsl c'est pour une meilleur compactibilité
2) C'est pas obligé mais vaux mieux utiliser les ' que les "
Ton code :
<?php
/*
- Date de création : 18/09/2005
- nom : camembert.php
- auteur : opossum_farceur.
- Object : les camemberts 3D.
- Source : http://fr3.php.net/manual/fr/function.imagefilledarc.php
*/

function camembert($arr)
{
$size=3; /* taille de la police, largeur du caractère */
$ifw=imagefontwidth($size);

$w=500; /* largeur de l'image */
$h=250; /* hauteur de l'image */
$a=120; /* grand axe du camembert */
$b=$a/2; /* 60 : petit axe du camembert */
$d=$a/2; /* 60 : "épaisseur" du camembert */
$cx=$w/2-1; /* abscisse du "centre" du camembert */
$cy=($h-$d)/2; /* 95 : ordonnée du "centre" du camembert */

$A=138; /* grand axe de l'ellipse "englobante" */
$B=102; /* petit axe de l'ellipse "englobante" */
$oy=-$d/2; /* -30 : du "centre" du camembert à celui de l'ellipse "englobante"*/

$img=imagecreate($w,$h);
$bgcolor=imagecolorallocate($img,0xCD,0xCD,0xCD);
imagecolortransparent($img,$bgcolor);
$black=imagecolorallocate($img,0,0,0);
/* calcule la somme des données */
for ($i=$sum=0,$n=count($arr);$i<$n;$i++) $sum+=$arr[$i][0];

/* fin des préliminaires : on peut vraiment commencer! */
for ($i=$v[0]=0,$x[0]=$cx+$a,$y[0]=$cy,$doit=true;$i<$n;$i++) {
for ($j=0,$k=16;$j<3;$j++,$k-=8) $t[$j]=($arr[$i][1]>>$k) & 0xFF;
/* détermine les "vraies" couleurs */
$color[$i]=imagecolorallocate($img,$t[0],$t[1],$t[2]);
/* calcule l'angle des différents "secteurs" */
$v[$i+1]=$v[$i]+round($arr[$i][0]*360/$sum);

if ($doit) { /* détermine les couleurs "ombrées" */
$shade[$i]=imagecolorallocate($img,max(0,$t[0]-50),max(0,$t[1]-50),max(0,$t[2]-50));

if ($v[$i+1]<180) { /* calcule les coordonnées des différents parallélogrammes */
$x[$i+1]=$cx+$a*cos($v[$i+1]*M_PI/180);
$y[$i+1]=$cy+$b*sin($v[$i+1]*M_PI/180);
}
else {
$m=$i+1;
$x[$m]=$cx-$a; /* c'est comme si on remplaçait $v[$i+1] par 180° */
$y[$m]=$cy;
$doit=false; /* indique qu'il est inutile de continuer! */
}
}
}

/* dessine la "base" du camembert */
for ($i=0;$i<$m;$i++) imagefilledarc($img,$cx,$cy+$d,2*$a,2*$b,$v[$i],$v[$i+1],$shade[$i],IMG_ARC_PIE);

/* dessine la partie "verticale" du camembert */
for ($i=0;$i<$m;$i++) {
$area=array($x[$i],$y[$i]+$d,$x[$i],$y[$i],$x[$i+1],$y[$i+1],$x[$i+1],$y[$i+1]+$d);
imagefilledpolygon($img,$area,4,$shade[$i]);
}

/* dessine le dessus du camembert */
for ($i=0;$i<$n;$i++) imagefilledarc($img,$cx,$cy,2*$a,2*$b,$v[$i],$v[$i+1],$color[$i],IMG_ARC_PIE);

/*imageellipse($img,$cx,$cy-$oy,2*$A,2*$B,$black); // dessine l'ellipse "englobante" */

/* dessine les "flêches" et met en place le texte */
for ($i=0,$AA=$A*$A,$BB=$B*$B;$i<$n;$i++) if ($arr[$i][0]) {
$phi=($v[$i+1]+$v[$i])/2;
/* intersection des "flêches" avec l'ellipse "englobante" */
$px=$a*3*cos($phi*M_PI/180)/4;
$py=$b*3*sin($phi*M_PI/180)/4;
/* équation du 2ème degré avec 2 racines réelles et distinctes */
$U=$AA*$py*$py+$BB*$px*$px;
$V=$AA*$oy*$px*$py;
$W=$AA*$px*$px*($oy*$oy-$BB);
/* calcule le pourcentage à afficher */
$value=number_format(100*$arr[$i][0]/$sum,2,',','').'%';
/* écrit le texte à droite */
if ($phi<90 || $phi>270) {
$root=(-$V+sqrt($V*$V-$U*$W))/$U;
imageline($img,$px+$cx,$py+$cy,$qx=$root+$cx,$qy=$root*$py/$px+$cy,$black);
imageline($img,$qx,$qy,$qx+10,$qy,$black);

imagestring($img,$size,$qx+14,$qy-12,$arr[$i][2],$black);
imagestring($img,$size,$qx+14,$qy-2,$value,$black);
}
else { /* écrit le texte à gauche */
$root=(-$V-sqrt($V*$V-$U*$W))/$U;
imageline($img,$px+$cx,$py+$cy,$qx=$root+$cx,$qy=$root*$py/$px+$cy,$black);
imageline($img,$qx,$qy,$qx-10,$qy,$black);

imagestring($img,$size,$qx-12-$ifw*strlen($arr[$i][2]),$qy-12,$arr[$i][2],$black);
imagestring($img,$size,$qx-12-$ifw*strlen($value),$qy-2,$value,$black);
}
}

header('Content-type: image/png');
imagepng($img);
imagedestroy($img);
}

$arr=array(
/* donnée couleur légende */
array( 40, 0xFF99CC, 'Loisirs'),
array( 80, 0xFF9900, 'Assurance'),
array( 160, 0xFFCB03, 'Credits'),
array( 160, 0x99CC00, 'Carburant'),
array( 200, 0x339966, 'Charges'),
array( 240, 0x33CCCC, 'Rentrée'),
array( 280, 0x0091C3, 'Nourriture'),
array( 340, 0x969696, 'Loyer')
);

camembert($arr); /* enjoy! */
?>

Une class aurait été la bienvenu ;-)
Si non facile d'installation, simple et complex à la fois :
8/10
@+
Rejoignez-nous