饼图 <div class="codetitle"><a style="CURSOR: pointer" data="68732" class="copybut" id="copybut68732" onclick="doCopy('code68732')"> 代码如下:<div class="codebody" id="code68732"> <?php //+------------------------+ //| pie3dfun.PHP//公用函数 | //+------------------------+ define("ANGLE_STEP",3); //定义画椭圆弧时的角度步长 define("FONT_USED","C:WINDOWSFontssimhei.ttf"); // 使用到的字体文件位置 function draw_getdarkcolor($img,$clr) //求$clr对应的暗色 { $rgb = imagecolorsforindex($img,$clr); return array($rgb["red"]/2,$rgb["green"]/2,$rgb["blue"]/2); } function draw_getexy($a,$b,$d) //求角度$d对应的椭圆上的点坐标 { $d = deg2rad($d); return array(round($aCos($d)),round($bSin($d))); } function draw_arc($img,$ox,$oy,$a,$sd,$ed,$clr) //椭圆弧函数 { $n = ceil(($ed-$sd)/ANGLE_STEP); $d = $sd; list($x0,$y0) = draw_getexy($a,$d); for($i=0; $i<$n; $i++) { $d = ($d+ANGLE_STEP)>$ed?$ed:($d+ANGLE_STEP); list($x,$y) = draw_getexy($a,$d); imageline($img,$x0+$ox,$y0+$oy,$x+$ox,$y+$oy,$clr); $x0 = $x; $y0 = $y; } } function draw_sector($img,$clr) //画扇面 { $n = ceil(($ed-$sd)/ANGLE_STEP); $d = $sd; list($x0,$clr); for($i=0; $i<$n; $i++) { $d = ($d+ANGLE_STEP)>$ed?$ed:($d+ANGLE_STEP); list($x,$clr); $x0 = $x; $y0 = $y; } imageline($img,$clr); list($x,$y) = draw_getexy($a/2,$b/2,($d+$sd)/2); imagefill($img,$clr); } function draw_sector3d($img,$v,$clr) //3d扇面 { draw_sector($img,$clr); if($sd<180) { list($R,$G,$B) = draw_getdarkcolor($img,$clr); $clr=imagecolorallocate($img,$R,$B); if($ed>180) $ed = 180; list($sx,$sy) = draw_getexy($a,$sd); $sx += $ox; $sy += $oy; list($ex,$ey) = draw_getexy($a,$ed); $ex += $ox; $ey += $oy; imageline($img,$sx,$sy,$sy+$v,$clr); imageline($img,$ex,$ey,$ey+$v,$clr); draw_arc($img,$oy+$v,$clr); list($sx,($sd+$ed)/2); $sy += $oy+$v/2; $sx += $ox; imagefill($img,$clr); } } function draw_getindexcolor($img,$clr) //RBG转索引色 { $R = ($clr>>16) & 0xff; $G = ($clr>>8)& 0xff; $B = ($clr) & 0xff; return imagecolorallocate($img,$B); } // 绘图主函数,并输出图片 // $datLst 为数据数组,$datLst 为标签数组,$datLst 为颜色数组 // 以上三个数组的维数应该相等 function draw_img($datLst,$labLst,$clrLst,$a=200,$b=90,$v=20,$font=10) { $ox = 5+$a; $oy = 5+$b; $fw = imagefontwidth($font); $fh = imagefontheight($font); $n = count($datLst);//数据项个数 $w = 10+$a2; $h = 10+$b2+$v+($fh+2)$n; $img = imagecreate($w,$h); //转RGB为索引色 for($i=0; $i<$n; $i++) $clrLst[$i] = draw_getindexcolor($img,$clrLst[$i]); $clrbk = imagecolorallocate($img,0xff,0xff); $clrt = imagecolorallocate($img,0x00,0x00); //填充背景色 imagefill($img,$clrbk); //求和 $tot = 0; for($i=0; $i<$n; $i++) $tot += $datLst[$i]; $sd = 0; $ed = 0; $ly = 10+$b2+$v; for($i=0; $i<$n; $i++) { $sd = $ed; $ed += $datLst[$i]/$tot360; //画圆饼 draw_sector3d($img,$clrLst[$i]); //$sd,$clrLst[$i]); //画标签 imagefilledrectangle($img,5,$ly,5+$fw,$ly+$fh,$clrLst[$i]); imagerectangle($img,$clrt); //imagestring($img,$font,5+2$fw,$labLst[$i].":".$datLst[$i]."(".(round(10000($datLst[$i]/$tot))/100)."%)",$clrt); $str = iconv("GB2312","UTF-8",$labLst[$i]); ImageTTFText($img,$ly+13,$clrt,FONT_USED,$str.":".$datLst[$i]."(".(round(10000($datLst[$i]/$tot))/100)."%)"); $ly += $fh+2; } //输出图形 header("Content-type: image/png"); //输出生成的图片 imagepng($img); } $datLst = array(30,20,10,20); //数据 $labLst = array("浙江省","广东省","上海市","北京市","福建省","江苏省","湖北省","安徽省"); //标签 $clrLst = array(0x99ff00,0xff6666,0x0099ff,0xff99ff,0xffff99,0x99ffff,0xff3333,0x009999); //画图 draw_img($datLst,$clrLst); ?>
 (编辑:李大同)
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!
|