本程序根据文本文件DS.txt中的数据生成直方图。DS.txt的内容如下:
a,33
b,3
c,56
d,77
其中第一列为X轴坐标,第二列为数据。
<?php
############################################################
#***** Counters *****#
#***** Writed by Amy *****#
#***** Program at 2003年1月28日 *****#
############################################################
//提交图片文件信息头
Header("Content-type:image/png");
//宏定义,预先定义好打印文字的左边距ML的值为40
define("ML",40); //left margin
$imgh=200;
$imgw=800;
$all_input=array();
$value=array();
$label=array();
$every_line=array();
//$x_grad=31;
$file_name="DS.txt";
//读出计数器的值
$fp=fopen($file_name,"r");
$all_input=file($file_name);
fclose($fp);
$x_grad=count($all_input)-1;
//将数据转化成数组的格式输出
for($i=0;$i<=$x_grad;$i++)
{
$every_line=explode(",",$all_input[$i]);
$label[$i]=$every_line[0];
//$value[$i]=$every_line[1];
$value[$i]=substr ( $every_line[1], 0, strlen($every_line[1])-2);
}
//找出最大的访问量
$max=intval($value[0]);
$str=$value[0];
for($i=1;$i<=$x_grad;$i++)
{
$str.=",$value[$i]";
if($max<=intval($value[$i]))
$max=intval($value[$i]);
}
//$fp=fopen($file_name,"w");
//fputs($fp,$str);
//fclose($fp);
//创建图形
$img=ImageCreate($imgw+1,$imgh*2+1);
//分配颜色
$white=ImageColorAllocate($img,255,255,255);
$black=ImageColorAllocate($img,0,0,0);
$red=ImageColorAllocate($img,255,0,0);
$grey=ImageColorAllocate($img,99,99,99);
$blue=ImageColorAllocate($img,0,0,255);
$textcolor3=ImageColorAllocate($img,100,10,50);
$green=ImageColorAllocate($img,0,150,55);
//画表头
ImageString($img,5,ML*5,ML-30,"Chart",$red);
//画边框
ImageRectangle($img,0,0,$imgw,$imgh*1.4,$black);
//画横坐标
ImageLine ( $img, ML, $imgh, $imgw-ML, $imgh, $black);
ImageString($img,3,$imgw-ML,$imgh+30,"TX",$blue);
//画纵坐标
ImageLine ( $img, ML, ML, ML, $imgh, $black);
ImageString($img,3,ML-10,ML-30,"TY",$blue);
//画纵坐标刻度
$max=intval($max/10)*10+10;
for($i=1;$i<=$max/10;$i++)
{
$y=$imgh-$i*($imgh-ML)/$max*10;
ImageLine ( $img, ML,$y, $imgw-ML, $y, $black);
ImageString($img,3,ML-25,$y-7,$i*10,$black);
}
//按比例输出直方图
$sum=0;
for($i=0;$i<=$x_grad;$i++)
{
$x=ML*1.5+$i*28;
$y=$imgh-$value[$i]*(($imgh-ML)/$max);
ImageFilledRectangle($img,$x,$y,$x+6,$imgh,$green);
ImageString($img,3,$x-5,$imgh+6,$label[$i],$black);
ImageString($img,2,$x-1,$y-12,$value[$i],$green);
$sum+=$value[$i];
}
//添加说明文字
ImageString($img,3,10,$imgh+30,"Total:$sum",$blue);
//生成图像,清除内存
ImagePNG($img);
ImageDestroy($img);
?>