Graphique camembert 3d

Soyez le premier à donner votre avis sur cette source.

Vue 23 808 fois - Téléchargée 870 fois

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 / Exemple :


<?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');

Codes Sources

A voir également

Ajouter un commentaire Commentaires
Messages postés
1
Date d'inscription
vendredi 2 mars 2007
Statut
Membre
Dernière intervention
23 novembre 2007

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);
Messages postés
6
Date d'inscription
vendredi 13 décembre 2002
Statut
Membre
Dernière intervention
17 septembre 2007

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 !
Messages postés
120
Date d'inscription
lundi 19 mai 2003
Statut
Membre
Dernière intervention
8 février 2008

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
Messages postés
26
Date d'inscription
samedi 23 décembre 2006
Statut
Membre
Dernière intervention
27 février 2008

à propos, y a pas moyen de changer la couleur d'arriere plan?
Messages postés
26
Date d'inscription
samedi 23 décembre 2006
Statut
Membre
Dernière intervention
27 février 2008

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

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.