//
				图形类->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); 
?>