Go homepage(回首页)
Upload pictures (上传图片)
Write articles (发文字帖)

The author:(作者)归海一刀
published in(发表于) 2014/2/10 6:46:27
PHP一生成柱状图、横柱图、折线图的类_[PHP教程]

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();
?>







If you have any requirements, please contact webmaster。(如果有什么要求,请联系站长)





QQ:154298438
QQ:417480759