5/5 (34 avis)
Vue 31 797 fois - Téléchargée 2 010 fois
<?php $freq=array(15,18,8,10,7,2,1); camembert($freq,0,800,400,15,10,1); //$freq = table des valeurs (1 dimension) //$ord = ordre [1=croissant | 2=décroissant] //$rm,$rn = rayon max,min de l'ellipse //$h = épaisseur //$d1 = décalage de la 1ere tranche (en px) //$dt = [1=décale ttes les tranches de $d1 px] function camembert($freq,$ord,$rm,$rn,$h,$d1,$dt) { if($ord==1) sort($freq); if($ord==2) rsort($freq); $nb=count($freq); $somme=array_sum($freq); $im=ImageCreate(intval($rm+$d1*$dt*2+$d1*2+8),intval($rn+$d1*$dt*2+$h*3+8)); //3D $white=ImageColorAllocate($im,255,255,255); ImageColorTransparent($im,$white); $pal=DoubleColorSet($im); $im2=ImageCreate(intval($rm+$d1*$dt*2+$d1*2+8),intval($rn+$d1*$dt*2+$h*3+8)); //dessus $white=ImageColorAllocate($im2,255,255,255); ImageColorTransparent($im2,$white); DoubleColorSet($im2); for($last=0,$i=0;$i<$nb;$i++) { $degree=360*($freq[$i]/$somme); $col=$pal[(192/($nb+1))*$i]; ImageFilledArc($im,(ImageSX($im)/2)+($i==0|$dt)*$d1*cos(($last+$degree/2)/360*2*M_PI),(ImageSY($im)/2)+($i==0|$dt)*$d1*sin(($last+$degree/2)/360*2*M_PI)*($rn/$rm*1.5),$rm,$rn,$last,$last+$degree,$col,IMG_ARC_NOFILL&IMG_ARC_EDGED); $last+=$degree; } ImageCopy($im2,$im,0,0,0,0,ImageSX($im),ImageSY($im)); ImageColorMod($im2,64); for($i=0;$i<$h;$i++) //effet 3D en recopiant l'image h fois sur elle même ImageCopy($im,$im,0,0,0,1,ImageSX($im),ImageSY($im)); ImageCopy($im,$im2,0,0,0,$h,ImageSX($im),ImageSY($im)); drawPNG($im); ImageDestroy($im);ImageDestroy($im2); } function ImageColorMod($im,$mod) //décale les couleurs d'une palette de $mod composantes r v b { $nb=ImageColorsTotal($im); for($i=1;$i<$nb;$i++) //ne prend pas la 1e couleur (généralement le fond en transparent) { $rvb=ImageColorsForIndex($im,$i); if(($mod+$rvb['red'])>255) $rvb['red']=255-$mod; if(($mod+$rvb['green'])>255) $rvb['green']=255-$mod; if(($mod+$rvb['blue'])>255) $rvb['blue']=255-$mod; if(($mod+$rvb['red'])<0) $rvb['red']=-$mod; if(($mod+$rvb['green'])<0) $rvb['green']=-$mod; if(($mod+$rvb['blue'])<0) $rvb['blue']=-$mod; ImageColorSet($im,$i,$mod+$rvb['red'],$mod+$rvb['green'],$mod+$rvb['blue']); } } function DoubleColorSet($im) //192 couleurs { for($i=0;$i<64;$i++) { $pal[$i]=ImageColorAllocate($im,0,$i*3,192); $pal[$i+64]=ImageColorAllocate($im,$i*3,192-$i*3,192); $pal[$i+64*2]=ImageColorAllocate($im,255-$i*4,0,192); } return($pal); } function drawPNG($im){static $n;$n++;imagePNG($im,"tmp$n.png");echo"<img src=\"tmp$n.png\">";} ?>
7 août 2008 à 14:44
17 juil. 2007 à 18:07
18 mai 2007 à 06:15
Non, plus de modif, et pour les histogrammes y'a déjà 3 tonnes de scripts qui font ça.
Si je réécris ce script, ce sera tellement beau que j'aurai envie de le garder pour moi (bouuh l'égoïste !!) :D
22 mars 2007 à 11:48
15 févr. 2006 à 12:02
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.