日期:2014-05-17 浏览次数:20626 次
<? //参数以a为参数名传入,a的文本形态应该是用“,”分割的若干数字连接的字符串 //这里首先判断a是否存在 if($_GET["a"]=="") die("0"); //将得到的数据分解,存入数组$shuju中 $shuju=split(",",$_GET["a"]); //再次判断数据的合法性,返回错误代码 if(count($shuju)==0) die("2"); //定义整个图形的宽度和高度 //读者可以根据需要修改这两个变量的值 $tukuan=300; $tugao=150; //定义一个数组,用来存放每一个色块的角度范围 $jiaodu = array(); //定义存贮数据和的变量 $total=0; //遍历数组求和 for ($i = 0; $i < count($shuju); $i++) { if(!is_numeric($shuju[$i])) die("1"); $total+=$shuju[$i]; } //再次遍历,计算色块角度并存入数组 for ($i = 0; $i < count($shuju); $i++) { array_push ($jiaodu, round(360*$shuju[$i]/$total)); } //创建图像 $image = imagecreate($tukuan, $tugao); //定义一个灰色背景色,这个颜色其实就是大家很熟悉的页面色系16进制数字表示的#EEEEEE $white = imagecolorallocate($image, 0xEE, 0xEE, 0xEE); //再定义10对深浅对应的彩色,存入二维数组 $yanse = array( array( imagecolorallocate($image, 0x97, 0xbd, 0x00), imagecolorallocate($image, 0x00, 0x99, 0x00), imagecolorallocate($image, 0xcc, 0x33, 0x00), imagecolorallocate($image, 0xff, 0xcc, 0x00), imagecolorallocate($image, 0x33, 0x66, 0xcc), imagecolorallocate($image, 0x33, 0xcc, 0x33), imagecolorallocate($image, 0xff, 0x99, 0x33), imagecolorallocate($image, 0xcc, 0xcc, 0x99), imagecolorallocate($image, 0x99, 0xcc, 0x66), imagecolorallocate($image, 0x66, 0xff, 0x99) ), array( imagecolorallocate($image, 0x4f, 0x66, 0x00), imagecolorallocate($image, 0x00, 0x33, 0x00), imagecolorallocate($image, 0x48, 0x10, 0x00), imagecolorallocate($image, 0x7d, 0x64, 0x00), imagecolorallocate($image, 0x17, 0x30, 0x64), imagecolorallocate($image, 0x1a, 0x6a, 0x1a), imagecolorallocate($image, 0x97, 0x4b, 0x00), imagecolorallocate($image, 0x78, 0x79, 0x3c), imagecolorallocate($image, 0x55, 0x7e, 0x27), imagecolorallocate($image, 0x00, 0x93, 0x37) ) ); //由下至上画10个像素高的深色饼图,作为阴影 $yuanxin_x=$tukuan/2; for ($h = $tugao/2+5; $h > $tugao/2-5; $h--) { $kaishi=0; $jieshu=0; for ($i = 0; $i < count($shuju); $i++) { $kaishi=$kaishi+0; $jieshu=$kaishi+$jiaodu[$i]; $yanse_i=fmod($i,10); imagefilledarc($image,$yuanxin_x,$h,$tukuan,$tugao-20,$kaishi,$jieshu,$yanse[1][$yanse_i],IMG_ARC_PIE); $kaishi+=$jiaodu[$i]; $jieshu+=$jiaodu[$i]; } } //在最高处(也就是$h最小时)画一个浅色饼图,这个浅色图跟先画上的深色饼图就能产生立体效果了 for ($i = 0; $i < count($shuju); $i++) { $kaishi=$kaishi+0; $jieshu=$kaishi+$jiaodu[$i]; $yanse_i=fmod($i,10); imagefilledarc($image, $yuanxin_x, $h, $tukuan, $tugao-20, $kaishi, $jieshu, $yanse[0][$yanse_i], IMG_ARC_PIE); $kaishi+=$jiaodu[$i]; $jieshu+=$jiaodu[$i]; } //设定文件头 header('Content-type: image/png'); //输出图像 imagepng($image); //释放资源 imagedestroy($image); ?>
<? $img_gao=170; $img_kuan=0; $jiange=30;//横坐标点与点之间的间隔,生成的图片宽度会根据传入数据的多少而自动变化 $zuo=20;//左侧留空 $you=20;//右侧留空 $shang=20;//上留空 $xia=20;//下留空 $zuidashujuzhi=1; $p_x = array();//点横坐标 $p_y = array();//点纵坐标 $y_name=split(",",$_GET["x_name"]); if ($_GET["a"]=="") die("error id:0"); $shuju=split(",",$_GET["a"]); //得到纵轴最大值 for($i=0;$i<count($shuju);$i++){ if(!is_numeric($shuju[$i])) die("error id:1"); if($shuju[$i]>$zuidashujuzhi) $zuidashujuzhi=$shuju[$i]; } //得到图像宽度 $img_kuan=$zuo+$you+coun