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 相关文章推荐
VML绘图板②脚本--VMLgraph.js、XMLtool.js
Oct 09 PHP
php 各种应用乱码问题的解决方法
May 09 PHP
PHP关联数组的10个操作技巧
Jan 21 PHP
PHP多个文件上传到服务器实例
Oct 29 PHP
PHP中is_dir()函数使用指南
May 08 PHP
php使用gd2绘制基本图形示例(直线、圆、正方形)
Feb 15 PHP
win7 wamp 64位 php环境开启curl服务遇到的问题及解决方法
Sep 16 PHP
PHP面向对象程序设计继承用法简单示例
Dec 28 PHP
PHP字符串中抽取子串操作实例分析
Jun 22 PHP
laravel 实现设置时区的简单方法
Oct 10 PHP
php 使用 __call实现重载功能示例
Nov 18 PHP
PHP设计模式之数据访问对象模式(DAO)原理与用法实例分析
Dec 12 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
Laravel 5框架学习之向视图传送数据(进阶篇)
2015/04/08 PHP
Laravel 5 框架入门(三)
2015/04/09 PHP
深入解析WordPress中加载模板的get_template_part函数
2016/01/11 PHP
JavaScript设置FieldSet展开与收缩
2009/05/15 Javascript
jQuery 绑定事件到动态创建的元素上的方法实例
2013/08/18 Javascript
js格式化金额可选是否带千分位以及保留精度
2014/01/28 Javascript
11种ASP连接数据库的方法
2015/09/18 Javascript
jQuery内容过滤选择器用法示例
2016/09/09 Javascript
jQuery+ajax实现局部刷新的两种方法
2017/06/08 jQuery
详解webpack的配置文件entry与output
2017/08/21 Javascript
JavaScript中错误正确处理方式小结你用对了吗
2017/10/10 Javascript
vue axios 二次封装的示例代码
2017/12/08 Javascript
vue2.0页面前进刷新回退不刷新的实现方法
2018/07/31 Javascript
Nuxt.js实现校验访问浏览器类型的中间件
2018/08/24 Javascript
layui监听select变化,以及设置radio选中的方法
2019/09/24 Javascript
javascript实现简单打字游戏
2019/10/29 Javascript
python使用正则表达式检测密码强度源码分享
2014/06/11 Python
Python创建日历实例
2014/08/21 Python
Python序列之list和tuple常用方法以及注意事项
2015/01/09 Python
讲解Python中的递归函数
2015/04/27 Python
python如何将图片转换为字符图片
2020/08/19 Python
python:pandas合并csv文件的方法(图书数据集成)
2018/04/12 Python
PyQt5中多线程模块QThread使用方法的实现
2020/01/31 Python
Python类中self参数用法详解
2020/02/13 Python
pandas to_excel 添加颜色操作
2020/07/14 Python
Python模块常用四种安装方式
2020/10/20 Python
pycharm进入时每次都是insert模式的解决方式
2021/02/05 Python
CSS3区域模块region相关编写示例
2015/08/28 HTML / CSS
关于HTML5的安全问题开发人员需要牢记的
2012/06/21 HTML / CSS
耐克奥地利官网:Nike奥地利
2019/08/16 全球购物
英国DIY和家居装饰领域的主要品牌:Wickes
2019/11/26 全球购物
求职自荐信范文格式
2013/11/29 职场文书
2014年安全生产工作总结
2014/11/13 职场文书
2015年小学生暑假总结
2015/07/13 职场文书
如何使用PostgreSQL进行中文全文检索
2021/05/27 PostgreSQL
为什么MySQL 删除表数据 磁盘空间还一直被占用
2021/10/16 MySQL