php做饼图的函数

作者:未知 来源:未知 添加时间:2006年7月2日 字体:

######## 
bimage.php3 
######## 
/* 
函数说明 
$chartdata:数据,是数组元素 
$chartfont:字号 
$chartdiameter:决定饼的大小(要看你饿不饿了,呵呵) 
$chartlabel:标题,也是数组元素 
$colorslice:颜色数组,例如$tmp=array255,255,255);$colorslic=array($tmp); 
$colorborder:边框颜色,数组 
$colortext :文本颜色,数组 
$colorbody:背景颜色,数组 
$file&#58输出图片文件名*/ 
function bimage($chartdata, 
$chartfont, 
$chartdiameter , 
$chartlabel , 
$colorslice, 
$colorbody , 
$colorborder, 
$colortext , 
$file 


$chartdiameter=150; 

$chartfontheight=imagefontheight($chartfont); 
$d1=10;$d2=20;$d3=30;$d4=40;$d5=50; 
$chartdata=array($d1,$d2,$d3,$d4,$d5); 
$chartlabel=array("D1","D2","D3","D4","D5"); 
$chartwidth=$chartdiameter+20; 
$chartheight=$chartdiameter+20+(($chartfontheight+2)*count($chartdata)); 
header("content-type:image/gif"); 
$image=imagecreate($chartwidth,$chartheight); 
$colorbody =imagecolorallocate ($image,$colorbody[0],$colorbody[1],$colorbody[2]); 
$colortext =imagecolorallocate ($image,$colortext[0],$colortext[1],$colortext[2]); 
$colorborder =imagecolorallocate ($image,$colorborder[0],$colorborder[1],$colorborder[2]); 
for ($i=0;$i { 
$t=imagecolorallocate($image,$colorslice[$i][0],$colorslice[$i][1],$colorslice[$i][2]); 
$colorslice[$i]=$t; 

for($i=0;$i { 
$charttotal+=$chartdata[$i]; 

$chartcenterx=$chartdiameter/2+10; 
$chartcentery=$chartdiameter/2+10; 
$degrees=0; 
for($i=0;$i { 
$startdegrees=round($degrees); 
$degrees+=(($chartdata[$i]/$charttotal)*360); 
$enddegrees=round($degrees); 
$currentcolor=$colorslice[$i%(count($colorslice))]; 
imagearc($image , 
$chartcenterx, 
$chartcentery, 
$chartdiameter, 
$chartdiameter, 
$startdegrees, 
$enddegrees, 
$currentcolor); 
list($arcx,$arcy)=circle_point($startdegrees,$chartdiameter); 
imageline($image, 
$chartcenterx, 
$chartcentery, 
floor($chartcenterx+$arcx), 
floor($chartcentery+$arcy), 
$currentcolor ); 
list($arcx,$arcy)=circle_point($enddegrees,$chartdiameter); 

imageline($image, 
$chartcenterx, 
$chartcentery, 
ceil($chartcenterx+$arcx), 
ceil($chartcentery +$arcy), 
$currentcolor); 

$midpoint=round((($enddegrees-$startdegrees)/2)+$startdegrees); 
list($arcx,$arcy)= circle_point ( $midpoint, $chartdiameter/2); 
imagefilltoborder($image, 
floor($chartcenterx+$arcx), 
floor($chartcentery+$arcy), 
$currentcolor, 
$currentcolor); 

imagearc($image, 
$chartcenterx, 
$chartcentery, 
$chartdiameter, 
$chartdiameter, 
0,360, 
$colorborder); 
imagefilltoborder ($image, 
floor($chartcenterx +( $chartdiameter /2)+2), 
$chartcentery , 
$colorborder, 
$colorborder ); 
for ($i=0;$i { 
$currentcolor=$colorslice[$i%(count($colorslice))]; 
$liney=$chartdiameter+20+($i*($chartfontheight+2)); 
imagerectangle ($image, 
10, 
$liney, 
20+$chartfontheight, 
$liney+$chartfontheight, 
$colorbody); 
imagefilltoborder($image, 
12, 
$liney+2, 
$colorbody, 
$currentcolor); 
imagestring($image, 
$chartfont, 
40+$chartfontheight, 
$liney, 
"$chartlabel[$i]:$chartdata[$i]", 
$colortext); 



imagegif ($image,$file); 



function radians($degrees) 

return($degrees*(pi()/180.0)); 

function circle_point($degrees,$diameter) 

$x=cos(radians($degrees))*($diameter/2); 
$y=sin(radians($degrees))*($diameter/2); 
return (array($x,$y)); 

?> 

########### 
这是一个调用的例子 
########### 

include("bfunc.php3"); 
$chartdiameter=250; 
$chartfont=5; 
$d1=10;$d2=20;$d3=30;$d4=40;$d5=50; 
$chartdata=array($d1,$d2,$d3,$d4,$d5); 
$chartlabel=array("D1","D2","D3","D4","D5"); 

$colorbody=array(0xff,0xff,0xff); 
$colorborder=array(0x00,0x00,0x00); 
$colortext=array(0xff,0xff,0xff); 

$color1=array(0xff,0x00,0x00); 
$color2=array(0x00,0xff,0x00); 
$color3=array(0x00,0x00,0xff); 
$color4=array(0xff,0xff,0x00); 
$color5=array(0xff,0x00,0xff); 
$colorslice=array($color1 ,$color2,$color3,$color4,$color5); 
$file="tj.gif" 
bimage($chartdata, 
$chartfont, 
$chartdiameter , 
$chartlabel , 
$colorslice, 
$colorbody , 
$colorborder, 
$colortext , 
$file ) 
?> 

ppdesk