<p> <img src="/content/uploadfile/200805/2008053117322080.gif" onclick="get_larger(this)" /></p><p> 源代码:</p><code>//+------------------------+<br />//|pie3dfun.PHP//公用函数|<br />//+------------------------+<br />define("ANGLE_STEP",5);//定义画椭圆弧时的角度步长<br />functiondraw_getdarkcolor($img,$clr)//求$clr对应的暗色<br />{<br />$rgb=imagecolorsforindex($img,$clr);<br />returnarray($rgb["red"]/2,$rgb["green"]/2,$rgb["blue"]/2);<br />}<br />functiondraw_getexy($a,$b,$d)//求角度$d对应的椭圆上的点坐标<br />{<br />$d=deg2rad($d);<br />returnarray(round($a*Cos($d)),round($b*Sin($d)));<br />}<br />functiondraw_arc($img,$ox,$oy,$a,$b,$sd,$ed,$clr)//椭圆弧函数<br />{<br />$n=ceil(($ed-$sd)/ANGLE_STEP);<br />$d=$sd;<br />list($x0,$y0)=draw_getexy($a,$b,$d);<br />for($i=0;$i<$n;$i++)<br />{<br />$d=($d+ANGLE_STEP)>$ed?$ed:($d+ANGLE_STEP);<br />list($x,$y)=draw_getexy($a,$b,$d);<br />imageline($img,$x0+$ox,$y0+$oy,$x+$ox,$y+$oy,$clr);<br />$x0=$x;<br />$y0=$y;<br />}<br />}<br />functiondraw_sector($img,$ox,$oy,$a,$b,$sd,$ed,$clr)//画扇面<br />{<br />$n=ceil(($ed-$sd)/ANGLE_STEP);<br />$d=$sd;<br />list($x0,$y0)=draw_getexy($a,$b,$d);<br />imageline($img,$x0+$ox,$y0+$oy,$ox,$oy,$clr);<br />for($i=0;$i<$n;$i++)<br />{<br />$d=($d+ANGLE_STEP)>$ed?$ed:($d+ANGLE_STEP);<br />list($x,$y)=draw_getexy($a,$b,$d);<br />imageline($img,$x0+$ox,$y0+$oy,$x+$ox,$y+$oy,$clr);<br />$x0=$x;<br />$y0=$y;<br />}<br />imageline($img,$x0+$ox,$y0+$oy,$ox,$oy,$clr);<br />list($x,$y)=draw_getexy($a/2,$b/2,($d+$sd)/2);<br />imagefill($img,$x+$ox,$y+$oy,$clr);<br />}<br />functiondraw_sector3d($img,$ox,$oy,$a,$b,$v,$sd,$ed,$clr)//3d扇面<br />{<br />draw_sector($img,$ox,$oy,$a,$b,$sd,$ed,$clr);<br />if($sd<180)<br />{<br />list($R,$G,$B)=draw_getdarkcolor($img,$clr);<br />$clr=imagecolorallocate($img,$R,$G,$B);<br />if($ed>180)$ed=180;<br />list($sx,$sy)=draw_getexy($a,$b,$sd);<br />$sx+=$ox;<br />$sy+=$oy;<br />list($ex,$ey)=draw_getexy($a,$b,$ed);<br />$ex+=$ox;<br />$ey+=$oy;<br />imageline($img,$sx,$sy,$sx,$sy+$v,$clr);<br />imageline($img,$ex,$ey,$ex,$ey+$v,$clr);<br />draw_arc($img,$ox,$oy+$v,$a,$b,$sd,$ed,$clr);<br />list($sx,$sy)=draw_getexy($a,$b,($sd+$ed)/2);<br />$sy+=$oy+$v/2;<br />$sx+=$ox;<br />imagefill($img,$sx,$sy,$clr);<br />}<br />}<br />functiondraw_getindexcolor($img,$clr)//RBG转索引色<br />{<br />$R=($clr>>16)&0xff;<br />$G=($clr>>8)&0xff;<br />$B=($clr)&0xff;<br />returnimagecolorallocate($img,$R,$G,$B);<br />}<br />//绘图主函数,并输出图片<br />//$datLst为数据数组,$datLst为标签数组,$datLst为颜色数组<br />//以上三个数组的维数应该相等<br />functiondraw_img($datLst,$labLst,$clrLst,$a=250,$b=120,$v=20,$font=10)<br />{<br />$ox=5+$a;<br />$oy=5+$b;<br />$fw=imagefontwidth($font);<br />$fh=imagefontheight($font);<br />$n=count($datLst);//数据项个数<br />$w=10+$a*2;<br />$h=10+$b*2+$v+($fh+2)*$n;<br />$img=imagecreate($w,$h);<br />//转RGB为索引色<br />for($i=0;$i<$n;$i++)<br />$clrLst[$i]=draw_getindexcolor($img,$clrLst[$i]);<br />$clrbk=imagecolorallocate($img,0xff,0xff,0xff);<br />$clrt=imagecolorallocate($img,0x00,0x00,0x00);<br />//填充背景色<br />imagefill($img,0,0,$clrbk);<br />//求和<br />$tot=0;<br />for($i=0;$i<$n;$i++)<br />$tot+=$datLst[$i];<br />$sd=0;<br />$ed=0;333<br />$ly=10+$b*2+$v;<br />for($i=0;$i<$n;$i++)<br />{<br />$sd=$ed;<br />$ed+=$datLst[$i]/$tot*360;<br />//画圆饼<br />draw_sector3d($img,$ox,$oy,$a,$b,$v,$sd,$ed,$clrLst[$i]);//$sd,$ed,$clrLst[$i]);<br />//画标签<br />imagefilledrectangle($img,5,$ly,5+$fw,$ly+$fh,$clrLst[$i]);<br />imagerectangle($img,5,$ly,5+$fw,$ly+$fh,$clrt);<br />//imagestring($img,$font,5+2*$fw,$ly,$labLst[$i].":".$datLst[$i]."(".(round(10000*($datLst[$i]/$tot))/100)."%)",$clrt);<br />$str=iconv("GB2312","UTF-8",$labLst[$i]);<br />ImageTTFText($img,$font,0,5+2*$fw,$ly+13,$clrt,"./simsun.ttf",$str.":".$datLst[$i]."(".(round(10000*($datLst[$i]/$tot))/100)."%)");<br />$ly+=$fh+2;<br />}<br />//输出图形<br />header("Content-type:image/png");<br />//输出生成的图片<br />$imgFileName="../temp/".time().".png";<br />imagepng($img,$imgFileName);<br />echo'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''<br />}<br />$datLst=array(30,10,20,20,10,20,10,20);//数据<br />$labLst=array("中国科技大学","安徽理工大学","清华大学","北京大学","南京大学","上海大学","河海大学","中山大学");//标签<br />$clrLst=array(0x99ff00,0xff6666,0x0099ff,0xff99ff,0xffff99,0x99ffff,0xff3333,0x009999);<br />//画图<br />draw_img($datLst,$labLst,$clrLst);<br />?></code></p>