Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

GRAPHIQUE CAMEMBERT 3D


Information sur la source

Catégorie :Graphique Classé sous : graphique, stat, statistique, camembert, 3d Niveau : Débutant Date de création : 15/06/2006 Date de mise à jour : 17/06/2006 12:58:54 Vu / téléchargé: 12 631 / 583

Note :
Aucune note

Commentaire sur cette source (18)
Ajouter un commentaire et/ou une note

Description

Cliquez pour voir la capture en taille normale
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');
 

Fichier Zip

Pour les "Membres Club", vous pouvez télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !

Télécharger le zip

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.

Commentaires et avis

signaler à un administrateur
Commentaire de coockiesch le 15/06/2006 22:44:34

Salut!
J'ai pas le tps de trop regarder maintenant, je fais juste deux petites remarques:
- utilises empty plutot que == '' dans les tests
- utilises les nombres comme tels et non comme des chaînes de caractères:  if($imlargeur=='')$imlargeur=100; // 100 et pas '100' et ceci partout dans ton script, :)

Autrement, ta fonction peut retourner false en cas d'erreur et non faire un echo... Parfois, on ne veut pas un echo...

@++

R@f

signaler à un administrateur
Commentaire de kankrelune le 16/06/2006 13:24:31

if(!isset($tableau) or $tableau=='')
{
    echo 'Erreur, aucune donnée n\'est entrée ...';
}
else
{


Tu fais comment si on te passe une string en paramètre... .. .

if(!is_array($tableau) || empty($tableau))
    echo 'Erreur, aucune donnée n\'est entrée ...';
else
{


;o)

Comme dit Cookiesch un int et une string c'est pas la même chose pour php...

function camembert($tableau,$imlargeur = 100,$imhauteur = 70,$aftext = false,$camhauteur = 20,$arondi = true)

et puis autant utiliser des booléens à la place des 1/0 pour dire oui/non ($arondi et $aftext)... c'est fait pour... donc...

if($aftext)
{    
   // true
}
else
{
   // false
}


ou encore

for($n=0;$n<$nbr;$n++)

à la place de (encore ce problème de int)

for($n=0;$n<$nbr;$n++)

Voila... j'ais survolé le code mais pas la manière dont tu procède... le code est pas trop mal hormis cette histoire de int/string

@ tchaOo°

ps : tu pourrais en faire une petite class... c'est bien le genre de code qui se passe en poo... .. . ;o)

signaler à un administrateur
Commentaire de TheSin le 16/06/2006 14:18:41

[quote=Kankrelune]
for($n=0;$n<$nbr;$n++)

à la place de (encore ce problème de int)

for($n=0;$n<$nbr;$n++)
[/quote]

Elle est où la différence Kankrelune ? :-P

signaler à un administrateur
Commentaire de kankrelune le 16/06/2006 14:34:53

Non c'est...

for($n=0;$n<$nbr;$n++)

à la place de (encore ce problème de int)

for($n='0';$n<$nbr;$n++)

M'en suis rendu compte trop tard... .. . ;o)

@ tchaOo°

signaler à un administrateur
Commentaire de BEAUBRIUS le 17/06/2006 08:35:17

Bonjour
Alors merci tous le monde pour les conseils.
Je vais modifié le code en consequant.
Par contre KANKRELUNE je suis d'accord au fait de metre $aftext en booléen
Mais ù$arondi doit forcément être un nombre, car c'est le nombre de chiffre aprés la virgule que tu souhait afficher.

signaler à un administrateur
Commentaire de BEAUBRIUS le 17/06/2006 08:46:42

J'ai un petit probleme maintenant.

Je veut que si on presise pas $arondi ai comme valeur 1.
Mais si je veut affiché 0 chiffre apres la virgule, dans l'apelle de la fonction je met 0 a l'argument $arondi.
Mais si je suis vos conseil et que plustot que de metre
if($arondi =='')
je met
if(empty($arondi))
Il va me refaire passé $arondi à 1 ... se que je ne veut pas ...

signaler à un administrateur
Commentaire de TheSin le 17/06/2006 12:30:09

bin un
if ( $arondi === 0 )
ça devrait marcher ça, non ?

signaler à un administrateur
Commentaire de snake94400 le 16/08/2006 18:39:05

Bonjour,
comment changer la couleur de font qui est noir?
merci bien

signaler à un administrateur
Commentaire de Eza le 24/10/2006 21:11:37

Snake pour changer la couleur tu ajoute après

// Création de l'image
$image = imagecreatetruecolor($imlargeur, $imhauteur);

Le code

$background_color = imagecolorallocate ($image, 255, 255, 255);
        imagefill($image,0,0,$background_color); //0,0 représentant le point de départ du remplissage : origine de l'image : en haut à gauche.

signaler à un administrateur
Commentaire de younes371 le 08/11/2006 15:37:18

bonjour,
J'ai telechargé le zip,
Est qu'il faut des includes , puisque j'ai reçu :

Fatal error: Call to undefined function: imagecreatetruecolor() in d:\master\index.php on line 24

Merci

signaler à un administrateur
Commentaire de kankrelune le 08/11/2006 15:46:21

Il faut que la librairie GD soit installée... .. .

http://www.boutell.com/gd/

@ tchaOo°

signaler à un administrateur
Commentaire de younes371 le 08/11/2006 15:56:37

Merci,
j'ai telechargé 2 fichier .zip,
1 :Windows DLL .zip (NOT CURRENTLY FOR PHP)
&
2: Download .zip
lequel est utile ? et comment installé ?
Merci

signaler à un administrateur
Commentaire de kankrelune le 09/11/2006 12:06:00

Si tu es sous windows c'est une extension pour php en .dll tu l'installe comme toutes les extensions pour php... .. .

@ tchaOo°

signaler à un administrateur
Commentaire de espada le 26/06/2007 11:28:23

c'est genial ce code, avec quelques modif pour adapter à mes besoins.... c'est pas un copy right?
merci pour le code!

signaler à un administrateur
Commentaire de espada le 26/06/2007 11:35:33

à propos, y a pas moyen de changer la couleur d'arriere plan?

signaler à un administrateur
Commentaire de BEAUBRIUS le 30/06/2007 18:47:31

bonjour , non c'est pas un copy right , si tu veut le modifier fait toi plaisir , et si tu veut l'ammeniorer c'est encore mieu
apres pour le fon , je me souvien plus du tous comment et loa source , mais il doit y avoir moyen rensengne toi a propo de GD

signaler à un administrateur
Commentaire de Alextasis le 17/09/2007 17:18:04

Très bon script !

Même question que espada..

Est-ce qu'on peut changer la couleur d'arrière plan, en blan, rouge ou vert peu importe...

Merci d'avance pour la réponse !

signaler à un administrateur
Commentaire de guitou_429 le 23/11/2007 09:48:57

Pour changer la couleur de fond, regardez plus haut c'est indiquer :

rajouter :
$background_color = imagecolorallocate ($image, 255, 255, 255);
imagefill($image,0,0,$background_color);

apres la ligne :
$image = imagecreatetruecolor($imlargeur, $imhauteur);

Ajouter un commentaire

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&#233;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 mise a jour de graph via AJAX? [ par LaTatadu91 ] Bonjour a tous; voila&nbsp; sur uen de mes pages php je cr&#233;&#233; un graphique(diagrmme en batons+courbes) a partir de donn&#233;es MYSQL ces d Anumation graphique entre 2 pages [ par kleos chaos ] Bonjour &#224; tous Voyez vous , cela fait pas mal de temps que je cherche ce script et que je ne le trouve pas. J'ai essayer Javascript, php , CSS, r créer des statistique a partir d une bdd [ par gabs77 ] bonjour je suis d&#233;butant en php et je voudrais savoir comment on r&#233;alise des statistiques en histogramme ou en camembert par exemplea partir Rafraichir une page [ par niko14 ] Hello everybody!!Voila le bin's!!En fait voila, j'ai une page ou on choisit un type de budget et on valide!Qd on a valid&#233; on arrive sur une page Je cherche un editeur php graphique sous linux, c'est urgent!!!!!!!!!! [ par sousou_one ] Bonjour tt le monde, Je cherche un editeur php graphique sous linux, j'ai une distribution SUSE 10.0 est ce que quelqu'un peut m'aider? Merci d'avance Graphique sous JpGraph !!! [ par lolo80000 ] Bonjour &#224; tous,Voila, pour r&#233;aliser des graphiques en php j'utilise Jpgraph comme librairie. Apres plusieurs recherches j'ai trouver comment Interface DCOM Excel afficher les pourcentages d'un camembert [ par phdj238 ] Après avoir ouvert l'interface new COM("Excel.application") Défini les cellules de ma feuille Excel, généré mon graphique camenbert J'essaie de mont tableau de couleurs comme dans word [ par niko14 ] slt tout le monde!VOila mon probleme!J'ai un camembert donc je fais choisir les couleurs pour les differentes repartitions et en fait j'avais fait une


Nos sponsors

Sondage...

CalendriCode

Octobre 2008
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
2728293031  

Consulter la suite du CalendriCode

Téléchargements

Logiciels à télécharger sur le même thème :



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel BAÏSE, Merci à Vincent pour ses précieux conseils
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés
Temps d'éxécution de la page : 0,31 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.