首先创建一个表单提交的页面,并且使用session会话的方式,将表单提交的值保存到session会话中,表单页面的代码我就不写了,获取到值以后对数据进行处理,然后绘制成图:
具体绘制与数据处理代码:
session_start();
//将保存在session会话中值提取出来,保存到szz数组中
$sz =
array(@$_SESSION['zs'],@$_SESSION['ls'],@$_SESSION['le'],@$_SESSION['ld'],@$_SESSION['ww']);
//创建画布
$im =
imagecreatetruecolor(400, 400);
//创建五个颜色,用于每个扇形区域
$a =
imagecolorallocate($im, 255, 0, 0);
$b =
imagecolorallocate($im, 0, 255, 0);
$c =
imagecolorallocate($im, 0, 0, 255);
$d =
imagecolorallocate($im, 255, 255, 0);
$e =
imagecolorallocate($im, 255, 0, 255);
//创建一个黑色的颜色(根据需要使用其他颜色),用于扇形上文字的显示
$black =
imagecolorallocate($im, 0, 0, 0);
//将五个颜色保存到数组中
$ys =
array($a,$b,$c,$d,$e);
//定义一个变量,用于保存得到数据的总和
$sum = 0;
for($i = 0; $i
< 5; $i ++){
$sum += $sz[$i];
}
//将每个姓名保存到这个数组中
$tx =
array("张三","李四","刘二","刘大","王五");
//将每个用户所在的百分比保存到数组中
$bf =
array((int)($sz[0]/$sum*100),(int)($sz[1]/$sum*100),(int)($sz[2]/$sum*100),(int)($sz[3]/$sum*100),(int)($sz[4]/$sum*100));
$angle = 0;//扇形转动的角度
$temp = 0;
//保存每一个扇形区域中间位置的角度(相对于x正半轴)
for($i = 0; $i
< 5; $i ++){
//每循环一次就将当前扇形区域的中间角度保存
$temp = (($sz[$i]/$sum)*360)/2 + $angle;
//绘制扇形/圆/椭圆
//imagefilledarc(resource image,int cx,int cy,int width,int
height,int start,int end,int color,int style);
//参数说明:
//image:上面创建的画布对象
//cx、cy:圆心坐标
//width、height:水平距离,垂直距离,当这两个值相同时为圆,不同是为椭圆
//start、end:绘制的开始角度,绘制的结束角度(按顺时钟绘制,开始位置是x轴的正半轴)
//color:颜色(也可以是绘制线的颜色,也可以是填充色,看最后一个属性)
imagefilledarc($im,200,200,300,300,$angle,$angle
+ ($sz[$i]/$sum)*360,$ys[$i],IMG_ARC_PIE);
//图片上面的字体
//imagettftext(resource image,float size,float
angle,int x,int y,int color,string font_file,string text);
//参数说明:
//image:上面创建的画布对象
//size:字体大小
//angle:转动的角度(按逆时针旋转)
//x、y:字体显示的左上角坐标
//color:文字颜色
//font_file:文字样式的路径(一般在电脑C磁盘下的windows下的font文件夹下)
//text:显示的文本
imagettftext($im, 15, -($temp), 200 +
50*cos($temp/180*pi()), 150 + 50*sin($temp/180*pi()), $black,
"C:/Windows/Fonts/simkai.ttf", $tx[$i]." ".$bf[$i]."%");
$angle += ($sz[$i]/$sum)*360;
}
header('content-type:image/jpeg');
imagejpeg($im);
效果图:
填写图片摘要(选填)
效果图: