\n以下是引用片段:
\n<?php /** * 文件:cal_image.class.php * 功能:产生柱状、折线图、横柱图类 * 作者:yemaosheng.com */ \nClass 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; } \n /* 设置获取数字 */ function setItem(ArraySplit,ItemArray,ReportType,Border) { this->ARRAYSPLIT=ArraySplit; this->ITEMARRAY=ItemArray; this->REPORTTYPE=ReportType; this->BORDER=Border; } /* 设置字体 */ function setFont(FontSize) { this->FONTSIZE=FontSize; } \n /* 主体 */ 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(); } \n /* 打印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); } } \n /* 竖柱形图 */ function imageColumnS() { item_array=Split(this->ARRAYSPLIT,this->ITEMARRAY); num=Count(item_array); item_max=0; for (i=0;i<num;i++) { item_max=Max(item_max,item_array[i]); } xx=this->BORDER*2; //画柱形图 for (i=0;i<num;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; } } \n /* 横柱形图 */ function imageColumnH() { item_array=Split(this->ARRAYSPLIT,this->ITEMARRAY); num=Count(item_array); item_max=0; for (i=0;i<num;i++) { item_max=Max(item_max,item_array[i]); } yy=this->Y-this->BORDER*2; //画柱形图 for (i=0;i<num;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; } } \n /* 折线图 */ function imageLine() { item_array=Split(this->ARRAYSPLIT,this->ITEMARRAY); num=Count(item_array); item_max=0; for (i=0;i<num;i++) { item_max=Max(item_max,item_array[i]); } //xx=this->BORDER; //画柱形图 for (i=0;i<num;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; } } \n /* 完成打印图形 */ function printAll() { ImageGIF(this->IMAGE); ImageDestroy(this->IMAGE); } \n /* 调试函数 */ function debug() { echo “X:”.this->X.”<br>Y:”.this->Y; echo “<br>BORDER:”.this->BORDER; item_array=split(this->ARRAYSPLIT,this->ITEMARRAY); num=Count(item_array); echo “<br>数值个数:”.num.”<br>数值:”; for (i=0;i<num;i++) { echo “<br>”.item_array[i]; } } } ?> |