All articles| All Pictures| All Softwares| All Video| Go home page| Write articles| Upload pictures

Reading number is top 10 articles
利用RowFilter属性,将一个DataSet绑定到两个DataGrid_[Asp.Net教程]
借用VB的My,C#照样条条大路通罗马_.net资料_编程技术
delphiGDI图像编程
C#中定义鼠标指针形状的方法实例
ASP.NET常见错误提示_[Asp.Net教程]
做网站的一般企业网站表结构信息_[SQL Server教程]
Delphi过程与函数的调用约定
TechED,VS2008课件_[Asp.Net教程]
ASP.NET3.5的ListView与CSS,Friendly_.net资料_编程技术
用PHP程序实现从数组里筛选出重复的数据_[PHP教程]
Reading number is top 10 pictures
Extremely rare TianShan Mountains snow lotus1
修电脑也有这么漂亮的美女
Go to the national museum3
Summer is most suitable for young people to travel in China6
Chinese paper-cut grilles art appreciation3
Absolutely shocked. National geographic 50 animal photographys4
Beautiful Japanese beauty(漂亮的日本美女)
2012 national geographic daily picture7
Ashlynn Brooke a group sexy photo4
毕姥爷事件,告诉你6条真理
Download software ranking
The hero
jdk1.6 for windows
C#编程思想
Boxer's Top ten classic battle7
Unix video tutorial10
Boxer's Top ten classic battle9
Macromedia Dreamweaver 8
Unix video tutorial15
linux初级教程
双旗镇刀客B
归海一刀 published in(发表于) 2014/2/17 7:34:04 Edit(编辑)
php实现报表类_[PHP教程]

php实现报表类_[PHP教程]

php实现报表类_[PHP教程]

原创内容....实现曲线图,饼图,柱形图.


转贴请注明出处,


http://blog.csdn.net/liq330


效果图:




原代码如下:



