//
图形类->gd.class.php
<?
php
class
GD{
/*
函数说明
$data:y轴数据(数组)
$graphdata:y轴数据--百分比(数组)
$label:x轴数据(数组)
$height:图像高度
$width:图像宽度
$font:字号
$dot:决定点的大小
$bg:背景色
$line :线色
$text :文本色
$dotcolor:点色
$file:输出图像文件名
*/
//
线形图的函数
function
qximage(
$data
,
$graphdata
,
$label
,
$height
,
$width
,
$font
,
$dot
,
$bg
,
$line
,
$text
,
$dotcolor
,
$file
)
{
$jc
=
$height
/
100
;
$fontwidth
=
imagefontwidth (
$font
);
$fontheight
=
imagefontheight(
$font
);
$image
=
imagecreate (
$width
,
$height
+
20
);
$bg
=
imagecolorallocate(
$image
,
$bg
[
0
]
,
$bg
[
1
]
,
$bg
[
2
]);
$line
=
imagecolorallocate(
$image
,
$line
[
0
]
,
$line
[
1
]
,
$line
[
2
]);
$text
=
imagecolorallocate(
$image
,
$text
[
0
]
,
$text
[
1
]
,
$text
[
2
]);
$dotcolor
=
imagecolorallocate(
$image
,
$dotcolor
[
0
]
,
$dotcolor
[
1
]
,
$
$dotcolor
[
2
]);
imageline (
$image
,
0
,
0
,
0
,
$height
,
$line
);
imageline(
$image
,
0
,
$height
,
$width
,
$height
,
$line
);
for
(
$i
=
1
;
$i
<
11
;
$i
++
)
{
imagedashedline(
$image
,
0
,
$height
-
$jc
*
$i
*
10
,
$width
,
$height
-
$jc
*
$i
*
10
,
$line
);
imagestring (
$image
,
$font
,
0
,
$height
-
$jc
*
$i
*
10
,
$i
*
10
,
$text
);
}
for
(
$i
=
0
;
$i
{
#
echo $tmp." ";
$x1
=
((
$width
-
50
)
/
count
(
$data
))
*
(
$i
)
+
40
;
#
echo $x1 ." ";
$y1
=
$height
-
$graphdata
[
$i
]
*
$jc
;
$x2
=
$x1
;
$y2
=
$y1
+
$graphdata
[
$i
]
*
$jc
;
#
echo $y1." ";
imagestring(
$image
,
$font
,
$x1
,
$y1
-
2
*
$fontheight
,
$graphdata
[
$i
]
.
"
%(
"
.
$data
[
$i
]
.
"
)
"
,
$text
);
imagearc (
$image
,
$x1
,
$y1
,
$dot
,
$dot
,
0
,
360
,
$dotcolor
);
imagefilltoborder (
$image
,
$x1
,
$y1
,
$dotcolor
,
$dotcolor
);
imagestring (
$image
,
$font
,
$x1
,
$y2
,
$label
[
$i
]
,
$text
);
if
(
$i
>
0
)
{
imageline(
$image
,
$tmpx1
,
$tmpy1
,
$x1
,
$y1
,
$line
);
}
$tmpx1
=
$x1
;
$tmpy1
=
$y1
;
}
imagegif (
$image
,
$file
);
}
//
为了方便起见,我又做了一个函数来制作柱型图
/*
参数说明:
$graphdata:百分比数据(y轴)
$label:x轴标题
$data:实际数据(y轴)
$graphwidth:图像宽度
$graphheight:图像高度
$graphscale:高度因子(为$graphheight/100)
$graphfont:字体号
$bg;背景颜色值
$text:文本颜色值
$grid:边线颜色值
$bar:柱的颜色值
$bz:备注(不支持中文呀)
*/
function
timage(
$graphdata
,
$label
,
$data
,
$graphwidth
,
$graphheight
,
$graphscale
,
$graphfont
,
$bg
,
$text
,
$grid
,
$bar
,
$bz
)
{
header
(
"
Content-type:image/gif
"
);
$image
=
imagecreate(
$graphwidth
+
50
,
$graphheight
+
50
);
$bgcolor
=
imagecolorallocate (
$image
,
$bg
[
0
]
,
$bg
[
1
]
,
$bg
[
2
]);
$textcolor
=
imagecolorallocate (
$image
,
$text
[
0
]
,
$text
[
1
]
,
$text
[
2
]);
$gridcolor
=
imagecolorallocate (
$image
,
$grid
[
0
]
,
$grid
[
1
]
,
$grid
[
2
]);
$barcolor
=
imagecolorallocate (
$image
,
$bar
[
0
]
,
$bar
[
1
]
,
$bar
[
2
]);
$gridabelwidth
=
imagefontwidth(
$graphfont
)
*
3
+
1
;
$gridableheight
=
imagefontheight (
$graphfont
);
imageline(
$image
,
$gridlabelwidth
,
0
,
$gridlabelwidth
,
$graphheight
-
1
,
$gridcolor
);
imageline(
$image
,
0
,
$graphheight
-
1
,
$graphwidth
-
1
,
$graphheight
-
1
,
$gridcolor
);
for
(
$i
=
0
;
$i
<
$graphheight
;
$i
+=
$graphheight
/
10
)
{
imagedashedline (
$image
,
0
,
$i
,
$graphwidth
-
1
,
$i
,
$gridcolor
);
imagestring(
$image
,
$graphfont
,
0
,
$i
,
round
((
$graphheight
-
$i
)
/
$graphscale
)
,
$textcolor
);
}
$barwidth
=
((
$graphwidth
-
$gridlabelwidth
)
/
count
(
$graphdata
))
-
30
;
#
¿ØÖÆÖùµÄ×
&
Uuml;
&
iquest;í
&
para;
&
Egrave;
for
(
$i
=
0
;
$i
{
$bartopx
=
$gridlabelwidth
+
((
$i
+
1
)
*
20
)
+
(
$i
*
$barwidth
);
#
¿ØÖÆÖù¿¿×
ó
&
micro;
&
Auml;
&
frac34;à
&
Agrave;
&
euml;
$barbottomx
=
$bartopx
+
$barwidth
;
$barbottomy
=
$graphheight
-
1
;
#
¿ØÖÆÖùµÄϱ
&
szlig;
&
frac12;
&
ccedil;
$bartopy
=
$barbottomy
-
(
$graphdata
[
$i
]
*
$graphscale
);
imagefilledrectangle
(
$image
,
$bartopx
,
$bartopy
,
$barbottomx
,
$barbottomy
,
$barcolor
);
$labelx1
=
$bartopx
;
$labely1
=
$bartopy
-
15
;
$labelx2
=
$bartopx
;
$labely2
=
$graphheight
;
imagestring(
$image
,
$graphfont
,
$labelx1
,
$labely1
,
"
$graphdata
[$i]
"
.
"
%
"
,
$textcolor
);
imagestring(
$image
,
$graphfont
,
$labelx2
,
$labely2
,
"
$label[$i]
"
,
$textcolor
);
imagestringup (
$image
,
$graphfont
,
$labelx1
+
10
,
$labely1
-
$gridableheight
,
"
$data[$i]
"
,
$textcolor
);
}
imagestring(
$image
,
$graphfont
,
1
,
$graphheight
+
30
,
$bz
,
$textcolor
);
imagegif (
$image
);
}
//
PHP数据饼图
define
(
"
ANGLE_STEP
"
,
5
);
//
定义画椭圆弧时的角度步长
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
(
$a
*
Cos
(
$d
))
,
round
(
$b
*
Sin
(
$d
)));
}
function
draw_arc(
$img
,
$ox
,
$oy
,
$a
,
$b
,
$sd
,
$ed
,
$clr
)
//
椭圆弧函数
{
$n
=
ceil
((
$ed
-
$sd
)
/
ANGLE_STEP);
$d
=
$sd
;
list
(
$x0
,
$y0
)
=
draw_getexy(
$a
,
$b
,
$d
);
for
(
$i
=
0
;
$i
<
$n
;
$i
++
)
{
$d
=
(
$d
+
ANGLE_STEP)
>
$ed
?
$ed
:
(
$d
+
ANGLE_STEP);
list
(
$x
,
$y
)
=
draw_getexy(
$a
,
$b
,
$d
);
imageline(
$img
,
$x0
+
$ox
,
$y0
+
$oy
,
$x
+
$ox
,
$y
+
$oy
,
$clr
);
$x0
=
$x
;
$y0
=
$y
;
}
}
function
draw_sector(
$img
,
$ox
,
$oy
,
$a
,
$b
,
$sd
,
$ed
,
$clr
)
//
画扇面
{
$n
=
ceil
((
$ed
-
$sd
)
/
ANGLE_STEP);
$d
=
$sd
;
list
(
$x0
,
$y0
)
=
draw_getexy(
$a
,
$b
,
$d
);
imageline(
$img
,
$x0
+
$ox
,
$y0
+
$oy
,
$ox
,
$oy
,
$clr
);
for
(
$i
=
0
;
$i
<
$n
;
$i
++
)
{
$d
=
(
$d
+
ANGLE_STEP)
>
$ed
?
$ed
:
(
$d
+
ANGLE_STEP);
list
(
$x
,
$y
)
=
draw_getexy(
$a
,
$b
,
$d
);
imageline(
$img
,
$x0
+
$ox
,
$y0
+
$oy
,
$x
+
$ox
,
$y
+
$oy
,
$clr
);
$x0
=
$x
;
$y0
=
$y
;
}
imageline(
$img
,
$x0
+
$ox
,
$y0
+
$oy
,
$ox
,
$oy
,
$clr
);
list
(
$x
,
$y
)
=
draw_getexy(
$a
/
2
,
$b
/
2
,
(
$d
+
$sd
)
/
2
);
imagefill(
$img
,
$x
+
$ox
,
$y
+
$oy
,
$clr
);
}
function
draw_sector3d(
$img
,
$ox
,
$oy
,
$a
,
$b
,
$v
,
$sd
,
$ed
,
$clr
)
//
3d扇面
{
draw_sector(
$img
,
$ox
,
$oy
,
$a
,
$b
,
$sd
,
$ed
,
$clr
);
if
(
$sd
<
180
)
{
list
(
$R
,
$G
,
$B
)
=
draw_getdarkcolor(
$img
,
$clr
);
$clr
=
imagecolorallocate(
$img
,
$R
,
$G
,
$B
);
if
(
$ed
>
180
)
$ed
=
180
;
list
(
$sx
,
$sy
)
=
draw_getexy(
$a
,
$b
,
$sd
);
$sx
+=
$ox
;
$sy
+=
$oy
;
list
(
$ex
,
$ey
)
=
draw_getexy(
$a
,
$b
,
$ed
);
$ex
+=
$ox
;
$ey
+=
$oy
;
imageline(
$img
,
$sx
,
$sy
,
$sx
,
$sy
+
$v
,
$clr
);
imageline(
$img
,
$ex
,
$ey
,
$ex
,
$ey
+
$v
,
$clr
);
draw_arc(
$img
,
$ox
,
$oy
+
$v
,
$a
,
$b
,
$sd
,
$ed
,
$clr
);
list
(
$sx
,
$sy
)
=
draw_getexy(
$a
,
$b
,
(
$sd
+
$ed
)
/
2
);
$sy
+=
$oy
+
$v
/
2
;
$sx
+=
$ox
;
imagefill(
$img
,
$sx
,
$sy
,
$clr
);
}
}
function
draw_getindexcolor(
$img
,
$clr
)
//
RBG转索引色
{
$R
=
(
$clr
>>
16
)
&
0xff
;
$G
=
(
$clr
>>
8
)
&
0xff
;
$B
=
(
$clr
)
&
0xff
;
return
imagecolorallocate(
$img
,
$R
,
$G
,
$B
);
}
//
绘图主函数,并输出图片
// $datLst 为数据数组, $datLst 为标签数组, $datLst 为颜色数组
// 以上三个数组的维数应该相等
function
draw_img(
$datLst
,
$labLst
,
$clrLst
,
$a
=
250
,
$b
=
120
,
$v
=
20
,
$font
=
10
)
{
$ox
=
5
+
$a
;
$oy
=
5
+
$b
;
$fw
=
imagefontwidth(
$font
);
$fh
=
imagefontheight(
$font
);
$n
=
count
(
$datLst
);
//
数据项个数
$w
=
10
+
$a
*
2
;
$h
=
10
+
$b
*
2
+
$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
,
0xff
);
$clrt
=
imagecolorallocate(
$img
,
0x00
,
0x00
,
0x00
);
//
填充背景色
imagefill(
$img
,
0
,
0
,
$clrbk
);
//
求和
$tot
=
0
;
for
(
$i
=
0
;
$i
<
$n
;
$i
++
)
$tot
+=
$datLst
[
$i
];
$sd
=
0
;
$ed
=
0
;
333
$ly
=
10
+
$b
*
2
+
$v
;
for
(
$i
=
0
;
$i
<
$n
;
$i
++
)
{
$sd
=
$ed
;
$ed
+=
$datLst
[
$i
]
/
$tot
*
360
;
//
画圆饼
draw_sector3d(
$img
,
$ox
,
$oy
,
$a
,
$b
,
$v
,
$sd
,
$ed
,
$clrLst
[
$i
]);
//
$sd,$ed,$clrLst[$i]);
//画标签
imagefilledrectangle(
$img
,
5
,
$ly
,
5
+
$fw
,
$ly
+
$fh
,
$clrLst
[
$i
]);
imagerectangle(
$img
,
5
,
$ly
,
5
+
$fw
,
$ly
+
$fh
,
$clrt
);
//
imagestring($img, $font, 5+2*$fw, $ly, $labLst[$i].":".$datLst
[
$i
]
.
"
(
"
.
(
round
(
10000
*
(
$datLst
[
$i
]
/
$tot
))
/
100
)
.
"
%)
"
,
$clrt
);
$str
=
iconv
(
"
GB2312
"
,
"
UTF-8
"
,
$labLst
[
$i
]);
ImageTTFText(
$img
,
$font
,
0
,
5
+
2
*
$fw
,
$ly
+
13
,
$clrt
,
"
./simsun.ttf
"
,
$str
.
"
:
"
.
$datLst
[
$i
]
.
"
(
"
.
(
round
(
10000
*
(
$datLst
[
$i
]
/
$tot
))
/
100
)
.
"
%)
"
);
$ly
+=
$fh
+
2
;
}
//
输出图形
header
(
"
Content-type: image/png
"
);
//
输出生成的图片
$imgFileName
=
"
../temp/
"
.
time
()
.
"
.png
"
;
imagepng(
$img
,
$imgFileName
);
echo
'
<IMG SRC="
'
.
$imgFileName
.
'
" BORDER="1" ALT="统计饼图">
'
;
}
$datLst
=
array
(
30
,
10
,
20
,
20
,
10
,
20
,
10
,
20
);
//
数据
$labLst
=
array
(
"
中国科技大学
"
,
"
安徽理工大学
"
,
"
清华大学
"
,
"
北京大学
"
,
"
南京大学
"
,
"
上海大学
"
,
"
河海大学
"
,
"
中山大学
"
);
//
标签
$clrLst
=
array
(
0x99ff00
,
0xff6666
,
0x0099ff
,
0xff99ff
,
0xffff99
,
0x99ffff
,
0xff3333
,
0x009999
);
//
画图
draw_img(
$datLst
,
$labLst
,
$clrLst
);
?>
//图形类->gd.class.php
<?php
class GD{
/*
函数说明
$data:y轴数据(数组)
$graphdata:y轴数据--百分比(数组)
$label:x轴数据(数组)
$height:图像高度
$width:图像宽度
$font:字号
$dot:决定点的大小
$bg:背景色
$line :线色
$text :文本色
$dotcolor:点色
$file:输出图像文件名
*/
//线形图的函数
function qximage($data , $graphdata, $label , $height, $width , $font, $dot,
$bg, $line, $text, $dotcolor, $file)
{
$jc=$height/100;
$fontwidth= imagefontwidth ($font);
$fontheight=imagefontheight($font);
$image= imagecreate ($width,$height+20);
$bg= imagecolorallocate($image ,$bg[0],$bg[1],$bg[2]);
$line=imagecolorallocate($image ,$line[0],$line[1],$line[2]);
$text=imagecolorallocate($image ,$text[0],$text[1],$text[2]);
$dotcolor=imagecolorallocate($image ,$dotcolor[0],$dotcolor[1],$$dotcolor[2]);
imageline ($image,0,0,0,$height,$line);
imageline($image,0,$height,$width,$height,$line);
for ($i=1;$i<11;$i++)
{
imagedashedline($image,0,$height - $jc*$i*10 ,$width ,$height -$jc*$i*10
,$line );
imagestring ($image,$font,0,$height-$jc*$i*10,$i*10,$text);
}
for ($i=0;$i {
#echo $tmp." ";
$x1=(($width-50)/count($data))*($i)+40;
#echo $x1 ." ";
$y1=$height-$graphdata[$i]*$jc;
$x2=$x1;
$y2=$y1+$graphdata[$i]*$jc;
#echo $y1." ";
imagestring($image,$font,$x1,$y1-2*$fontheight,$graphdata[$i]."%(".$data
[$i].")",$text);
imagearc ($image,$x1 ,$y1,$dot,$dot,0,360,$dotcolor);
imagefilltoborder ($image,$x1,$y1,$dotcolor,$dotcolor);
imagestring ($image,$font,$x1,$y2,$label[$i],$text);
if ($i>0)
{
imageline($image,$tmpx1,$tmpy1,$x1,$y1,$line);
}
$tmpx1=$x1;$tmpy1=$y1;
}
imagegif ($image,$file);
}
//为了方便起见,我又做了一个函数来制作柱型图
/*参数说明:
$graphdata:百分比数据(y轴)
$label:x轴标题
$data:实际数据(y轴)
$graphwidth:图像宽度
$graphheight:图像高度
$graphscale:高度因子(为$graphheight/100)
$graphfont:字体号
$bg;背景颜色值
$text:文本颜色值
$grid:边线颜色值
$bar:柱的颜色值
$bz:备注(不支持中文呀)
*/
function timage(
$graphdata,$label,$data,
$graphwidth,$graphheight,$graphscale,$graphfont,
$bg,$text,$grid,$bar,$bz)
{
header("Content-type:image/gif");
$image=imagecreate($graphwidth+50,$graphheight+50);
$bgcolor= imagecolorallocate ($image ,$bg[0],$bg[1],$bg[2]);
$textcolor= imagecolorallocate ($image ,$text[0],$text[1],$text[2]);
$gridcolor=imagecolorallocate ($image ,$grid[0],$grid[1],$grid[2]);
$barcolor=imagecolorallocate ($image ,$bar[0],$bar[1],$bar[2]);
$gridabelwidth=imagefontwidth($graphfont)*3+1;
$gridableheight= imagefontheight ($graphfont);
imageline($image,$gridlabelwidth,0,$gridlabelwidth,$graphheight-
1,$gridcolor);
imageline($image,0,$graphheight-1,$graphwidth-1,$graphheight-1,$gridcolor);
for($i=0;$i<$graphheight;$i+=$graphheight/10)
{
imagedashedline ($image,0,$i,$graphwidth-1,$i,$gridcolor);
imagestring($image,$graphfont,0,$i,round(($graphheight-$i)/
$graphscale),$textcolor);
}
$barwidth=(($graphwidth-$gridlabelwidth)/count($graphdata))-
30;#¿ØÖÆÖùµÄ×
Ü¿í¶È
for($i=0;$i {
$bartopx=$gridlabelwidth+(($i+1)*20)+
($i*$barwidth);#¿ØÖÆÖù¿¿×
óµÄ¾àÀë
$barbottomx=$bartopx+$barwidth; $barbottomy=$graphheight-
1;#¿ØÖÆÖùµÄϱ
᫇
$bartopy=$barbottomy-($graphdata[$i]*$graphscale);
imagefilledrectangle
($image,$bartopx,$bartopy,$barbottomx,$barbottomy,$barcolor);
$labelx1=$bartopx;
$labely1=$bartopy-15;
$labelx2=$bartopx;
$labely2=$graphheight;
imagestring($image,$graphfont,$labelx1,$labely1,"$graphdata
[$i]"."%",$textcolor);
imagestring($image,$graphfont,$labelx2,$labely2,"$label[$i]",$textcolor);
imagestringup ($image,$graphfont,$labelx1+10,$labely1-
$gridableheight,"$data[$i]",$textcolor);
}
imagestring($image,$graphfont,1,$graphheight+30,$bz,$textcolor);
imagegif ($image);
}
//PHP数据饼图
define("ANGLE_STEP", 5); //定义画椭圆弧时的角度步长
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($a*Cos($d)), round($b*Sin($d)));
}
function draw_arc($img,$ox,$oy,$a,$b,$sd,$ed,$clr) //椭圆弧函数
{
$n = ceil(($ed-$sd)/ANGLE_STEP);
$d = $sd;
list($x0,$y0) = draw_getexy($a,$b,$d);
for($i=0; $i<$n; $i++)
{
$d = ($d+ANGLE_STEP)>$ed?$ed:($d+ANGLE_STEP);
list($x, $y) = draw_getexy($a, $b, $d);
imageline($img, $x0+$ox, $y0+$oy, $x+$ox, $y+$oy, $clr);
$x0 = $x;
$y0 = $y;
}
}
function draw_sector($img, $ox, $oy, $a, $b, $sd, $ed, $clr) //画扇面
{
$n = ceil(($ed-$sd)/ANGLE_STEP);
$d = $sd;
list($x0,$y0) = draw_getexy($a, $b, $d);
imageline($img, $x0+$ox, $y0+$oy, $ox, $oy, $clr);
for($i=0; $i<$n; $i++)
{
$d = ($d+ANGLE_STEP)>$ed?$ed:($d+ANGLE_STEP);
list($x, $y) = draw_getexy($a, $b, $d);
imageline($img, $x0+$ox, $y0+$oy, $x+$ox, $y+$oy, $clr);
$x0 = $x;
$y0 = $y;
}
imageline($img, $x0+$ox, $y0+$oy, $ox, $oy, $clr);
list($x, $y) = draw_getexy($a/2, $b/2, ($d+$sd)/2);
imagefill($img, $x+$ox, $y+$oy, $clr);
}
function draw_sector3d($img, $ox, $oy, $a, $b, $v, $sd, $ed, $clr) //3d扇面
{
draw_sector($img, $ox, $oy, $a, $b, $sd, $ed, $clr);
if($sd<180)
{
list($R, $G, $B) = draw_getdarkcolor($img, $clr);
$clr=imagecolorallocate($img, $R, $G, $B);
if($ed>180) $ed = 180;
list($sx, $sy) = draw_getexy($a,$b,$sd);
$sx += $ox;
$sy += $oy;
list($ex, $ey) = draw_getexy($a, $b, $ed);
$ex += $ox;
$ey += $oy;
imageline($img, $sx, $sy, $sx, $sy+$v, $clr);
imageline($img, $ex, $ey, $ex, $ey+$v, $clr);
draw_arc($img, $ox, $oy+$v, $a, $b, $sd, $ed, $clr);
list($sx, $sy) = draw_getexy($a, $b, ($sd+$ed)/2);
$sy += $oy+$v/2;
$sx += $ox;
imagefill($img, $sx, $sy, $clr);
}
}
function draw_getindexcolor($img, $clr) //RBG转索引色
{
$R = ($clr>>16) & 0xff;
$G = ($clr>>8)& 0xff;
$B = ($clr) & 0xff;
return imagecolorallocate($img, $R, $G, $B);
}
// 绘图主函数,并输出图片
// $datLst 为数据数组, $datLst 为标签数组, $datLst 为颜色数组
// 以上三个数组的维数应该相等
function draw_img($datLst,$labLst,$clrLst,$a=250,$b=120,$v=20,$font=10)
{
$ox = 5+$a;
$oy = 5+$b;
$fw = imagefontwidth($font);
$fh = imagefontheight($font);
$n = count($datLst);//数据项个数
$w = 10+$a*2;
$h = 10+$b*2+$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, 0xff);
$clrt = imagecolorallocate($img, 0x00, 0x00, 0x00);
//填充背景色
imagefill($img, 0, 0, $clrbk);
//求和
$tot = 0;
for($i=0; $i<$n; $i++)
$tot += $datLst[$i];
$sd = 0;
$ed = 0; 333
$ly = 10+$b*2+$v;
for($i=0; $i<$n; $i++)
{
$sd = $ed;
$ed += $datLst[$i]/$tot*360;
//画圆饼
draw_sector3d($img, $ox, $oy, $a, $b, $v, $sd, $ed, $clrLst[$i]);
//$sd,$ed,$clrLst[$i]);
//画标签
imagefilledrectangle($img, 5, $ly, 5+$fw, $ly+$fh, $clrLst[$i]);
imagerectangle($img, 5, $ly, 5+$fw, $ly+$fh, $clrt);
//imagestring($img, $font, 5+2*$fw, $ly, $labLst[$i].":".$datLst
[$i]."(".(round(10000*($datLst[$i]/$tot))/100)."%)", $clrt);
$str = iconv("GB2312", "UTF-8", $labLst[$i]);
ImageTTFText($img, $font, 0, 5+2*$fw, $ly+13, $clrt, "./simsun.ttf",
$str.":".$datLst[$i]."(".(round(10000*($datLst[$i]/$tot))/100)."%)");
$ly += $fh+2;
}
//输出图形
header("Content-type: image/png");
//输出生成的图片
$imgFileName = "../temp/".time().".png";
imagepng($img,$imgFileName);
echo '<IMG SRC="'.$imgFileName.'" BORDER="1" ALT="统计饼图">';
}
$datLst = array(30, 10, 20, 20, 10, 20, 10, 20); //数据
$labLst = array("中国科技大学", "安徽理工大学", "清华大学", "北京大学",
"南京大学", "上海大学", "河海大学", "中山大学"); //标签
$clrLst = array(0x99ff00, 0xff6666, 0x0099ff, 0xff99ff, 0xffff99,
0x99ffff, 0xff3333, 0x009999);
//画图
draw_img($datLst,$labLst,$clrLst);
?>