php下实现折线图效果的代码


Posted in PHP onApril 28, 2007

<?php
  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 相关文章推荐
简单的页面缓冲技术
Oct 09 PHP
php 什么是PEAR?(第二篇)
Mar 19 PHP
PHP中static关键字原理的学习研究分析
Jul 18 PHP
php数组函数序列之array_values() 获取数组元素值的函数与方法
Oct 30 PHP
探讨file_get_contents与curl效率及稳定性的分析
Jun 06 PHP
解析如何去掉CodeIgniter URL中的index.php
Jun 25 PHP
php统计文章排行示例
Mar 04 PHP
ThinkPHP模板判断输出Present标签用法详解
Jun 30 PHP
PHP explode()函数的几个应用和implode()函数有什么区别
Nov 05 PHP
PHP简单获取网站百度搜索和搜狗搜索收录量的方法
Aug 23 PHP
php动态读取数据清除最右边距的方法
Apr 12 PHP
微信开发之获取JSAPI TICKET
Jul 07 PHP
php下的权限算法的实现
Apr 28 #PHP
php 中的str_replace 函数总结
Apr 27 #PHP
解决php中Cannot send session cache limiter 的问题的方法
Apr 27 #PHP
escape unescape的php下的实现方法
Apr 27 #PHP
mysql 全文搜索 技巧
Apr 27 #PHP
mysql 搜索之简单应用
Apr 27 #PHP
mysql 字段类型说明
Apr 27 #PHP
You might like
Thinkphp微信公众号支付接口
2016/08/04 PHP
Laravel中encrypt和decrypt的实现方法
2017/09/24 PHP
PHP反射原理与用法深入分析
2019/09/28 PHP
可缩放Reloaded-一个针对可缩放元素的复用组件
2007/03/10 Javascript
javascritp实现input输入框相关限制用法
2007/06/29 Javascript
改善你的jQuery的25个步骤 千倍级效率提升
2010/02/11 Javascript
JavaScript起点(严格模式深度了解)
2013/01/28 Javascript
JS动态调用方法名示例介绍
2013/12/18 Javascript
jQuery对象的length属性用法实例
2014/12/27 Javascript
js实现鼠标划过给div加透明度的方法
2015/05/25 Javascript
浅述节点的创建及常见功能的实现
2016/12/15 Javascript
基于React实现表单数据的添加和删除详解
2017/03/14 Javascript
jQuery插件HighCharts绘制简单2D折线图效果示例【附demo源码】
2017/03/21 jQuery
element 结合vue 在表单验证时有值却提示错误的解决办法
2018/01/22 Javascript
vue多层嵌套路由实例分析
2019/03/19 Javascript
Python实现SVN的目录周期性备份实例
2015/07/17 Python
Python如何实现MySQL实例初始化详解
2017/11/06 Python
Windows下的Jupyter Notebook 安装与自定义启动(图文详解)
2018/02/21 Python
将pandas.dataframe的数据写入到文件中的方法
2018/12/07 Python
python requests库爬取豆瓣电视剧数据并保存到本地详解
2019/08/10 Python
Django自定义模板过滤器和标签的实现方法
2019/08/21 Python
python实现文件批量编码转换及注意事项
2019/10/14 Python
python kafka 多线程消费者&amp;手动提交实例
2019/12/21 Python
kmart凯马特官网:美国最大的打折零售商和全球最大的批发商之一
2016/11/17 全球购物
世界最大的海报和艺术印刷商店:AllPosters.com
2017/02/01 全球购物
捷克领先的户外服装及配件市场零售商:ALPINE PRO
2018/01/09 全球购物
Intimissimi德国网上商店:意大利知名内衣品牌
2018/04/03 全球购物
销售主管的自我评价分享
2014/01/03 职场文书
美丽乡村建设实施方案
2014/03/23 职场文书
诚信考试标语
2014/06/24 职场文书
企业党员岗位承诺书
2015/04/27 职场文书
冲出亚马逊观后感
2015/06/03 职场文书
商业计划书格式、范文
2019/03/21 职场文书
Python入门之基础语法详解
2021/05/11 Python
Python中requests做接口测试的方法
2021/05/30 Python
MySql 8.0及对应驱动包匹配的注意点说明
2021/06/23 MySQL