一个画柱壮图和折线图的类,大家给提点意见!
<? //画柱状图或者折线图的类 class pic { var $length;//定义图片的长和宽 var $width;//定义图片的长和宽 var $X;//X轴分几段 var $Y;//Y轴分几段 var $XValue =array();//每个X轴单位所代表的值,并用数组进行定义 var $YValue;//每个Y轴单位所代表的值 //var $angle = 0;//X轴数据显示的角度 var $YY = array(); //var $type;//0表示柱状曲线;1表示折线曲线
function creat($type) { if($type==0) { $Im = Imagecreate($this->width+35,$this->length+31); //设定颜色开始 $bgcolor = ImageColorAllocate($Im,255,255,255); $White = ImageColorAllocate($Im,255,255,255); $Red = ImageColorAllocate($Im,255,0,0); $Black = ImageColorAllocate($Im,0,0,0); $colorGrey = ImageColorAllocate($Im,220, 220, 220); $colorDarkBlue=Imagecolorallocate($Im, 104, 157, 228); $colorLightBlue=Imagecolorallocate($Im, 184, 212, 250); //设定颜色结束 //背景表格绘制开始 $RectangleCellX=$this->width/$this->X; $RectangleCellY=$this->length/$this->Y; for($i=0;$i<$this->X+1;$i++) { $Xi1=$i*$RectangleCellX+30; $Yi1=0; $Xi2=($i+1)*$RectangleCellX+30; $Yi2=$this->length; Imagestring($Im,2,$i*$RectangleCellX+30+0.3*$RectangleCellX, $this->length+5,$this->XValue[$i], $Black); } for($j=0;$j<$this->Y;$j++) { $Xi1=30; $Yi1=$j*$RectangleCellY; $Xi2=$this->width+30; $Yi2=($j+1)*$RectangleCellY; ImageRectangle($Im,$Xi1,$Yi1,$Xi2,$Yi2,$colorGrey); Imagestring($Im,2, 5, $this->length-$j*$RectangleCellY-8, $this->YValue*$j, $Black); } //背景表格绘制完成 //绘制柱形图开始 for($i=0;$i<$this->X;$i++) { $Xi11=30+$i*$RectangleCellX; $Yi11=$this->length-$this->YY[$i]/$this->YValue*$this->length/$this->Y; $Xi22=30+($i+1)*$RectangleCellX; $Yi22=$this->length;
$Xi111=30+3*$RectangleCellX/4+$i*$RectangleCellX; $Yi111=$this->length-$this->YY[$i]/$this->YValue*$this->length/$this->Y; $Xi222=30+($i+1)*$RectangleCellX; $Yi222=$this->length;
Imagefilledrectangle($Im,$Xi11,$Yi11,$Xi22,$Yi22,$colorLightBlue); Imagefilledrectangle($Im,$Xi111,$Yi111,$Xi222,$Yi222,$colorDarkBlue); unset($Xi11,$Yi11,$Xi22,$Yi22); } //绘制柱形图结束 ImageRectangle($Im,30,0,$this->width+30,$this->length,$Black); } else { $Im = Imagecreate($this->width+31,$this->length+31); //设定颜色开始 $bgcolor = ImageColorAllocate($Im,255,255,255); $White = ImageColorAllocate($Im,255,255,255); $Red = ImageColorAllocate($Im,255,0,0); $Black = ImageColorAllocate($Im,0,0,0); $colorGrey = ImageColorAllocate($Im,220, 220, 220); $colorDarkBlue=Imagecolorallocate($Im, 104, 157, 228); $colorLightBlue=Imagecolorallocate($Im, 184, 212, 250); //设定颜色结束 //背景表格绘制开始 $RectangleCellX=$this->width/$this->X; $RectangleCellY=$this->length/$this->Y; for($i=0;$i<$this->X;$i++) { $Xi1=$i*$RectangleCellX+30; $Yi1=0; $Xi2=($i+1)*$RectangleCellX+30; $Yi2=$this->length; ImageRectangle($Im,$Xi1,$Yi1,$Xi2,$Yi2,$colorGrey); Imagestring($Im,2,$i*$RectangleCellX+30+0.6*$RectangleCellX, $this->length+5,$this->XValue[$i], $Black);
} for($j=0;$j<$this->Y;$j++) { $Xi1=30; $Yi1=$j*$RectangleCellY; $Xi2=$this->width+30; $Yi2=($j+1)*$RectangleCellY; ImageRectangle($Im,$Xi1,$Yi1,$Xi2,$Yi2,$colorGrey); Imagestring($Im,2, 5, $this->length-$j*$RectangleCellY-8, $this->YValue*$j, $Black); } //背景表格绘制完成 //绘制折线开始 for($k=0;$k<=count($this->YY);$k++) { if($k!=count($this->YY)-1) { Imageline($Im,30+$RectangleCellX*($k+1),$this->length-$this->YY[$k]/$this->YValue*$this->length/$this->Y,30+$RectangleCellX*($k+2),$this->length-$this->YY[$k+1]/$this->YValue*$this->length/$this->Y,$colorDarkBlue); } if($k!=count($this->YY)) { Imagefilledrectangle($Im,30+$RectangleCellX*($k+1)-2,$this->length-$this->YY[$k]/$this->YValue*$this->length/$this->Y-2,30+$RectangleCellX*($k+1)+2,$this->length-$this->YY[$k]/$this->YValue*$this->length/$this->Y+2,$Red); } } //绘制折线结束 } ImageRectangle($Im,30,0,$this->width+30,$this->length,$Black); Imageline($Im,$this->width+30,0,$this->width+30,$this->length,$Red); ImagePNG($Im); ImageDestroy($Im); } }
//使用方法 /* $pic=new pic; $pic->length=150; $pic->width=200; $pic->X=5; $pic->XValue=array("5","6","7","8","9"); $pic->Y=10; $pic->YValue=1; $pic->YY=array(3,4,3,6,5,3,5,7,9,10); $pic->creat(1); */ ?>
|