网络编程 | 站长之家 | 网页制作 | 图形图象 | 操作系统 | 冲浪宝典 | 软件教学 | 网络办公 | 邮件系统 | 网络安全 | 认证考试 | 系统进程
Firefox | IE | Maxthon | 迅雷 | 电驴 | BitComet | FlashGet | QQ | QQ空间 | Vista | 输入法 | Ghost | Word | Excel | wps | Powerpoint
asp | .net | php | jsp | Sql | c# | Ajax | xml | Dreamweaver | FrontPages | Javascript | css | photoshop | fireworks | Flash | Cad | Discuz!
当前位置 > 网站建设学院 > 网络编程 > PHP技巧
Tag:注入,存储过程,分页,安全,优化,xmlhttp,fso,jmail,application,session,防盗链,stream,无组件,组件,md5,乱码,缓存,加密,验证码,算法,cookies,ubb,正则表达式,水印,索引,日志,压缩,base64,url重写,上传,控件,Web.config,JDBC,函数,内存,PDF,迁移,结构,破解,编译,配置,进程,分词,IIS,Apache,Tomcat,phpmyadmin,Gzip,触发器,socket
网络编程:ASP教程,ASP.NET教程,PHP教程,JSP教程,C#教程,数据库,XML教程,Ajax,Java,Perl,Shell,VB教程,Delphi,C/C++教程,软件工程,J2EE/J2ME,移动开发
本月文章推荐
.PHP破解163相册外连.
.PHP应用提速面面观.
.说说PHP作图(一).
.资料注册后发信小技巧.
.关于在php.ini中添加extension=p.
.有关在Windows下配置PHP+Apache+.
.PHP网站提速三大“软”招.
.二十行语句实现从Excel到mysql的.
.Apache, PHP在Windows 9x/NT下的.
.PHP实现自动刷数和“灌水”机.
.Pear::Pager分页类简介.
.PHP base64+gzinflate压缩编码和.
.通过对服务器端特性的配置加强ph.
.利用php来自动调用不同服务器上的.
.攻克CakePHP系列二 表单数据显示.
.PHP网站开发遇到的中文编码.
.PHP 增加了对 .ZIP 文件的读取功.
.在PHP5中使用DOM控制XML.
.编写PHP的安全策略.
.用php得到163的邮件信息.

用GD图库生成横竖柱状图折线图的类

发表日期:2005-5-20


最近写的一个GD图库用以生成横竖柱状图和折线图的类库,算是一个教学例程吧 
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<$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; 

//-----------横柱形图 
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; 

//--------------折线图 
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; 

//--------------完成打印图形http://knowsky.com 
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<$num;$i++){
echo "
".$item_array[$i]; 


$report=new ImageReport; 
$report->setImage(600,300,255,255,255,1);//参数(长,宽,背影色R,G,B,是否透明1或0) 
$temparray="50,25,100,250,180,200,150,220,200,150,50,25,100,250,180,200,150,220,200,150";//数值,用指定符号隔开 
$report->setItem(',',$temparray,3,20);//参数(分隔数值的指定符号,数值变量,样式1为竖柱图2为横柱图3为折线图,距离) 
$report->setFont(1);//字体大小1-10 
$report->PrintReport(); 
//$report->debug();//调式之用 
?>

上一篇:php与XML、XSLT、Mysql的结合运用,安装篇 人气:10151
下一篇:一个全面获取图象信息的函数getImageInfo() 人气:12175
浏览全部php的内容 Dreamweaver插件下载 网页广告代码 祝你圣诞节快乐 2009年新年快乐