PHP一生成柱状图、横柱图、折线图的类_[PHP教程]                                           					
以下是引用片段:/**
 * 文件:cal_image.class.php
 * 功能:产生柱状、折线图、横柱图类
 * 作者:yemaosheng.com
 */
Class ImageReport
{ 
 /* 图片数属性 */
 var X;    //图片大小X轴 
 var Y;    //图片大小Y轴 
 var R;    //背影色R值 
 var G;    //背影色G值 
 var B;    //背影色B值 
 var TRANSPARENT; //是否透明1或0 
 var IMAGE;   //图片对像 
 /* 附加属性 */ 
 var ARRAYSPLIT; //指定用于分隔数值的符号 
 var ITEMARRAY;  //数值 
 var REPORTTYPE; //图表类型,1为竖柱形2为横柱形3为折线形 
 var BORDER;  //距离 
 /* 字体属性*/
 var FONTSIZE;  //字体大小 
 var FONTCOLOR;  //字体颜色 
 
 /* 设置图片 */
 function setImage(SizeX,SizeY,R,G,B,Transparent)
 { 
  this->X=SizeX;  
  this->Y=SizeY;  
  this->R=R;  
  this->G=G;  
  this->B=B;  
  this->TRANSPARENT=Transparent;  
 }  
 /* 设置获取数字 */
 function setItem(ArraySplit,ItemArray,ReportType,Border)
 {  
  this->ARRAYSPLIT=ArraySplit;  
  this->ITEMARRAY=ItemArray;  
  this->REPORTTYPE=ReportType;  
  this->BORDER=Border;  
 }
 
 /* 设置字体 */
 function setFont(FontSize)
 {  
  this->FONTSIZE=FontSize;  
 }  
 /* 主体 */
 function PrintReport()
 {  
  Header( "Content-type: image/gif");  
  //建立画布大小  
  this->IMAGE=ImageCreate(this->X,this->Y);  
  //设定画布背景色  
  background=ImageColorAllocate(this->IMAGE,this->R,this->G,this->B);  
  if(this->TRANSPARENT=="1")
  {  
   //背影透明  
   Imagecolortransparent(this->IMAGE,background);  
  }
  else
  {  
   //如不要透明时可填充背景色  
   ImageFilledRectangle(this->IMAGE,0,0,this->X,this->Y,background);  
  }  
  //参数字体文小及颜色  
  this->FONTCOLOR=ImageColorAllocate(this->IMAGE,255-this->R,255-this->G,255-this->B);  
  Switch (this->REPORTTYPE)
  {  
   case "0":  
    break;  
   case "1":  
    this->imageColumnS();  
    break;  
   case "2":  
    this->imageColumnH();  
    break;  
   case "3":  
    this->imageLine();  
    break;  
  }  
  this->printXY();  
  this->printAll();  
 }  
 /* 打印XY坐标轴 */
 function printXY()
 {  
  //画XY坐标轴*/  
  color=ImageColorAllocate(this->IMAGE,255-this->R,255-this->G,255-this->B);  
  xx=this->X/10;  
  yy=this->Y-this->Y/10;  
  ImageLine(this->IMAGE,this->BORDER,this->BORDER,this->BORDER,this->Y-this->BORDER,color);//X轴  
  ImageLine(this->IMAGE,this->BORDER,this->Y-this->BORDER,this->X-this->BORDER,this->Y-this->BORDER,color);//y轴  
  //Y轴上刻度  
  rulerY=this->Y-this->BORDER;  
  while(rulerY>this->BORDER*2)
  {  
   rulerY=rulerY-this->BORDER;  
   ImageLine(this->IMAGE,this->BORDER,rulerY,this->BORDER-2,rulerY,color);  
  }  
  //X轴上刻度  
  rulerX=rulerX+this->BORDER;  
  while(rulerX<(this->X-this->BORDER*2))
  {  
   rulerX=rulerX+this->BORDER;  
   //ImageLine(this->IMAGE,this->BORDER,10,this->BORDER+10,10,color);  
   ImageLine(this->IMAGE,rulerX,this->Y-this->BORDER,rulerX,this->Y-this->BORDER+2,color);  
  }  
 }  
 /* 竖柱形图 */
 function imageColumnS()
 {  
  item_array=Split(this->ARRAYSPLIT,this->ITEMARRAY);  
  num=Count(item_array);  
  item_max=0;  
  for (i=0;i  { 
   item_max=Max(item_max,item_array[i]); 
  } 
  xx=this->BORDER*2;  
  //画柱形图  
  for (i=0;i   srand((double)microtime()*1000000); 
   if(this->R!=255 && this->G!=255 && this->B!=255)
   {  
    R=Rand(this->R,200);  
    G=Rand(this->G,200);  
    B=Rand(this->B,200);  
   }
   else
   {  
    R=Rand(50,200);  
    G=Rand(50,200);  
    B=Rand(50,200);  
   }  
   color=ImageColorAllocate(this->IMAGE,R,G,B);  
   //柱形高度  
   height=(this->Y-this->BORDER)-(this->Y-this->BORDER*2)*(item_array[i]/item_max);  
   ImageFilledRectangle(this->IMAGE,xx,height,xx+this->BORDER,this->Y-this->BORDER,color);  
   ImageString(this->IMAGE,this->FONTSIZE,xx,height-this->BORDER,item_array[i],this->FONTCOLOR);  
   //用于间隔  
   xx=xx+this->BORDER*2;  
  }  
 }  
 /* 横柱形图 */
 function imageColumnH()
 {  
  item_array=Split(this->ARRAYSPLIT,this->ITEMARRAY);  
  num=Count(item_array);  
  item_max=0;  
  for (i=0;i  { 
   item_max=Max(item_max,item_array[i]); 
  } 
  yy=this->Y-this->BORDER*2;  
  //画柱形图  
  for (i=0;i  { 
   srand((double)microtime()*1000000); 
   if(this->R!=255 && this->G!=255 && this->B!=255)
   {  
    R=Rand(this->R,200);  
    G=Rand(this->G,200);  
    B=Rand(this->B,200);  
   }
   else
   {  
    R=Rand(50,200);  
    G=Rand(50,200);  
    B=Rand(50,200);  
   }  
   color=ImageColorAllocate(this->IMAGE,R,G,B);  
   //柱形长度  
   leight=(this->X-this->BORDER*2)*(item_array[i]/item_max);  
   ImageFilledRectangle(this->IMAGE,this->BORDER,yy-this->BORDER,leight,yy,color);  
   ImageString(this->IMAGE,this->FONTSIZE,leight+2,yy-this->BORDER,item_array[i],this->FONTCOLOR);  
   //用于间隔  
   yy=yy-this->BORDER*2;  
  }  
 }  
 /* 折线图 */
 function imageLine()
 {  
  item_array=Split(this->ARRAYSPLIT,this->ITEMARRAY);  
  num=Count(item_array);  
  item_max=0;  
  for (i=0;i  { 
   item_max=Max(item_max,item_array[i]); 
  } 
  //xx=this->BORDER;  
  //画柱形图  
  for (i=0;i  { 
   srand((double)microtime()*1000000); 
   if(this->R!=255 && this->G!=255 && this->B!=255)
   {  
    R=Rand(this->R,200);  
    G=Rand(this->G,200);  
    B=Rand(this->B,200);  
   }
   else
   {  
    R=Rand(50,200);  
    G=Rand(50,200);  
    B=Rand(50,200);  
   }  
   color=ImageColorAllocate(this->IMAGE,R,G,B);  
   //柱形高度  
   height_now=(this->Y-this->BORDER)-(this->Y-this->BORDER*2)*(item_array[i]/item_max);  
   if(i!="0")
   {  
    ImageLine(this->IMAGE,xx,height_next,xx+this->BORDER,height_now,color);  
   }  
   ImageString(this->IMAGE,this->FONTSIZE,xx+this->BORDER,height_now-this->BORDER/2,item_array[i],this->FONTCOLOR);  
   height_next=height_now;  
   //用于间隔  
   xx=xx+this->BORDER;  
  }  
 }  
 /* 完成打印图形 */
 function printAll()
 {  
  ImageGIF(this->IMAGE);  
  ImageDestroy(this->IMAGE);  
 }  
 /* 调试函数 */
 function debug()
 {  
  echo "X:".this->X."Y:".this->Y;  
  echo "BORDER:".this->BORDER;  
  item_array=split(this->ARRAYSPLIT,this->ITEMARRAY);  
  num=Count(item_array);  
  echo "数值个数:".num."数值:";  
  for (i=0;i  { 
   echo "".item_array[i];  
  }  
 }  
}  
?>
/* 使用实例代码 */
以下是引用片段:
 //实例化对象
 report = new ImageReport();  
 //参数(长,宽,背影色R,G,B,是否透明1或0) 
 report->setImage(2000, 300, 255, 255, 255, 1);
 //数值,用指定符号隔开  
 temparray="50,25,100,250,180,200,2150,220,200,150,50,25,100,250,180,200,150,220,200,150";
 //参数(分隔数值的指定符号,数值变量,样式1为竖柱图2为横柱图3为折线图,距离)  
 report->setItem(',',temparray,3,20);
 //字体大小1-10  
 report->setFont(1);
 //输出图片
 report->PrintReport();  
 //调式
// report->debug();
?>