begin process at 2010 02 10 06:35:54
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Graphique

 > GRAPHIQUE CAMEMBERT 3D

GRAPHIQUE CAMEMBERT 3D


 Information sur la source

Note :
Aucune note
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é :16 676 / 654

Auteur : BEAUBRIUS

Ecrire un message privé
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

Les Membres Club peuvent 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.

 Sources du même auteur

Source avec Zip SYSTEM DE NEWS ( JUSTE LA BASE ) SANS BDD
DONNER UNE DATE , OBTENER UN JOUR

 Sources de la même categorie

Source avec Zip RECHERCHE DE MOTIF DANS UNE IMAGE par ParseError
BARRES PARAMÉTRABLES EN DÉGRADÉ DE COULEUR ET AVEC TEXTE DA... par hornetbzz
Source avec Zip Source avec une capture GALERIE PHOTO SIMPLE À GÉRER par francky6691
Source avec Zip Source avec une capture DIAPORAMA AVEC AJOUT ET REDIMENSIONEMENT DE PHOTOS, CRÉATION... par giloum
Source avec Zip Source avec une capture AFFICHAGE INFOBULLE SUR GRAPHIQUE ARTICHOW par nirronico

 Sources en rapport avec celle ci

Source avec Zip Source avec une capture STATISTIQUE GRAPHIQUE (COMPOSANT ARTICHOW) par crazygogo
Source avec Zip Source avec une capture CAMEMBERT 2D/3D par softwareds
Source avec Zip Source avec une capture LES CAMEMBERTS 3D par opossum_farceur
Source avec une capture CRÉATION D'UNE IMAGE DE STATISTIQUE : LE CAMEMBERT par wizard512
Source avec Zip Source avec une capture UN GRAPHIQUE CAMEMBERT EN 3D par pgpp

Commentaires et avis

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

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)

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

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°

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.

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 ...

Commentaire de TheSin le 17/06/2006 12:30:09

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

Commentaire de snake94400 le 16/08/2006 18:39:05

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

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.

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

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°

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

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°

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!

Commentaire de espada le 26/06/2007 11:35:33

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

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

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 !

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 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 : &lt;?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


Nos sponsors


Sondage...

CalendriCode

Février 2010
LMMJVSD
1234567
891011121314
15161718192021
22232425262728

Consulter la suite du CalendriCode

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), 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

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,749 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales