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