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
UNE JOLIE-HORLOGE ET PAS QU'UN PEU !UNE JOLIE-HORLOGE ET PAS QU'UN PEU ! par neodante
Pour les possesseurs d'iPhone, ça y est Bijin Tokei - qui se traduit littéralement en Français par " Jolie Horloge " - est arrivé et GRATUITEMENT s'il vous plaît ! Après la version Tokyo, Hokkaido, night club, racing, Gal, "pour les mademoiselles'", . voi...
Cliquez pour lire la suite de l'article par neodante TECHDAYS PARIS 2010 : CONNECTEZ VOS DONNéES à SHAREPOINT 2010 AVEC LES BUSINESS CONNECTIVITY SERVICESTECHDAYS PARIS 2010 : CONNECTEZ VOS DONNéES à SHAREPOINT 2010 AVEC LES BUSINESS CONNECTIVITY SERVICES par ROMELARD Fabrice
Animé par: Gaetan Bouveret et Julien Chomarat Business Connectivity Services (BCS) est dans SharePoint 2010 la version 2 de Business Data Catalog (BDC dans SharePoint 2007). Il s'agit de la solution permettant de visualiser des données provenan...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice [DIVERS] SUIVRE VOS SéRIES PRéFéRéS SUR LA TOILE[DIVERS] SUIVRE VOS SéRIES PRéFéRéS SUR LA TOILE par orion
Comme de nombreux geek, je suis un grand amateur de série TV et je rate régulièrement des épisodes de mes séries préférés. Une solution s'offre à vous avec ce merveilleux site : Tv Gorge - www.tvgorge.com Moteur de recherche à l'appui, vous pouvez ...
Cliquez pour lire la suite de l'article par orion TECHDAYS PARIS 2010 : LA BI DANS SHAREPOINT 2010TECHDAYS PARIS 2010 : LA BI DANS SHAREPOINT 2010 par ROMELARD Fabrice
Animé par: Vincent Bellet et Baptiste Giraudier La BI dans SharePoint 2010, Les nouveaux services d'application dans SP2010 et SQL Server Reporting services 2008 R2. La BI dans SharePoint est généralisée pour tous afin de permettre à tous les coll...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice
Forum
HTML VERS PDFHTML VERS PDF par spike911
Cliquez pour lire la suite par spike911
Logiciels
DB-MAIN (9.1.0)DB-MAIN (9.1.0)DB-MAIN is a data-modeling and data-architecture tool. It is designed to help developers and anal... Cliquez pour télécharger DB-MAIN Xilisoft DPG Convertisseur (5.1.37.0120)XILISOFT DPG CONVERTISSEUR (5.1.37.0120)Xilisoft DPG Convertisseur offre aux fans de Nintendo DS une bonne solution leur permettant de dé... Cliquez pour télécharger Xilisoft DPG Convertisseur GraphicsGale (2.01.01)GRAPHICSGALE (2.01.01)GraphicsGale est un logiciel de PixelArt avec de nombreuse fonctionnalités permettant de réalisé ... Cliquez pour télécharger GraphicsGale Architecte 3D (Platinum 2010)ARCHITECTE 3D (PLATINUM 2010)Architecte 3D Platinium vous permet de concevoir facilement les plans votre future maison, de l'é... Cliquez pour télécharger Architecte 3D TeamViewer 5 (TeamViewer 5)TEAMVIEWER 5 (TEAMVIEWER 5)Dépanner un ami,expliquer une manipulation devient un jeu d'enfant.
Prise en main d'un autre ord... Cliquez pour télécharger TeamViewer 5
|