Graphique camembert 3d

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

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.