class ImageReport
{
var Image;//图片对像

var ImageName;//报表名称
var ImageType;//报表类型

var ImageWidth;//图片宽
var ImageHeight;//图片高


var BgImage;//背景图片
var BgR;//背景颜色R值
var BgG;//背景颜色G值
var BgB;//背景颜色B值

var FontSize;//字体大小
var FontColor;//字体颜色

var ItemArray;//数据数组
var ItemInterval;//两项间的间隔
var XName;//x轴的名称
var YName;//y轴的名称
var isScale;//是否显示刻度值
var margin;//边距

//字体
var font = 'arial.ttf';

function ImageReport()
{
return ;
}

//设置图片基本信息
function setImage(ImageName,ImageType,ImageWidth=500,ImageHeight=400)
{
this->ImageName =ImageName;
this->ImageType =ImageType;
this->ImageWidth =ImageWidth;
this->ImageHeight=ImageHeight;
}

//设置坐标
function setItem(ItemArray,ItemInterval="20",XName="",YName="",isScale=true)
{
this->ItemArray =ItemArray;
this->ItemInterval =ItemInterval;
this->XName =XName;
this->YName =YName;
this->isScale =isScale;
}

//设置图片背景
function setBg(BgR="235",BgG="255",BgB="255",BgImage="")
{
this->BgR =BgR;
this->BgG =BgG;
this->BgB =BgG;
this->BgImage =BgImage;
}

//设置字体
function setFont(FontSize)
{
this->FontSize =FontSize;
this->margin =FontSize*2+5;
//this->FontColor =FontColor;
}

//画主体
function drawReport()
{
//建立画布
this->Image=imagecreatetruecolor(this->ImageWidth,this->ImageHeight);
//填充背景色
background=ImageColorAllocate(this->Image,this->BgR,this->BgG,this->BgB);

//画背景颜色
ImageFilledRectangle(this->Image,0,0,this->ImageWidth,this->ImageHeight,background);

//画背景图片
if(!empty(this->BgImage))
{
this->drawLogo();
}
//跟距参数,画不同的图片
switch(this->ImageType)
{
case "1":
this->drawColumn();
break;
case "2":
this->drawCurve();
break;
case "3":
this->drawCircle();
break;
default:
break;
}

}

//画柱状图
function drawColumn()
{
//调用画标题
this->drawTitle();
//调用画坐标
this->drawXY();

//获取数组的量
num=count(this->ItemArray);
//获取数组中的最大值
//最大值
max=this->getArrayMax(this->ItemArray);


for(i=0;iItemArray);i++)
{
//随机颜色
srand((double)microtime()*1000000);
R=Rand(50,200);
G=Rand(50,200);
B=Rand(50,200);

color=ImageColorAllocate(this->Image,R,G,B);

yColor=ImageColorAllocate(this->Image,R-10,G-10,B-10);
//柱体高度

height=((this->ImageHeight-this->margin*2-this->FontSize-5)*this->ItemArray[i]["value"])/max;

//画柱体
ImageFilledRectangle(this->Image,this->margin+this->ItemInterval*(2*i+1),this->ImageHeight-height+this->FontSize-5-this->margin,this->margin+this->ItemInterval*(2*i+2),this->ImageHeight-this->margin,color);
//画柱体上的阴影
imagefilledarc(this->Image, this->margin+this->ItemInterval*(2*i+3/2), this->ImageHeight-height+this->FontSize-5-this->margin,this->ItemInterval, this->margin/2, 0, 360, yColor, img_ARC_PIE);

//写柱体上面的数值
imagestring(this->Image,this->FontSize,this->margin+this->ItemInterval*(2*i+1),this->ImageHeight-height+this->FontSize-5-this->margin-this->FontSize-10,this->ItemArray[i]["value"],color);
//颜色
color=ImageColorAllocate(this->Image,255-this->BgR,255-this->BgG,255-this->BgB);


//写柱体的键值
imagettftext(this->Image,7,0,this->margin+this->ItemInterval*(2*i+1)-3,this->ImageHeight-this->margin+this->FontSize+2,color,this->font,this->ItemArray[i]["key"]);

}
//调用画LOGO
// this->drawLogo();


}
//画曲线图
function drawCurve()
{
//调用画标题
this->drawTitle();
//调用画坐标
this->drawXY(true);

//最大值
max=this->getArrayMax(this->ItemArray);

//颜色
color=ImageColorAllocate(this->Image,255-this->BgR,255-this->BgG,255-this->BgB);
//背景刻度的颜色
bgSColor=ImageColorAllocate(this->Image,this->BgR-10,this->BgG-10,this->BgB-10);
//线条颜色

linkColor=ImageColorAllocate(this->Image,51,51,153);


//画右X轴
ImageLine(this->Image,this->margin,this->margin+this->FontSize+5,this->ImageWidth-this->margin,this->margin+this->FontSize+5,color);
//画右Y轴
ImageLine(this->Image,this->ImageWidth-this->margin,this->margin+this->FontSize+5,this->ImageWidth-this->margin,this->ImageHeight-this->margin+2,color);

tdCount=count(this->ItemArray);
tdWidth=(this->ImageWidth-this->margin*2)/tdCount;


for(i=0;i
{
//线条高度
startHeight=((this->ImageHeight-this->margin*2-this->FontSize-5)*this->ItemArray[i]["value"])/max;
//结束线线条高度
endHeight =((this->ImageHeight-this->margin*2-this->FontSize-5)*this->ItemArray[i+1]["value"])/max;
//画背景X轴刻度
ImageLine(this->Image,(i+1)*tdWidth+this->margin,this->margin+this->FontSize+6,(i+1)*tdWidth+this->margin,this->ImageHeight-this->margin,bgSColor);
//画线条
ImageLine(this->Image,i*tdWidth+this->margin,this->ImageHeight-startHeight+this->FontSize-5-this->margin,(i+1)*tdWidth+this->margin,this->ImageHeight-endHeight+this->FontSize-5-this->margin,linkColor);
}

//画刻度的值
for(i=0;i
{
//显示值
//ImageString(this->Image,5,i*tdWidth+this->margin,this->ImageHeight-this->margin+1,this->ItemArray[i]["key"],color);
//画标题的字
imagettftext(this->Image,7,0,i*tdWidth+this->margin,this->ImageHeight-this->margin+1+10,color,this->font,this->ItemArray[i]["key"]);
}

}

//画饼图
function drawCircle()
{
//一个扇区的角度
degree=0;
//开始的角度
e=0;
//用于保存颜色的数组
colorArray;
//用于保存开始角度的数组
startDegree;
//用于保存结束角度的数组
endDegree;

//扇形的宽
width=(this->ImageWidth-this->margin*2)-200;

//获取数组的量
num=count(this->ItemArray);
//调用画标题
this->drawTitle();
//各项之和
total=0;

//计算各项之和
for(i=0;i {
total+=this->ItemArray[i]["value"];
}

//保扇区的各项值保存到数组
for(i=0;iItemArray);i++)
{
//随机颜色
srand((double)microtime()*1000000);

R=Rand(50,200);
G=Rand(50,200);
B=Rand(50,200);

//把颜色保存进数组
colorArray[i]["R"]=R;
colorArray[i]["G"]=G;
colorArray[i]["B"]=B;

//计算一个区块的角度
//echo this->ItemArray[i]["value"];
//exit;
degree=this->ItemArray[i]["value"]/total*360;
startDegree[i]=e;
endDegree[i]=e+degree;
e+=degree;
}

j=width/4+this->margin+35;
mJ=j-15;
//画阴影
for (j;j >mJ; j--)
{
for(i=0;i {
color=ImageColorAllocate(this->Image,colorArray[i]["R"]-10,colorArray[i]["G"]-10,colorArray[i]["B"]-10);
imagefilledarc(this->Image, width/2+this->margin, j, width, width/2, startDegree[i], endDegree[i], color, img_ARC_PIE);
}
}
//画区面和右边的标识字
for(i=0;i {
//获取颜色
color=ImageColorAllocate(this->Image,colorArray[i]["R"],colorArray[i]["G"],colorArray[i]["B"]);

//画区面
imagefilledarc(this->Image, width/2+this->margin, width/4+this->margin+20, width, width/2, startDegree[i], endDegree[i], color, img_ARC_PIE);


//说明方块的上边距
top=this->margin+20+i*10;
//画右边的距形
ImageFilledRectangle(this->Image,width+this->margin+20,top+(i*10),width+this->margin+30,top+(i*10)+10,color);
//字体颜色为黑色
fontColor=ImageColorAllocate(this->Image,255-this->BgR,255-this->BgG,255-this->BgB);

//画右边的说明文字
rightStr=this->ItemArray[i]["key"].":".this->ItemArray[i]["value"]."(".round(this->ItemArray[i]["value"]*100/total,2)."%)";
//ImageString(this->Image,10,width+this->margin+35,top+(i*10)-3,rightStr,fontColor);
imagettftext(this->Image, 9,0,width+this->margin+35,top+(i*10)+8,fontColor,this->font,rightStr);

}
//清空各数组
unset(colorArray,startDegree,endDegree);

}

//显示图片
function showImage(ImageSavePath="")
{
// echo ImageSavePath;
//exit;
if(empty(ImageSavePath))
{
ImagePNG(this->Image);
}
else
{
ImagePNG(this->Image,ImageSavePath);
}

ImageDestroy(this->Image);
}

//画标题
function drawTitle()
{
//颜色
color=ImageColorAllocate(this->Image,255-this->BgR,255-this->BgG,255-this->BgB);

//阴影色
black = imagecolorallocate(this->Image, 0, 0, 0);

//计算标题字体的宽度
fontWidth=strlen(this->ImageName)*(this->FontSize)-strlen(this->ImageName)*2;

//画标题字的阴影
imagettftext(this->Image, this->FontSize+3,0,this->ImageWidth/2-fontWidth/2+1,this->FontSize+11,black,this->font,this->ImageName);
//画标题的字
imagettftext(this->Image, this->FontSize+3,0,this->ImageWidth/2-fontWidth/2,this->FontSize+10,color,this->font,this->ImageName);

//画标题下面的线条
imageline(this->Image,this->ImageWidth/2-fontWidth/2-20,this->FontSize+12,this->ImageWidth/2-fontWidth/2+1+fontWidth+20,this->FontSize+12,color);
}

//画LOGO
function drawLogo()
{

list(w,h,type) = getimagesize(this->BgImage);

source;
switch(type)
{
//图片是GIF
case 1:
source=imagecreatefromgif(this->BgImage);
break;
//图片是jPG
case 2:
source = imagecreatefromjpeg(this->BgImage);
break;
//图片是PNG
case 3:
source = imagecreatefrompng(this->BgImage);
}

imagecopymerge(this->Image,source,0,0,0,0,w,h,20);
}

//画坐标
function drawXY(bgScale=false)
{
//最大值
max=this->getArrayMax(this->ItemArray);

//颜色
color=ImageColorAllocate(this->Image,255-this->BgR,255-this->BgG,255-this->BgB);
//背景刻度的颜色
bgSColor=ImageColorAllocate(this->Image,this->BgR-10,this->BgG-10,this->BgB-10);

//画X轴
ImageLine(this->Image,this->margin,this->ImageHeight-this->margin+2,this->ImageWidth-this->margin,this->ImageHeight-this->margin+2,color);
//画Y轴
ImageLine(this->Image,this->margin,this->margin+this->FontSize+5,this->margin,this->ImageHeight-this->margin+2,color);


//阴影色
black = imagecolorallocate(this->Image, 0, 0, 0);

//画Y轴字的阴影
imagettftext(this->Image, this->FontSize, 90, this->FontSize+2, intval(this->ImageHeight/2)-1, black, this->font, this->YName);
//画Y轴的字
imagettftext(this->Image, this->FontSize, 90, this->FontSize+2, intval(this->ImageHeight/2), color, this->font, this->YName);

//画X轴字的阴影
imagettftext(this->Image, this->FontSize,0,intval(this->ImageWidth/2)-1,this->ImageHeight-this->FontSize+5,black,this->font,this->XName);
//画X轴的字
imagettftext(this->Image, this->FontSize,0,intval(this->ImageWidth/2),this->ImageHeight-this->FontSize+5,color,this->font,this->XName);


//画0点坐标
imagettftext(this->Image,8,90,this->margin/2+this->FontSize,this->ImageHeight-this->margin,color,this->font,"0");
//画最大值数据
// imagettftext(this->Image, this->FontSize,90,this->margin/2+7,this->margin+20,black,font,max);

//画内容的实际高度
height=this->ImageHeight-this->margin*2-(this->FontSize+5);
//每一刻度的值
scale=intval(height/10);


for(i=0;i<10;i++)
{
//画刻度,如果设置了背景刻度
if(bgScale)
{
ImageLine(this->Image,this->margin+1,this->margin+i*scale+this->FontSize+5+i,this->ImageWidth-this->margin,this->margin+i*scale+this->FontSize+5+i,bgSColor);
}
else
{
ImageLine(this->Image,this->margin-2,this->margin+i*scale+this->FontSize+5+i,this->margin,this->margin+i*scale+this->FontSize+5+i,color);
}
//画刻度上的值
if(this->isScale)
{
num=round(max-max/10*i,1);
imagettftext(this->Image, 7,90,this->margin/2+this->FontSize,this->margin+i*scale+15+this->FontSize,color,this->font,num);
}
}
//如果未画刻度值,则画最大值
if(!this->isScale)
{
imagettftext(this->Image, 7,90,this->margin/2+this->FontSize,this->margin+15+this->FontSize,color,this->font,max);
}

}

//获取数组中的最大值
function getArrayMax(Array)
{
temp=0;
for(i=0;i {
if(temp {
temp=Array[i]["value"];
}
}
return temp;

}

?>

调用方法


require_once ("ImageReport.inc.php");
report=new ImageReport;
report->setImage(title,type,imgW,imgH);//参数(标题,类型(1(柱图),2(曲线图),3(饼图)),图片宽,图片高)

//这个我用数据库查出来的,要改一下.格式是多维数据.key=>value
temparray=this->db->GetArray("select report_key as 'key',report_value as value from cms_r_report_data where report_id=id order by report_dataId ASC");

report->setItem(temparray,interval,XName,YName,isScale);//参数(数组,间隔,X轴文字,Y轴文字,背景图片)
report->setBg(BgR,BgG,BgB,"logo.jpg");//参数(背景颜色)
report->setFont(10);//字体大小1-10
report->drawReport();
report->showImage("../images/report/".id.".png");//参数为保存的路径

来源:http://blog.csdn.net/liq330





添加到del.icio.us 添加到新浪ViVi 添加到百度搜藏 添加到POCO网摘 添加到天天网摘365Key 添加到和讯网摘 添加到天极网摘 添加到黑米书签 添加到QQ书签 添加到雅虎收藏 添加到奇客发现 diigo it 添加到饭否 添加到飞豆订阅 添加到抓虾收藏 添加到鲜果订阅 digg it 貼到funP 添加到有道阅读 Live Favorites 添加到Newsvine 打印本页 用Email发送本页 在Facebook上分享


Disclaimer Privacy Policy About us Site Map

If you have any requirements, please contact webmaster。(如果有什么要求,请联系站长)
Copyright ©2011-
uuhomepage.com, Inc. All rights reserved.