Accueil > > > GRAPHIQUE CAMEMBERT 3D
GRAPHIQUE CAMEMBERT 3D
Information sur la source
Description
Bonjours Voila un code que j'ai crée, mais je sais pas trop se qu'il vaut , alors je le poste en débutant. Alors ce code peu avoir plus ou moins d'utilité mais je trouve qu'il peu être pratique. Une fonction qui crée un camembert avec comme seul argument obligatoire un array. Cette array doit etre composé de la fason suivant: array( 'Valeur1' => '14;00FFFF', 'Valeur2' => '45;FF00FF', ... ... ) Valeur1 apparait 14 fois et sera afficher avec la couleur 00FFFF Valeur2 apparait 45 fois et sera afficher avec la couleur FF00FF ... ... De plus d'autre argument sont possible mais pas obligatoire. comme: Les dimmention de l'image L'affichage ou non des pourcentage Nombre de chiffre apres la virgule Epaisseur du camembert
Source
- <?PHP
-
- function camembert($tableau,$imlargeur = 100,$imhauteur = 70,$aftext = false,$camhauteur = 20,$arondi = 1)
- {
- //vérification des donnée à afficher
- if(!is_array($tableau) || empty($tableau))
- {
- return false;
- }
- else
- {
- //Initialisation des valeur
- if(empty($imlargeur))$imlargeur=100;
- if(empty($imhauteur))$imhauteur=70;
- if(empty($aftext)) $aftext=false;
- if(empty($camhauteur))$camhauteur=20;
- if($arondi != 0 && empty($arondi)) $arondi=1;
-
- $array_index=array_keys($tableau);
- $nbr=count($array_index);
-
-
- // Création de l'image
- $image = imagecreatetruecolor($imlargeur, $imhauteur);
-
- //séparation des donnée pour un traitement plus clair
- $array_nombre= array();
- $array_couleur_clair= array();
- $array_couleur_sombre= array();
-
- for($n=0;$n<$nbr;$n++)
- {
-
- //separation nombre et couleur clair
- $value = explode(";", $tableau[$array_index[$n]]);
-
- //création de la couleur sombre
- //premiere partie de la couleur
- $couleur1 = (hexdec($value[1][0].$value[1][1]) - hexdec('A3'));
- if($couleur1 < 0)
- {
- $couleur_sombre_1 = 00;
- }
- elseif($couleur1 >0 && $couleur1 < 10)
- {
- $couleur_sombre_1 = '0'.dechex($couleur1);
- }
- else
- {
- $couleur_sombre_1 = dechex($couleur1);
- }
- //deuxieme partie de la couleur
- $couleur2 = (hexdec($value[1][2].$value[1][3]) - hexdec('A3'));
- if($couleur2 < 0)
- {
- $couleur_sombre_2 = 00;
- }
- elseif($couleur2 > 0 && $couleur2 < 10)
- {
- $couleur_sombre_2 = '0'.dechex($couleur2);
- }
- else
- {
- $couleur_sombre_2 = dechex($couleur2);
- }
- //troisieme partie de la couleur
- $couleur3 = (hexdec($value[1][4].$value[1][5]) - hexdec('A3'));
- if($couleur3 < 0)
- {
- $couleur_sombre_3 = 00;
- }
- elseif($couleur3 > 0 && $couleur3 < 10)
- {
- $couleur_sombre_3 = '0'.dechex($couleur3);
- }
- else
- {
- $couleur_sombre_3 = dechex($couleur3);
- }
-
-
-
-
- $couleur_sombe = imagecolorallocate($image, hexdec($couleur_sombre_1), hexdec($couleur_sombre_2), hexdec($couleur_sombre_3));
- $couleur_clair = imagecolorallocate($image, hexdec($value[1][0].$value[1][1]), hexdec($value[1][2].$value[1][3]), hexdec($value[1][4].$value[1][5]));
- //ajout dans les arrays
- $array_couleur_sombre[$array_index[$n]]=$couleur_sombe;
- $array_nombre[$array_index[$n]]=$value[0];
- $array_couleur_clair[$array_index[$n]]=$couleur_clair;
- }
- //Nombre total d'élement
- $somme=array_sum($array_nombre);
-
- //affichage du text
- $decal=$imlargeur;
- if($aftext)
- {
- for($n=0;$n<$nbr;$n++)
- {
- $pourcent = $array_index[$n].' : '.round(($array_nombre[$array_index[$n]]*100/$somme),$arondi).' %';
- $x = ($imlargeur - (strlen($pourcent)*6));
- if($x<$decal)$decal=$x;
- $y = ($n*10);
- imagestring($image, 2, $x, $y, $pourcent, $array_couleur_clair[$array_index[$n]]);
- //création de l'arc de disque
- imagefilledarc($image, 50, $i, 100, 50, $angle_prec, $angle_suiv, $array_couleur_clair[$array_index[$n]], IMG_ARC_PIE);
- }
- }
-
-
- // Création de l'effet 3D
- for ($i = (($decal/4)+$camhauteur); $i > ($decal/4); $i--) {
- for($n=0;$n<$nbr;$n++)
- {
- //calcule des angles de debut et fin
- if($n==0)
- {
- $angle_prec = 0;
- }
- else
- {
- $nombre = 0;
- for($n1=0;$n1<$n;$n1++)
- {
- $nombre += $array_nombre[$array_index[$n1]];
- }
- $angle_prec = ($nombre*360/$somme);
- }
- $angle_suiv = ($angle_prec + ($array_nombre[$array_index[$n]]*360/$somme));
-
- //création de l'arc de disque
- imagefilledarc($image, ($decal/2), $i, $decal, ($decal/2) , $angle_prec, $angle_suiv, $array_couleur_sombre[$array_index[$n]], IMG_ARC_PIE);
- }
- }
-
- //création de la tête du camembert
- for($n=0;$n<$nbr;$n++)
- {
- //calcule des angles de debut et fin
- if($n==0)
- {
- $angle_prec = 0;
- }
- else
- {
- $nombre = 0;
- for($n1=0;$n1<$n;$n1++)
- {
- $nombre += $array_nombre[$array_index[$n1]];
- }
- $angle_prec = ($nombre*360/$somme);
- }
- $angle_suiv = ($angle_prec + ($array_nombre[$array_index[$n]]*360/$somme));
-
- //création de l'arc de disque
- imagefilledarc($image, ($decal/2), ($decal/4), $decal, ($decal/2), $angle_prec, $angle_suiv, $array_couleur_clair[$array_index[$n]], IMG_ARC_PIE);
- }
-
- // Affichage de l'image
- header('Content-type: image/png');
- imagepng($image);
- imagedestroy($image);
- }
-
- }
-
-
- //Exemple d'utilisation
- $test=array('Boujour' => '25;00FF00', 'Salut' => '20;FF4455', 'Kikoo' => '35;00FFFF', 'Coucou' => '25;FFFF00');
- camembert($test,'300','300','0','50','2');
-
- ?>
<?PHP
function camembert($tableau,$imlargeur = 100,$imhauteur = 70,$aftext = false,$camhauteur = 20,$arondi = 1)
{
//vérification des donnée à afficher
if(!is_array($tableau) || empty($tableau))
{
return false;
}
else
{
//Initialisation des valeur
if(empty($imlargeur))$imlargeur=100;
if(empty($imhauteur))$imhauteur=70;
if(empty($aftext)) $aftext=false;
if(empty($camhauteur))$camhauteur=20;
if($arondi != 0 && empty($arondi)) $arondi=1;
$array_index=array_keys($tableau);
$nbr=count($array_index);
// Création de l'image
$image = imagecreatetruecolor($imlargeur, $imhauteur);
//séparation des donnée pour un traitement plus clair
$array_nombre= array();
$array_couleur_clair= array();
$array_couleur_sombre= array();
for($n=0;$n<$nbr;$n++)
{
//separation nombre et couleur clair
$value = explode(";", $tableau[$array_index[$n]]);
//création de la couleur sombre
//premiere partie de la couleur
$couleur1 = (hexdec($value[1][0].$value[1][1]) - hexdec('A3'));
if($couleur1 < 0)
{
$couleur_sombre_1 = 00;
}
elseif($couleur1 >0 && $couleur1 < 10)
{
$couleur_sombre_1 = '0'.dechex($couleur1);
}
else
{
$couleur_sombre_1 = dechex($couleur1);
}
//deuxieme partie de la couleur
$couleur2 = (hexdec($value[1][2].$value[1][3]) - hexdec('A3'));
if($couleur2 < 0)
{
$couleur_sombre_2 = 00;
}
elseif($couleur2 > 0 && $couleur2 < 10)
{
$couleur_sombre_2 = '0'.dechex($couleur2);
}
else
{
$couleur_sombre_2 = dechex($couleur2);
}
//troisieme partie de la couleur
$couleur3 = (hexdec($value[1][4].$value[1][5]) - hexdec('A3'));
if($couleur3 < 0)
{
$couleur_sombre_3 = 00;
}
elseif($couleur3 > 0 && $couleur3 < 10)
{
$couleur_sombre_3 = '0'.dechex($couleur3);
}
else
{
$couleur_sombre_3 = dechex($couleur3);
}
$couleur_sombe = imagecolorallocate($image, hexdec($couleur_sombre_1), hexdec($couleur_sombre_2), hexdec($couleur_sombre_3));
$couleur_clair = imagecolorallocate($image, hexdec($value[1][0].$value[1][1]), hexdec($value[1][2].$value[1][3]), hexdec($value[1][4].$value[1][5]));
//ajout dans les arrays
$array_couleur_sombre[$array_index[$n]]=$couleur_sombe;
$array_nombre[$array_index[$n]]=$value[0];
$array_couleur_clair[$array_index[$n]]=$couleur_clair;
}
//Nombre total d'élement
$somme=array_sum($array_nombre);
//affichage du text
$decal=$imlargeur;
if($aftext)
{
for($n=0;$n<$nbr;$n++)
{
$pourcent = $array_index[$n].' : '.round(($array_nombre[$array_index[$n]]*100/$somme),$arondi).' %';
$x = ($imlargeur - (strlen($pourcent)*6));
if($x<$decal)$decal=$x;
$y = ($n*10);
imagestring($image, 2, $x, $y, $pourcent, $array_couleur_clair[$array_index[$n]]);
//création de l'arc de disque
imagefilledarc($image, 50, $i, 100, 50, $angle_prec, $angle_suiv, $array_couleur_clair[$array_index[$n]], IMG_ARC_PIE);
}
}
// Création de l'effet 3D
for ($i = (($decal/4)+$camhauteur); $i > ($decal/4); $i--) {
for($n=0;$n<$nbr;$n++)
{
//calcule des angles de debut et fin
if($n==0)
{
$angle_prec = 0;
}
else
{
$nombre = 0;
for($n1=0;$n1<$n;$n1++)
{
$nombre += $array_nombre[$array_index[$n1]];
}
$angle_prec = ($nombre*360/$somme);
}
$angle_suiv = ($angle_prec + ($array_nombre[$array_index[$n]]*360/$somme));
//création de l'arc de disque
imagefilledarc($image, ($decal/2), $i, $decal, ($decal/2) , $angle_prec, $angle_suiv, $array_couleur_sombre[$array_index[$n]], IMG_ARC_PIE);
}
}
//création de la tête du camembert
for($n=0;$n<$nbr;$n++)
{
//calcule des angles de debut et fin
if($n==0)
{
$angle_prec = 0;
}
else
{
$nombre = 0;
for($n1=0;$n1<$n;$n1++)
{
$nombre += $array_nombre[$array_index[$n1]];
}
$angle_prec = ($nombre*360/$somme);
}
$angle_suiv = ($angle_prec + ($array_nombre[$array_index[$n]]*360/$somme));
//création de l'arc de disque
imagefilledarc($image, ($decal/2), ($decal/4), $decal, ($decal/2), $angle_prec, $angle_suiv, $array_couleur_clair[$array_index[$n]], IMG_ARC_PIE);
}
// Affichage de l'image
header('Content-type: image/png');
imagepng($image);
imagedestroy($image);
}
}
//Exemple d'utilisation
$test=array('Boujour' => '25;00FF00', 'Salut' => '20;FF4455', 'Kikoo' => '35;00FFFF', 'Coucou' => '25;FFFF00');
camembert($test,'300','300','0','50','2');
?>
Conclusion
Utilisation : Camembert(tableau source , largeur , hauteur , affiché text , epaiseur camembert , nompbre de chiffre apres la virgule);
pour "affiché text": 1 = text affiché 0 = text caché
Voici different exemple dutilisation :
$test=array('Boujours' => '25;00FF00', 'Salut' => '25;FF4455', 'Kikoo' => '25;00FFFF', 'Coucou' => '25;FFFF00'); camembert($test);
camembert($test,' 200,'200','1');
camembert($test,'200,'','1','15', '2');
Historique
- 15 juin 2006 21:51:41 :
- Oublie d'explication
- 17 juin 2006 12:58:54 :
- Modification suivant nos conseils.
Créeation d'un zip dans le quel il y a 2 camembert:
-Selui qui vous est presenté ici.
-Le même mais qui calcule automatiquement la hauteur pour que l'image soit la plus petite possible.
Sources du même auteur
Sources de la même categorie
Commentaires et avis
Discussions en rapport avec ce code source dans le forum
faire un graphique camembert 3D, a partir d'une base de données [ par otacon67 ]
je suis un newbies en PHP, et je voudrais savoir comment creer un camembert en 3D, a partir d'une base de données merci pour votre soutien et vo
Statistique graphique, pourquoi ne parler que de JPgraph ? [ par crazygogo ]
Pourquoi JPGRAPH ??? payant pour les sociétés.... alors qu'il existe ArtiChow : http://www.artichow.orgje fais de la pub pour ma source mais elle perm
Aide balise include [ par spikedu12 ]
Salut! Voila je suis en train de créer un site pour une entreprise, qui a choisi un kit graphique correspondant a leur goût pour accéléré la mise e
statistique de sondage [ par anis82 ]
proposition d'un probléme on a une fiche d'évaluation de formation qu'on veut réaliser une statistique ou les résultat doivent étre
Ie 7 et graphique Excel [ par Limbouille ]
Bonjour,J'ai un problème de compatibilité avec des graphiques Excel et internet explorer 7.J'ai crée des pages web depuis des fichiers excel, generé a
Creation d'un graphique [ par errahmouninawal ]
Bonjour tout le monde ;Je veux créer un graphique 'Statistique' à partir des données MySQL qui s'affiche dans une page webj'ai déjà consulter les solu
probleme avec graph ?urgent!! [ par lune2009 ]
Bonjour mon graph n affiche ni les donnes d'histogramme ni les donnes d'axe X. je sais pas d ou vient le probleme? Voici mon code : <?php require_o
Problème avec un lien dans un envoi mail [ par chatis ]
Bonjour,Voilà 3 jours que je me casse la tête avec ça !!! je dois envoyer un lien de payement saferpay par e-mail, mais dans le lien, dans la partie s
generer un graphique grace au resultat d'un sondage [ par agnes05 ]
Je dois generer a partir des resultats obtenu par un formulaire des graphiques mais je ne sais pas trop comment m'y prendre.merci d'avance
creation de graphique [ par agnes05 ]
je narrive pas a faire apparaitre une photos creer avec gd... et mon code n'a pas d'erreur. je crois que le probleme vient de la facon dont je l'appel
|
Derniers Blogs
TECHDAYS PARIS 2012 : SESSION PLEINIèRE JOUR 3TECHDAYS PARIS 2012 : SESSION PLEINIèRE JOUR 3 par ROMELARD Fabrice
Speaker: Bernard Ourghanlian Cette session est comme chaque jour transmise en live par BrainSonic, et j'ai donc suivi cette troisième pleinière par ce moyen sur mon iPad . Elle est dédiée comme chaque année à la mise en perspective de l'é...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice MISHRA READER : UN LECTEUR RSS TRèS ZUNE STYLE EN OPEN SOURCE !MISHRA READER : UN LECTEUR RSS TRèS ZUNE STYLE EN OPEN SOURCE ! par Vko
Hier durant une session dédiée aux Techdays 2012, j'ai eu le plaisir d'annoncer la sortie de la Béta 2 de Mishra Reader. C'est quoi ? Pour les utilisateurs, c'est une vraie expérience de lecture de flux RSS sur Windows. Rien à voir avec les produit...
Cliquez pour lire la suite de l'article par Vko [FRAMEWORK 4] LES TASKS ET LE THREAD UI[FRAMEWORK 4] LES TASKS ET LE THREAD UI par fathi
Je viens de passer quelques temps au TechDay's et j'ai pu voir pas mal de session intéressante. Par contre une chose m'a un peu étonné lors de certaines de ces sessions qui abordaient les améliorations du framework .NET (donc le 4.5) : en gros, bea...
Cliquez pour lire la suite de l'article par fathi WORKFLOW FOUNDATION 3 A UN PIED DANS LA TOMBEWORKFLOW FOUNDATION 3 A UN PIED DANS LA TOMBE par JeremyJeanson
Depuis déjà un an, je conseille vivement les utilisateurs de Workflow Foundation 3 à migrer vers la version 4. L'information qui va suivre ne devrait donc pas trop prendre au dépourvu les personnes qui m'ont suivi. Je profite de ce poste, pour faire le re...
Cliquez pour lire la suite de l'article par JeremyJeanson TECHDAYS PARIS 2012 : NOUVELLES TENDANCES DU POSTE DE TRAVAIL - BRING YOUR OWN PCTECHDAYS PARIS 2012 : NOUVELLES TENDANCES DU POSTE DE TRAVAIL - BRING YOUR OWN PC par ROMELARD Fabrice
Speakers: Thierry Rapatout, Antoine Petit et Xavier Trebbia Cette session entre dans le cadre des RDV Décideurs des TechDays 2012, elle est liée à la consumérisation de l'IT et la mise en place du "DeskTop as a Service" dans de plus en ...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice
Logiciels
Academy System (17.2.1.0)ACADEMY SYSTEM (17.2.1.0)Logiciel de gestion des établissements.
- élèves/étudiants (inscription, dossier, absence...)
-... Cliquez pour télécharger Academy System Easy-Planning (1.0.0.1)EASY-PLANNING (1.0.0.1)Basé sur les mêmes principes que MyPlanning, Easy-Planning permet de créer des plannings sous la ... Cliquez pour télécharger Easy-Planning COLLECTOR PLUS (3.00B)COLLECTOR PLUS (3.00B)COLLECTOR PLUS version 3.00B est un logiciel utilisant une base de données alimentée par :
- L... Cliquez pour télécharger COLLECTOR PLUS PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO (V7.4)PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO (V7.4)PONAMEDIA TV DEVIENS HELLLOOO FLASH
LA TV SUR VOTRE ORDINATEUR.
Toute une plateforme Multi... Cliquez pour télécharger PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO LettresFaciles 2011 (8.0.0.1)LETTRESFACILES 2011 (8.0.0.1)LettresFaciles est un logiciel facilitant la création et la rédaction de lettres types.
Son inte... Cliquez pour télécharger LettresFaciles 2011
|