`
sq1228
  • 浏览: 81900 次
  • 性别: Icon_minigender_1
  • 来自: 宁波
社区版块
存档分类
最新评论

动态线形图、柱形图、饼形图、3d饼形图生成代码

    博客分类:
  • PHP
阅读更多
程序4-3
//假设利用文件count.txt保存计数值
<? 
/*检查count.txt文件是否存在,如果不存在则新建一个文件,并写入"000001",即假设最大计数为6位数*/
if(!file_exists("count.txt")){ //count.txt文件不存在
$fp=fopen("count.txt","w"); 
fwrite($fp,"000001"); 
$count="000001"; 
fclose($fp); 
} 
else{ //读取网页被浏览的次数值
$fp=fopen("count.txt","r"); 
$count=fread($fp,6); 
//----------------------------- 
$count+=1; 
//----------------------------- 
fclose($fp); 

//对变量$count的值进行格式化
switch(strlen($count)){ 
case 1: 
$count="00000".$count; 
break; 
case 2: 
$count="0000".$count; 
break; 
case 3: 
$count="000".$count; 
break; 
case 4: 
$count="00".$count; 
break; 
case 5: 
$count="0".$count; 
break; 
} 
//保存网页被浏览的次数值
$fp=fopen("count.txt","w"); 
fwrite($fp,$count); 
fclose($fp); 
} 
?>
程序4-4
<? 
//从数据表中读取网页被浏览的次数值
$cn=mysql_connect("localhost","root","*****"); 
mysql_select_db("visit_log",$cn); 
$sql="select * from visit_count"; 
$result=mysql_query($sql,$cn); 
$record=mysql_fetch_array($result); 

//对网页被浏览的次数值加1,并保存到数据表中
if(empty($visited)){ 
$count=$record["count"]+1; 
$sql="update visit_counter set count=$count"; 
$result=mysql_query($sql,$cn); 
} 
mysql_close($cn); 
switch(strlen($count)){ 
case 1: 
$count="00000".$count; 
break; 
case 2: 
$count="0000".$count; 
break; 
case 3: 
$count="000".$count; 
break; 
case 4:
$count="00".$count; 
break; 
case 5: 
$count="0".$count; 
break; 
}
?> 

程序4-5
<?php
Header("Content-type: image/jpeg"); 
$im = ImageCreate(45,16); //创建图像
$white = ImageColorAllocate($im,255,255,255); //定义字体颜色
$black = ImageColorAllocate($im,0,0,0);
imagefill($im,1,1,$black);//对指定区域着色
ImageString($im,5,0,0,sprintf("%05d",$count),$white); //输出访问数
imageJpeg($im); //显示图形
imagedestroy($im);
?> 

程序4-6
<?php
//将数字转化为字符串
$strcount = strval($count);
$strcount = chop($count);

//将数字转化为图形
$countlen = strlen($strcount);
$strhtml = "";
for($I = 0 ; $I < $countlen; $s++){
$strhtml = $strhtml. "<img src = "";
$strhtml = $strhtml.$strcount[$I];
$strhtml = $strhtml. ".gif">";
}
?>
程序4-7
<?php
Header("Content-type:image/gif"); 

function display($file){ 
$fp=fopen($file,"rw"); 
$num=fgets($fp,6); 
$num=$num+1; 
exec("echo "$num">$file"); 
fclose($fp); 
$n=6-strlen($num); 
$out=imagecreate(96,20);// 建立新图 
$im=imagecreatefromgif("0.gif"); //取出GIF图形
for($i=0;$i<$n;$i++) 
imagecopyresized($out,$im,$i*16,0,0,0,16,20,16,20); //复制新图并调整大小
for($j=0;$j<strlen($num);$j++) 
switch(substr($num,$j,1)){ 
case "1":
$im=imagecreatefromgif("1.gif"); 
imagecopyresized($out,$im,$i*16,0,0,0,16,20,16,20); 
$i++; 
ImageDestroy($im); 
break; 
case "2":
$im=imagecreatefromgif("2.gif"); 
imagecopyresized($out,$im,$i*16,0,0,0,16,20,16,20); 
$i++; 
ImageDestroy($im); 
break; 
case "3":
$im=imagecreatefromgif("3.gif"); 
imagecopyresized($out,$im,$i*16,0,0,0,16,20,16,20); 
$i++; 
ImageDestroy($im); 
break; 
case "4":
$im=imagecreatefromgif("4.gif"); 
imagecopyresized($out,$im,$i*16,0,0,0,16,20,16,20); 
$i++; 
ImageDestroy($im); 
break; 
case "5":
$im=imagecreatefromgif("5.gif"); 
imagecopyresized($out,$im,$i*16,0,0,0,16,20,16,20); 
$i++; 
ImageDestroy($im); 
break; 
case "6":
$im=imagecreatefromgif("6.gif"); 
imagecopyresized($out,$im,$i*16,0,0,0,16,20,16,20); 
$i++; 
ImageDestroy($im); 
break; 
case "7":
$im=imagecreatefromgif("7.gif"); 
imagecopyresized($out,$im,$i*16,0,0,0,16,20,16,20); 
$i++; 
ImageDestroy($im); 
break; 
case "8":
$im=imagecreatefromgif("8.gif"); 
imagecopyresized($out,$im,$i*16,0,0,0,16,20,16,20); 
$i++; 
ImageDestroy($im); 
break; 
case "9":
$im=imagecreatefromgif("9.gif"); 
imagecopyresized($out,$im,$i*16,0,0,0,16,20,16,20); 
$i++; 
ImageDestroy($im); 
break; 
case "0":
$im=imagecreatefromgif("0.gif"); 
imagecopyresized($out,$im,$i*16,0,0,0,16,20,16,20); 
$i++; 
ImageDestroy($im); 
break; 
} 
imageGif($out); 
ImageDestroy($out); 
} 

$file="/tmp/count"; 
if(!file_exists($file)) 
exec("echo "0">$file"); 
display($file); 
?>
程序4-8
文件名为:count.php
<? 
//计数文件目录
$recdir="rec/"; 
//计数文件扩展名
$rfile=".txt";  
if ($len=="") //位数
$int_width=6; 
else 
$int_width=$len;  
//定义单个数字宽度
$count_width=8;    
//定义单个数字高度
$count_height=16;  

//定义生成与数字0~9相对应的图形的数据
$bitmap =array( 
    "0xff", "0xff", "0xff", "0xc3", "0x99", "0x99", "0x99", "0x99",    /* rows 1-8  of 0 */ 
    "0x99", "0x99", "0x99", "0x99", "0xc3", "0xff", "0xff", "0xff",    /* rows 9-16 of 0 */ 
    "0xff", "0xff", "0xff", "0xcf", "0xc7", "0xcf", "0xcf", "0xcf",    /* rows 1-8  of 1 */ 
    "0xcf", "0xcf", "0xcf", "0xcf", "0xcf", "0xff", "0xff", "0xff",    /* rows 9-16 of 1 */ 
    "0xff", "0xff", "0xff", "0xc3", "0x99", "0x9f", "0x9f", "0xcf",    /* rows 1-8  of 2 */ 
    "0xe7", "0xf3", "0xf9", "0xf9", "0x81", "0xff", "0xff", "0xff",    /* rows 9-16 of 2 */ 
    "0xff", "0xff", "0xff", "0xc3", "0x99", "0x9f", "0x9f", "0xc7",    /* rows 1-8  of 3 */ 
    "0x9f", "0x9f", "0x9f", "0x99", "0xc3", "0xff", "0xff", "0xff",    /* rows 9-16 of 3 */ 
    "0xff", "0xff", "0xff", "0xcf", "0xcf", "0xc7", "0xc7", "0xcb",    /* rows 1-8  of 4 */ 
    "0xcb", "0xcd", "0x81", "0xcf", "0x87", "0xff", "0xff", "0xff",    /* rows 9-16 of 4 */ 
    "0xff", "0xff", "0xff", "0x81", "0xf9", "0xf9", "0xf9", "0xc1",    /* rows 1-8  of 5 */ 
    "0x9f", "0x9f", "0x9f", "0x99", "0xc3", "0xff", "0xff", "0xff",    /* rows 9-16 of 5 */ 
    "0xff", "0xff", "0xff", "0xc7", "0xf3", "0xf9", "0xf9", "0xc1",    /* rows 1-8  of 6 */ 
    "0x99", "0x99", "0x99", "0x99", "0xc3", "0xff", "0xff", "0xff",    /* rows 9-16 of 6 */ 
    "0xff", "0xff", "0xff", "0x81", "0x99", "0x9f", "0x9f", "0xcf",    /* rows 1-8  of 7 */ 
    "0xcf", "0xe7", "0xe7", "0xf3", "0xf3", "0xff", "0xff", "0xff",    /* rows 9-16 of 7 */ 
    "0xff", "0xff", "0xff", "0xc3", "0x99", "0x99", "0x99", "0xc3",    /* rows 1-8  of 8 */ 
    "0x99", "0x99", "0x99", "0x99", "0xc3", "0xff", "0xff", "0xff",    /* rows 9-16 of 8 */ 
    "0xff", "0xff", "0xff", "0xc3", "0x99", "0x99", "0x99", "0x99",    /* rows 1-8  of 9 */ 
    "0x83", "0x9f", "0x9f", "0xcf", "0xe3", "0xff", "0xff", "0xff"    /* rows 9-16 of 9 */ 
); 

if ($id) 
{ 
 if (file_exists("$recdir$id$rfile")) 
 { 
  $file=fopen("$recdir$id$rfile","r");  
  $num=fread($file,$int_width); 
  fclose($file);  
   
  $counter = $num+1; 
  $plusfile=fopen("$recdir$id$rfile","w"); 
  fwrite($plusfile,$counter); 
  fclose($plusfile); 
 } 
 else 
 { 
  $num=0; 
 } 
 for ($i = 0; $i < $int_width; ++$i)  
  { 
        $j = $num % 10; 
        $count[$int_width - 1 - $i] = $j; 
        $num /= 10; 
  } 
  printf("#define counter_width %drn",$count_width * $int_width); 
  printf("#define counter_height %drn",$count_height); 
  printf("static unsigned char counter_bits[] = {rn"); 

  for ($i = 0; $i < $count_height; ++$i)  
    { 
        for ($j = 0; $j < $int_width; ++$j)  
        { 
            printf("%s", $bitmap[($count[$j] * $count_height) + $i]); 
            if (( $i < $count_height - 1) || ($j < $int_width - 1)) printf(", "); 
        } 
    } 
  printf("rn};"); 
}     
?> 

程序4-9
<? 
//进行计数
session_start(); 
if (session_is_registered(count)==false){ 
while(($fp=fopen("counter.txt","r+"))==false); 
while(flock($fp,3)==false); 
$count=fgets($fp,255); 
$count+=1; 
fseek($fp,0); 
fputs($fp,$count); 
fclose($fp); 
session_register(count); 
} 

$len=strlen($count); 
for($i=1;$i<=6-$len;$i++) 
{ 
$imagpath="<img src=temp/0.gif>" ; //TEMP为图像文件夹,图像文件名需为0.GIF…… 9.GIF 
} 
//显示计数值
for($i=1;$i<=$len;$i++) 
{ 
$imagpath.="<img src= temp/".substr($count,$i-1,1).".gif>"; 
} 
print"你是第".$imagpath."位来客"; 
?>
程序4-10
文件名为:count.php
<? 
Header("Content-type:image/png"); 
$img=ImageCreate(60,20); 
$link=mysql_pconnect("localhost"); 
mysql_select_db("liarrn",$link); 
mysql_query("update counter set count=count+1",$link); 
$str="select count from counter"; 
$result=mysql_query($str,$link); 
list($counter)=mysql_fetch_row($result); 
$counter=sprintf("%05d",$counter); 

for($i=0;$i<5;$i++){ 
    $tmpstr="/bookfigures/".substr($counter,$i,1).".png"; 
    $tmpimg=Imagecreatefrompng($tmpstr); 
    ImageCopyResized($img,$tmpimg,$i*12,0,0,0,12,20,12,20); 
    ImageDestroy($tmpimg); 
} 
ImagePng($img); 
ImageDestroy($img); 
?> 

程序4-11
<?php 
  // 发送头信息和创建初始的空白画布
  Header( "Content-type: image/gif"); 
  $image = imagecreate(200,200); 
  // 分配一些颜色
  $red = ImageColorAllocate($image,255,0,0); 
  $blue = ImageColorAllocate($image,0,0,255); 
  $white = ImageColorAllocate($image,255,255,255); 
  $grey = ImageColorAllocate($image,200,200,200); 
  // 创建一个初始的灰色矩形用于绘图
  ImageFilledRectangle($image,0,0,200,200,$grey); 
  // 连接MySQL服务器并选择数据库
  $connect = mysql_connect("","root",""); 
  mysql_select_db("graphing",$connect); 
  // 找到结果集中的最大数值
  $sql = "SELECT MAX(g_num) FROM sales"; 
  $maxResult = mysql_query($sql,$connect); 
  $max = mysql_result($maxResult,0,0); 
  // 得到公司A的结果集
  $sql = "SELECT g_num FROM sales WHERE g_team='公司A ' ORDER BY g_month"; 
  $salesResult = mysql_query($sql,$connect); 
  // 找到返回多少列,就是'columns'的数值
  $columns = mysql_num_rows($salesResult); 
  // $x每次增加多少量?
  $xincrement = bcdiv(200,$columns-1,0); 
  $x=0; 
  // $i 将记录行的数值
  $i=0; 
  // 在所有的数据行中循环
  while($salesRow=mysql_fetch_array($salesResult)) { 
      // 像上面所讨论地计算y的坐标值
      $y = bcmul(bcdiv($salesRow[0],$max,2),200,2); 
      // 在$points数组中增加值
      $points[$i][0] = $x; 
      $points[$i][1] = $y; 
      // 增加$x的值用$xincrement 
      $x+=$xincrement; 
      // 增加 $i 
      $i++; 
   } 
  // 现在在$points数组中循环,此时$i小于$columns-1
  for($i=0;$i<$columns-1;$i++) { 
  /*传递 $points[$I][0] 作为第一个x坐标,$points[$I][1] 为第一个y坐标 $points[$I+1][0], $points[$I+1][1] 将是下一个x,y坐标集*/
ImageLine($image,$points[$i][0],$points[$i][1],$points[$i+1][0],
$points[$i+1][1],$red); 
  } 
  // 输出GIF给浏览器并且释放内存
  ImageGIF($image); 
  ImageDestroy($image); 
?>
程序4-12
<?php 
  $sql = "SELECT g_num FROM sales WHERE g_team='Atlanta' ORDER BY g_month"; 
  $salesResult = mysql_query($sql,$connect); 
  $columns = mysql_num_rows($salesResult); 
  $xincrement = bcdiv(200,$columns-1,0); 
  $x=0; 
  $i=0; 
  while($salesRow=mysql_fetch_array($salesResult)) { 
      $y = bcmul(bcdiv($salesRow[0],$max,2),200,2); 
    $points[$i][0] = $x; 
    $points[$i][1] = $y; 
    $x+=$xincrement; 
    $i++; 
  } 
  for($i=0;$i<$columns-1;$i++) { 
    ImageLine($image,$points[$i][0],200-$points[$i][1],$points[$i+1][0],200-$points[$i+1][1],$blue); 
  } 
?> 
程序4-13
<?
function image($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);
}
?>

程序4-14
<?php 
//把角度转换为弧度 
function radians ($degrees) 
{ 
return($degrees * (pi()/180.0)); 
} 
//取得在圆心为(0,0)的圆上x,y点的值 
function circle_point($degrees, $diameter) 
{ 
$x = cos(radians($degrees)) * ($diameter/2); 
$y = sin(radians($degrees)) * ($diameter/2); 
return (array($x, $y)); 
} 

//填充图表的参数 
$ChartDiameter = 200; //图表直径 
$ChartFont = 2; //图表字体 
$ChartFontHeight = imagefontheight($ChartFont);//图表字体的大小 
$ChartData = array( "75","45");//用于生成图表的数据,可通过数据库来取得来确定 
$ChartLabel = array("yes", "no"); //数据对应的名称 

//确定图形的大小 
$ChartWidth = $ChartDiameter + 20; 
$ChartHeight = $ChartDiameter + 20 + 
(($ChartFontHeight + 2) * count($ChartData)); 

//确定统计的总数 
for($index = 0; $index < count($ChartData); $index++) 
{ 
$ChartTotal += $ChartData[$index]; 
} 
$ChartCenterX = $ChartDiameter/2 + 10; 
$ChartCenterY = $ChartDiameter/2 + 10; 

//创建空白图形 
$image = imagecreate($ChartWidth, $ChartHeight); 

//分配颜色
$colorBody = imagecolorallocate($image, 0xFF, 0xFF, 0xFF); 
$colorBorder = imagecolorallocate($image, 0x00, 0x00, 0x00); 
$colorText = imagecolorallocate($image, 0x00, 0x00, 0x00); 
$colorSlice[] = imagecolorallocate($image, 0xFF, 0x00, 0x00); 
$colorSlice[] = imagecolorallocate($image, 0x00, 0xFF, 0x00); 

//图形着色
imagefill($image, 0, 0, $colorBody); 

//绘制扇形 
$Degrees = 0; 
for($index = 0; $index < count($ChartData); $index++) 
{ 
$StartDegrees = round($Degrees); 
$Degrees += (($ChartData[$index]/$ChartTotal)*360); 
$EndDegrees = round($Degrees); 
$CurrentColor = $colorSlice[$index%(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, 180, $colorBorder); 
imagearc($image, $ChartCenterX, $ChartCenterY, $ChartDiameter, 
$ChartDiameter, 180, 360, $colorBorder); 
imagearc($image, $ChartCenterX, $ChartCenterY, $ChartDiameter+7, 
$ChartDiameter+7, 0, 180, $colorBorder); 
imagearc($image, $ChartCenterX, $ChartCenterY, $ChartDiameter+7, 
$ChartDiameter+7, 180, 360, $colorBorder); 
imagefilltoborder($image, floor($ChartCenterX + ($ChartDiameter/2) + 2), 
$ChartCenterY, $colorBorder, $colorBorder); 

for($index = 0; $index < count($ChartData); $index++) 
{ 
$CurrentColor = $colorSlice[$index%(count($colorSlice))]; 
$LineY = $ChartDiameter + 20 + ($index*($ChartFontHeight+2)); 

//绘制矩形框
imagerectangle($image, 10, $LineY, 10 + $ChartFontHeight, 
$LineY+$ChartFontHeight, $colorBorder); 
imagefilltoborder($image, 12, $LineY + 2, $colorBorder, $CurrentColor); 

//输出字符串
imagestring($image, $ChartFont, 20 + $ChartFontHeight, 
$LineY, "$ChartLabel[$index]: $ChartData[$index]", $colorText); 
} 
/*至此,已经生成了一幅图像,但需要把它发到浏览器上,即要将标头发送给浏览器,以便让它知道这是一个GIF文件。*/
header("Content-type: image/gif"); 

//输出生成的图片 
imagegif($image); 
?>
程序4-15
<?php 

//公用函数 

//把角度转换为弧度 
function deg2Arc($degrees) { 
return($degrees * (pi()/180.0)); 
} 

//RGB 
function getRGB($color){ 
  $R=($color>>16) & 0xff; 
  $G=($color>>8) & 0xff; 
  $B=($color) & 0xff; 
  return (array($R,$G,$B)); 
} 
// 取得在椭圆心为(0,0)的椭圆上 x, y点的值 
function pie_point($deg,$va,$vb){ 
 $x= cos(deg2Arc($deg)) * $va; 
 $y= sin(deg2Arc($deg)) * $vb; 
 return (array($x, $y)); 
} 

//3D饼图类 
class Pie3d{ 
//声明成员变量
var $a; //椭圆长半轴 
var $b; //椭圆短半轴 
var $DataArray;  //每个扇形的数据 
var $ColorArray; //每个扇形的颜色要求按照十六进制书写,但前面不加0x,边缘及阴影为黑色 
//定义构造函数
function Pie3d($pa=100,$pb=60,$sData="100,200,300,400,500", 
$sColor="ee00ff,dd0000,cccccc,ccff00,00ccff") 
{ 
    $this->a=$pa; 
    $this->b=$pb; 
    $this->DataArray=split(",",$sData); 
    $this->ColorArray=split(",",$sColor); 
} 

    //定义方法
function setA($v){ 
    $this->a=$v; 
} 

function getA(){ 
    return $this->a; 
} 

function setB($v){ 
    $this->b=$v;  
} 

function getB(){ 
    return $this->b; 
} 
function setDataArray($v){ 
    $this->DataArray=split(",",$v); 
} 

function getDataArray($v){ 
    return $this->DataArray; 
} 

function setColorArray($v){ 
    $this->ColorArray=split(",",$v); 
} 
function getColorArray(){ 
    return  $this->ColorArray; 
} 
  
function  DrawPie(){ 
    $image=imagecreate($this->a*2+40,$this->b*2+40); 
    $PieCenterX=$this->a+10; 
    $PieCenterY=$this->b+10; 
    $DoubleA=$this->a*2; 
    $DoubleB=$this->b*2; 
    list($R,$G,$B)=getRGB(0); 
    $colorBorder=imagecolorallocate($image,$R,$G,$B); 
    $DataNumber=count($this->DataArray); 
     
    //算出数据和
    for($i=0;$i<$DataNumber;$i++)
      $DataTotal+=$this->DataArray[$i]; 
     
    //填充背景
    imagefill($image, 0, 0, imagecolorallocate($image, 0xFF, 0xFF, 0xFF)); 

    //画每一个扇形 
    $Degrees = 0; 
    for($i = 0; $i < $DataNumber; $i++){ 
        $StartDegrees = round($Degrees); 
        $Degrees += (($this->DataArray[$i]/$DataTotal)*360); 
        $EndDegrees = round($Degrees); 
        $percent = number_format($this->DataArray[$i]/$DataTotal*100, 1);  
        list($R,$G,$B)=getRGB(hexdec($this->ColorArray[$i])); 
        $CurrentColor=imagecolorallocate($image,$R,$G,$B); 
        if ($R>60 and $R<256)
            $R=$R-60; 
        if ($G>60 and $G<256) 
           $G=$G-60; 
        if ($B>60 and $B<256)
            $B=$B-60; 
        $CurrentDarkColor=imagecolorallocate($image,$R,$G,$B); 

        //画扇形弧 
        imagearc($image,$PieCenterX,$PieCenterY,$DoubleA,$DoubleB,
$StartDegrees,$EndDegrees,$CurrentColor); 
        //画直线 
        list($ArcX, $ArcY) = pie_point($StartDegrees , $this->a , $this->b); 
        imageline($image,$PieCenterX,$PieCenterY,floor($PieCenterX + $ArcX),
floor($PieCenterY + $ArcY),$CurrentColor); 
        //画直线 
        list($ArcX, $ArcY) = pie_point($EndDegrees,$this->a , $this->b); 
        imageline($image,$PieCenterX,$PieCenterY,ceil($PieCenterX + $ArcX),
ceil($PieCenterY + $ArcY),$CurrentColor); 
        
//填充扇形 
        $MidPoint = round((($EndDegrees - $StartDegrees)/2) + $StartDegrees); 
        list($ArcX, $ArcY) = Pie_point($MidPoint, $this->a*3/4 , $this->b*3/4); 
        imagefilltoborder($image,floor($PieCenterX + $ArcX),
floor($PieCenterY + $ArcY), $CurrentColor,$CurrentColor); 
        imagestring($image,2,floor($PieCenterX + $ArcX-5),
floor($PieCenterY + $ArcY-5),$percent."%",$colorBorder); 

        //画阴影 
        if ($StartDegrees>=0 and $StartDegrees<=180){ 
           if($EndDegrees<=180){     
               for($k = 1; $k < 15; $k++) 
                imagearc($image,$PieCenterX, $PieCenterY+$k,$DoubleA, 
$DoubleB, $StartDegrees, $EndDegrees, $CurrentDarkColor); 
           }else{ 
               for($k = 1; $k < 15; $k++) 
                imagearc($image,$PieCenterX, $PieCenterY+$k,$DoubleA, $DoubleB,
 $StartDegrees, 180, $CurrentDarkColor); 
           } 
        } 
   }
/*到此,已经可以产生一幅3D饼形图。下面的工作就是把它发到浏览器上,重要的一点是要将标头发给浏览器,让它知道这是一个GIF文件*/
//输出生成的图片
header("Content-type: image/gif"); 
    imagegif($image); 
    imagedestroy($image); 
}//End drawPie() 
}//End class 

//实现 
$objp = new Pie3d(); 
$objp->DrawPie(); 
?>

 

分享到:
评论

相关推荐

    一套自己花钱买的Web统计报表控件(柱形图、线形图、饼形图...)

    在标题提到的这套控件中,包含了柱形图、线形图和饼形图等多种图表类型,这些都是数据分析和展示中最常用的图表形式。 1. **柱形图**:柱形图是一种用垂直或水平的条形长度来表示数据大小的图表。在Web应用中,它常...

    jquery统计图插件包括

    总结起来,jQuery统计图插件是数据可视化的强大工具,它们通过线形图、饼形图和柱形图等形式,帮助开发者将复杂的数据转化为易于理解的图形,从而提升用户体验,更好地传达信息。无论是在商业分析、科学研究还是日常...

    Origin快速入门.pdf

    二维图形包括线形图、柱形图、饼形图等多种类型。 多层图形 多层图形是 Origin 中的一种高级图形类型,用户可以使用多层图形来展示多维数据。多层图形包括柱形图、饼形图、雷达图等多种类型。 图形定制 Origin ...

    jquery统计图插件

    jquery统计图插件包括: 线形统计图、饼形统计图、柱形统计图

    企业管理用图表说话.pdf

    在实际应用中,可以设计各种图表来解决具体问题,如展示玩具熊在一定时间内的销售增长(可能用线形图)、客户市场份额的变化(饼形图或柱形图)、客户业绩排名与竞争对手的对比(条形图)以及出生人数与玩具熊销售的...

    matlab高级绘图

    这些函数可以绘制各种类型的图形,例如线形图、柱形图、饼形图等。通过使用不同的函数和参数,可以控制图形的外观、颜色、标签等。 1. plot函数:plot函数是Matlab中最基本的绘图函数,用于绘制二维图形。例如:`...

    培训课程:图表绘制.ppt

    3. 选择合适的图表类型:根据比较类型选择最能展现信息的图表,如时间序列可以用线形图,成分比较则用饼形图等。 【实践与应用】 在实际操作中,可以通过设计不同的图表来展示特定的数据关系,比如: 1. 用线形图...

    EXCEL第四章课件

    创建饼图同样便捷,选择数据,插入图表,选择饼形图即可。 折线图是呈现数据随时间变化趋势的最佳工具。它可以揭示数据在一段时间内的增减情况,帮助预测未来的走势。例如,如果我们要了解各杀毒软件销售量在季度间...

    图表绘制方法培训讲义.ppt

    3. 选择合适的图表类型,如饼形图、条形图、柱形图、线形图或散点图。 在实际应用中,可以根据具体需求,比如玩具熊在一定时间内的销售增长,客户市场份额的变化,客户业绩排名与竞争对手的对比,以及出生人数与...

    汇报材料写作—图表绘制方法培训.ppt

    如饼形图、条形图、柱形图、线形图和散点图等,都是常见的数据可视化手段。 3. 数据与比较:在设计图表时,需要先分析数据,确定要表达的信息,然后决定比较类型。例如,比较可以是成分分析(各部分占整体的比例)...

    图表绘制方法培训.pptx

    3. 选择合适的图表类型,根据比较类型来决定使用饼形图、条形图、线形图、柱形图或散点图。 在设计图表时,应遵循麦肯锡的标准格式,包括: - **信息标题**:清晰地介绍图表的主题。 - **数据源**:提供数据来源以...

    图表的方式汇报工作.pptx

    常见的图表类型包括饼形图、条形图、柱形图、线形图、散点图和表格等。饼形图用于显示各部分占整体的比例,适合分析成分;条形图和柱形图用于比较各类别的数值大小,适用于排序和分类数据;线形图则用于展示数据随...

    ZedGraphDemo.zip

    样例代码j包括实时曲线图,多种线性图集中显示以及柱形图、饼形图、线形图等使用和介绍,并有代码注解,非常适合学习者。 public partial class Form3 : Form { Random ran = new Random(); PointPairList list1...

    八年级信息技术知识点总结一.docx

    28. 图表分析:柱形图、线形图和饼形图的作用同上。 29. 计算机基本组成:运算器、控制器、存储器、输入设备和输出设备。 30. 二进制与字:计算机以二进制处理信息,基本存储单位是字。 31. 开机顺序:电源→...

    汇报材料写作——图表绘制方法培训.ppt

    1. **饼形图**:用于展示各部分占整体的比例关系。 2. **条形图**:通过条形的长度对比不同类别或时间段的数据量。 3. **柱形图**:与条形图类似,但通常用于横向展示,适用于有限的空间。 4. **线形图**:显示随...

    bpr理念培训资料(b).pdf

    常见的图表类型包括饼形图、条形图、柱形图、线形图、散点图和表格等,它们分别适用于不同的数据比较类型,如成分比较、排序、时间序列分析、频率分布和关联性分析。 **数据驱动的图表设计** 需要经过三个步骤:...

    图表的方式汇报工作.ppt

    1. **饼形图**:用于展示各部分占整体的比例。 2. **条形图**和**柱形图**:比较不同类别的数值大小。 3. **线形图**:显示随时间变化的趋势。 4. **散点图**:展示两个变量之间的关系。 5. **表格**:用于清晰地...

Global site tag (gtag.js) - Google Analytics