图类,可显示多种图形
<?//图类
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(){ 
//建立画布大小  
$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;
case "4":  
$this->imageCircle();  
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;  
}  
}
  

解决方案 »

  1.   


    //--------------折线图  
    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;  
    }  
    }  
    //--------------饼状图
    function imageCircle(){
    $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]);
    $total += $item_array[$i];

    $yy=$this->Y-$this->BORDER*2;  

    //画饼状图的阴影部分  
    $e=0;
    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);  
    }
    $s=$e;
    $leight=$item_array[$i]/$total*360;
    $e=$s+$leight;
    $color=ImageColorAllocate($this->IMAGE,$R,$G,$B);
    $colorarray[$i]=$color;  
    //画圆  
    for ($j = 90; $j > 70; $j--) imagefilledarc($this->IMAGE, 110, $j, 200, 100, $s, $e, $color, IMG_ARC_PIE);  
    //imagefilledarc($this->IMAGE, 110, 70, 200, 100, $s, $e, $color, IMG_ARC_PIE);  
    //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;  
    }

    //画饼状图的表面部分
    $e=0;
    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);  
    }
    $s=$e;
    $leight=$item_array[$i]/$total*360;
    $e=$s+$leight;
    //$color=$colorarray[$i];
    $color=ImageColorAllocate($this->IMAGE,$R,$G,$B);  
    //画圆  
    //for ($j = 90; $j > 70; $j--) imagefilledarc($this->IMAGE, 110, $j, 200, 100, $s, $e, $color, IMG_ARC_PIE);  
    imagefilledarc($this->IMAGE, 110, 70, 200, 100, $s, $e, $color, IMG_ARC_PIE);  
    }  
    }  
    //--------------完成打印图形  
    function printAll(){  
    ImagePNG($this->IMAGE);
    ImageDestroy($this->IMAGE);  
    }  
    //--------------调试  
    function debug(){  
    echo "X:".$this->X."<br/>Y:".$this->Y;  
    echo "<br/>BORDER:".$this->BORDER;  
    $item_array=split($this->ARRAYSPLIT,$this->ITEMARRAY);  
    $num=Count($item_array);  
    echo "<br/>数值个数:".$num."<br/>数值:";  
    for ($i=0;$i<$num;$i++){ 
    echo "<br/>".$item_array[$i];  
    }  
    }  
    }  
    //$report->debug();//调式之用Header( "Content-type:image/png");
    $report=new ImageReport;
    $report->setImage(600,300,255,255,255,1);//参数(长,宽,背影色R,G,B,是否透明1或0)  
    $temparray="100,260,400,320,260,120";//数值,用指定符号隔开  
    $report->setItem(',',$temparray,4,20);//参数(分隔数值的指定符号,数值变量,样式1为竖柱图2为横柱图3为折线图4为饼图,距离)  
    $report->setFont(1);//字体大小1-10  
    $report->PrintReport();
    ?>
      

  2.   

    给你一个调试通过的画图类:<? 
    // load gd library
    if (!extension_loaded('gd')) {
        if (!dl('php_gd2.dll')) {
         echo "cannot load the gd_extensions! please contact the manager"
            exit;
        }
    }Class DrawImageReportClass{ 
    var $mPath="D:\\www.in2english.com\\webroot\\";
    //var $mName="test.png";
    var $mShow="/";
    var $mX;
    var $mY;
    var $mXGradCnt; // graduation of x-axis
    var $mYGradCnt; // graduation of y-axis

    var $mXZero;
    var $mYZero;

    var $mTotalY;//X-axis
    var $mTotalX;//Y-axis 
    var $mGradX;
    var $mGradY;
    var $mGWidth = 5; // width for graduation 

    var $mBackground; // background color
    var $mR;//R for background 
    var $mG;//G for background
    var $mB;//B for background

    var $mTransparent;// 1 or 0 
    var $mImage; // handle of image  
    //------------------- 
    var $mXRecords; // value of x axis
    var $mYRecords; // value of y axis
    var $mRs;      // value of records
    var $mColors; // color for each group
    var $mType; //Image Report Type 1-horizontal column  2-vertical column(not realize)  3-line 
    var $mBorder;

    //------------------- 
    var $mFontSize;// font size 
    var $mFontColor;// font color 
    var $mCase;
    //--------set parameters for image
    function DrawImageReportClass()
    {
    }
    function SetImage($x,$y,$r,$g,$b,$tran){ 
    $this->mX=$x;
    $this->mY=$y;  
    $this->mR=$r;  
    $this->mG=$g;  
    $this->mB=$b;  
    $this->mTransparent=$tran;
    } function SetFont($size,$color){  
    $this->mFontSize=$size;
    $this->mFontColor=$color;  
    }  function SetRecords($rs,$rsx,$rsy,$case,$colors,$path,$name="test.png",$rt=1,$border=4){  
    $this->mXRecords = $rsx;
    $this->mYRecords = $rsy; 
    $this->mRs=$rs; 
    $this->mType=$rt;
    $this->mBorder=$border; 
    $this->mColors = $colors;
    $this->mXGradCnt = count($rsx);
    $this->mYGradCnt = count($rsy);
    $this->mCase=$case;
    $this->mName=$name;
    $this->imPath=$path;


    function DrawReport(){  
    header( "Content-type: image/png");  

    //create image 
    $this->mImage=@imagecreate($this->mX, $this->mY)
        or die ("Cannot Initialize new GD image stream");

    //set backcolor
    $this->mBackground=imagecolorallocate($this->mImage,$this->mR,$this->mG,$this->mB);  

    // if you want to set it transparent
    if("1"==$this->mTransparent){  
    imagecolortransparent($this->mImage,$this->mBackground);  
    }else{  
    imagefilledrectangle($this->mImage,0,0,$this->mX,$this->mY,$this->mBackground);  
    }

    $this->mFontColor=imagecolorallocate($this->mImage,hexdec(substr($this->mFontColor,0,2)),hexdec(substr($this->mFontColor,2,2)),hexdec(substr($this->mFontColor,4,2)));
    $this->PrintXY();  

    Switch ($this->mType){  
    case "1":
    $this->DrawVerticalColumn(); 
    break;  
    case "2":  
    $this->DrawLine();  
    break;  
    default:
    break;
    }  
    $this->PrintAll(); 
    }

    //-----------Draw XY axis  
    function PrintXY(){
    // color for axis
    $color=imagecolorallocate($this->mImage,255-$this->mR,255-$this->mG,255-$this->mB);  

    $this->mXZero = $this->mBorder + $this->mFontSize + 10;
    $this->mYZero = $this->mY - $this->mBorder - $this->mFontSize - 10;

    // draw x,y axis
    imageline($this->mImage,$this->mXZero,$this->mYZero,$this->mX-$this->mBorder,$this->mYZero,$color);//X-axis 
    //draw arrow
    imageline($this->mImage,$this->mX-$this->mBorder,$this->mYZero,$this->mX-$this->mBorder-5,$this->mYZero-3,$color);//X-axis 
    imageline($this->mImage,$this->mX-$this->mBorder,$this->mYZero,$this->mX-$this->mBorder-5,$this->mYZero+3,$color);//X-axis 

    imageline($this->mImage,$this->mXZero,$this->mYZero,$this->mXZero,$this->mBorder,$color);//y-axis
    //draw arrow
    imageline($this->mImage,$this->mXZero,$this->mBorder,$this->mXZero-3,$this->mBorder+5,$color);//y-axis
    imageline($this->mImage,$this->mXZero,$this->mBorder,$this->mXZero+3,$this->mBorder+5,$color);//y-axis

    // total length of Y - axis
    $this->mTotalY = $this->mY - $this->mBorder*2 - $this->mFontSize - 10 - 78;// 8px is for arrow
    $this->mTotalX = $this->mX - $this->mBorder*2 - $this->mFontSize - 10 - 78;
    //
    $this->mGradX = intval($this->mTotalX / $this->mXGradCnt);
    $this->mGradY = intval($this->mTotalY / $this->mYGradCnt);

    //draw gradutions
    for($i=1;$i <= $this->mYGradCnt;$i++)
    {
    // for Y
    imageline($this->mImage,$this->mXZero,$this->mYZero - $this->mGradY*$i,$this->mXZero+$this->mGWidth,$this->mYZero - $this->mGradY*$i,$color); 
    imagestring($this->mImage,$this->mFontSize,$this->mXZero-20,$this->mYZero - $this->mGradY*$i,$this->mYRecords[$i-1],$this->mFontColor);  
    }
    for($i=1;$i <= $this->mXGradCnt;$i++)
    {
    // for X
    imageline($this->mImage,$this->mXZero + $this->mGradX*$i,$this->mYZero,$this->mXZero + $this->mGradX*$i ,$this->mYZero-$this->mGWidth,$color); 
    imagestring($this->mImage,$this->mFontSize,$this->mXZero + $this->mGradX*$i,$this->mYZero+5,$this->mXRecords[$i-1],$this->mFontColor);  
    }
    }  
      

  3.   


    //--------------
    function DrawVerticalColumn(){
    //$colorcase=imagecolorallocate($this->mImage,250,0,0);
    //imagerectangle($this->mImage,$this->mX-10,0,$this->mX-70,60,$colorcase);
    $num_for_single_grad = count($this->mRs[0]);
    $value_grad = $this->mYRecords[0];
    $single_width = intval($this->mGradX / $num_for_single_grad);
    if($single_width>40){//为了避免太宽,而不好看,所以把每条柱的最宽限为40
    $single_width=40;
    }

    for($i=0;$i < $this->mXGradCnt; $i ++ ) // the first loop for group
    {
    for($j=0; $j < $num_for_single_grad;$j++ ) // the second loop for values in one group
    {
    if(is_numeric ($this->mRs[$i][$j])){
    $value = $this->mRs[$i][$j] / $value_grad ;
    if($value > $this->mYGradCnt) 
    {
    $height = $this->mTotalY + 8;
    }
    else
    {
    $height = $this->mGradY * $value;
    }
    $color=imagecolorallocate($this->mImage,hexdec(substr($this->mColors[$j],0,2)),hexdec(substr($this->mColors[$j],2,2)),hexdec(substr($this->mColors[$j],4,2)));//颜色的组合
    //$color=imagecolorallocate($this->mImage,substr($this->mColors[$i],0,2),substr($this->mColor[$i],2,2),substr($this->mColor[$i],4,2));
    //$yy=20+$i*10;
    imagefilledrectangle ($this->mImage,intval($this->mXZero + $this->mGradX * $i+$single_width*$j + $j*2),intval($this->mYZero - $height),intval($this->mXZero + $this->mGradX*$i+$single_width*($j+1)),intval($this->mYZero),$color);
    //imagefilledrectangle ($this->mImage,intval($this->mXZero + $this->mGradX * $i+$single_width*$j + $j*2),intval($this->mYZero - $height),intval($this->mXZero + $this->mGradX*$i+$single_width*$j+$width_single_grade),intval($this->mYZero),$color);
    imagestring($this->mImage,$this->mFontSize,intval($this->mX-70),intval(10+($j)*30),$this->mCase[$j],$this->mFontColor); 
    imagefilledrectangle($this->mImage,intval($this->mX-60+10),intval(10+$j*30),intval($this->mX-60+40),intval(20+$j*30),$color);
    }

    else{
    $height = 0;
    for($k=0;$k<$this->mYGradCnt;$k++)
    if($this->mRs[$i][$j] == $this->mYRecords[$k])
    {
    $height=$this->mGradY*$k+$this->mGradY;
    break;
    }
    else
    {
    $height = $this->mTotalY + 8;
    }
    //imagestring($this->mImage,$this->mFontSize,intval($this->mX-200-30*$i),intval(10+($j)*30),$height,$this->mFontColor); 

    $color=imagecolorallocate($this->mImage,hexdec(substr($this->mColors[$j],0,2)),hexdec(substr($this->mColors[$j],2,2)),hexdec(substr($this->mColors[$j],4,2)));//颜色的组合
    //$color=imagecolorallocate($this->mImage,substr($this->mColors[$i],0,2),substr($this->mColor[$i],2,2),substr($this->mColor[$i],4,2));
    //$yy=20+$i*10;
    imagefilledrectangle ($this->mImage,intval($this->mXZero + $this->mGradX * $i+$single_width*$j + 10),intval($this->mYZero - $height),intval($this->mXZero + $this->mGradX*$i+$single_width*($j+1)+10),intval($this->mYZero),$color);
    //imagestring($this->mImage,$this->mFontSize,intval($this->mX-200-30*$i),intval(10+($j)*30),$this->mRs[$i][$j] == $this->mYRecords[$k],$this->mFontColor); 

    imagestring($this->mImage,$this->mFontSize,intval($this->mX-80),intval(10+($j)*30),$this->mCase[$j],$this->mFontColor); 
    imagefilledrectangle($this->mImage,intval($this->mX-40+10),intval(10+$j*30),intval($this->mX-40+40),intval(20+$j*30),$color);
    }
    }
    }


    //--------------  
    function DrawLine(){  
    $num_for_single_grad = count($this->mRs[0]);
    $value_grad = $this->mYRecords[0];
    $single_width = intval($this->mGradX / $num_for_single_grad);
    for($j=0; $j < $num_for_single_grad;$j++ )// the first loop for group
    {
     for($i=0;$i < $this->mXGradCnt-1; $i ++ ) // the second loop for values in one group
    { if(is_numeric ($this->mRs[$i][$j])){
    $valuenow = $this->mRs[$i][$j] / $value_grad ;
    if($valuenow > $this->mYGradCnt) 
    {
    $heightnow = $this->mTotalY + 8;
    }
    else
    {
    $heightnow = $this->mGradY * $valuenow;
    }

    $valuenext = $this->mRs[$i+1][$j] / $value_grad ;
    if($valuenext > $this->mYGradCnt) 
    {
    $heightnext = $this->mTotalY + 8;
    }
    else
    {
    $heightnext = $this->mGradY * $valuenext;
    }
    if($i== $this->mXGradCnt-1)
    {
    $heightnext=$heightnow;
    }
    $color=imagecolorallocate($this->mImage,hexdec(substr($this->mColors[$j],0,2)),hexdec(substr($this->mColors[$j],2,2)),hexdec(substr($this->mColors[$j],4,2)));//颜色的组合
    imageline($this->mImage,intval($this->mXZero+$this->mGradX*($i+1)),intval($this->mYZero - $heightnow),intval($this->mXZero+$this->mGradX*($i+2)),intval($this->mYZero - $heightnext),$color);

    }
    else{
    for($k=0;$k<$this->mYGradCnt;$k++)
    if($this->mRs[$i][$j] ==$this->mYRecords[$k])
    {
    $heightnow=$this->mGradY*$k+$this->mGradY;
    break;
    }
    else{
    $heightnow = $this->mTotalY + 8;
    }

    for($k=0;$k<$this->mYGradCnt;$k++)
    if($this->mRs[$i+1][$j] ==$this->mYRecords[$k])
    {
    $heightnext=$this->mGradY*$k+$this->mGradY;
    break;
    }
    else{
    $heightnext = $this->mTotalY + 8;
    }

    if($i== $this->mXGradCnt-1)
    {
    $heightnext=$heightnow;
    }
    $color=imagecolorallocate($this->mImage,hexdec(substr($this->mColors[$j],0,2)),hexdec(substr($this->mColors[$j],2,2)),hexdec(substr($this->mColors[$j],4,2)));//颜色的组合
    imageline($this->mImage,intval($this->mXZero+$this->mGradX*($i+1)),intval($this->mYZero - $heightnow),intval($this->mXZero+$this->mGradX*($i+2)),intval($this->mYZero - $heightnext),$color);

    }
    }
    imagestring($this->mImage,$this->mFontSize,intval($this->mX-70),intval(10+($j)*30),$this->mCase[$j],$this->mFontColor); 
    imagefilledrectangle($this->mImage,intval($this->mX-60),intval(10+$j*30),intval($this->mX-60+40),intval(12+$j*30),$color);
    }


    }  

    //-------------- 
    function printAll(){  
    imagepng($this->mImage,$this->mPath.$this->imPath.$this->mName);  
    imagedestroy($this->mImage);  
    }  

    //--------------调试 
     
    function debug(){  
    echo "X:".$this->mX."<br>Y:".$this->mY;  
    echo "<br>BORDER:".$this->mBorder;  
    echo "<br>";  
    print_r($this->mRs);
    echo "<br>";  
    echo "<br>";  
    print_r($this->mYRecords);
    echo "<br>";  
    echo "<br>";  
    print_r($this->mXRecords);

    }  

    $report->SetImage(600,400,255,255,255,0);//参数(长,宽,背影色R,G,B,是否透明1或0)  
    //function SetFont($size,$color)
    $report->SetFont(1);//字体大小1-10  

    $rs= array(0=> array(200,100),1=> array(300,100),2=> array(300,200));//数值,用指定符号隔开  
    //$case1 =array("a","b","c");
    $case = array("My","Your");
    $rsx= array(1,2,3);
    $rsy= array(100,200,300,400,500);

    $colors = array("FF0000","FFFF00");

    //function SetRecords($rsx,$rsy,$colors,$rt=1,$border=4)
    $report->SetRecords($rs,$rsx,$rsy,$case,$colors,1,20);
    //参数(分隔数值的指定符号,数值变量,样式1为竖柱图2为横柱图3为折线图,距离)  
    $report->DrawReport();
    //$report->debug();//调式之用  
    */
    ?> 
      

  4.   

    刚才上面第二段少了一个注释符,改成下面的,注释中间的为调试之后,如果去掉注释符,应该 可以直接画出一个折线图,如果画直方图的话就用1
    function DrawVerticalColumn(){
    //$colorcase=imagecolorallocate($this->mImage,250,0,0);
    //imagerectangle($this->mImage,$this->mX-10,0,$this->mX-70,60,$colorcase);
    $num_for_single_grad = count($this->mRs[0]);
    $value_grad = $this->mYRecords[0];
    $single_width = intval($this->mGradX / $num_for_single_grad);
    if($single_width>40){//为了避免太宽,而不好看,所以把每条柱的最宽限为40
    $single_width=40;
    }

    for($i=0;$i < $this->mXGradCnt; $i ++ ) // the first loop for group
    {
    for($j=0; $j < $num_for_single_grad;$j++ ) // the second loop for values in one group
    {
    if(is_numeric ($this->mRs[$i][$j])){
    $value = $this->mRs[$i][$j] / $value_grad ;
    if($value > $this->mYGradCnt) 
    {
    $height = $this->mTotalY + 8;
    }
    else
    {
    $height = $this->mGradY * $value;
    }
    $color=imagecolorallocate($this->mImage,hexdec(substr($this->mColors[$j],0,2)),hexdec(substr($this->mColors[$j],2,2)),hexdec(substr($this->mColors[$j],4,2)));//颜色的组合
    //$color=imagecolorallocate($this->mImage,substr($this->mColors[$i],0,2),substr($this->mColor[$i],2,2),substr($this->mColor[$i],4,2));
    //$yy=20+$i*10;
    imagefilledrectangle ($this->mImage,intval($this->mXZero + $this->mGradX * $i+$single_width*$j + $j*2),intval($this->mYZero - $height),intval($this->mXZero + $this->mGradX*$i+$single_width*($j+1)),intval($this->mYZero),$color);
    //imagefilledrectangle ($this->mImage,intval($this->mXZero + $this->mGradX * $i+$single_width*$j + $j*2),intval($this->mYZero - $height),intval($this->mXZero + $this->mGradX*$i+$single_width*$j+$width_single_grade),intval($this->mYZero),$color);
    imagestring($this->mImage,$this->mFontSize,intval($this->mX-70),intval(10+($j)*30),$this->mCase[$j],$this->mFontColor); 
    imagefilledrectangle($this->mImage,intval($this->mX-60+10),intval(10+$j*30),intval($this->mX-60+40),intval(20+$j*30),$color);
    }

    else{
    $height = 0;
    for($k=0;$k<$this->mYGradCnt;$k++)
    if($this->mRs[$i][$j] == $this->mYRecords[$k])
    {
    $height=$this->mGradY*$k+$this->mGradY;
    break;
    }
    else
    {
    $height = $this->mTotalY + 8;
    }
    //imagestring($this->mImage,$this->mFontSize,intval($this->mX-200-30*$i),intval(10+($j)*30),$height,$this->mFontColor); 

    $color=imagecolorallocate($this->mImage,hexdec(substr($this->mColors[$j],0,2)),hexdec(substr($this->mColors[$j],2,2)),hexdec(substr($this->mColors[$j],4,2)));//颜色的组合
    //$color=imagecolorallocate($this->mImage,substr($this->mColors[$i],0,2),substr($this->mColor[$i],2,2),substr($this->mColor[$i],4,2));
    //$yy=20+$i*10;
    imagefilledrectangle ($this->mImage,intval($this->mXZero + $this->mGradX * $i+$single_width*$j + 10),intval($this->mYZero - $height),intval($this->mXZero + $this->mGradX*$i+$single_width*($j+1)+10),intval($this->mYZero),$color);
    //imagestring($this->mImage,$this->mFontSize,intval($this->mX-200-30*$i),intval(10+($j)*30),$this->mRs[$i][$j] == $this->mYRecords[$k],$this->mFontColor); 

    imagestring($this->mImage,$this->mFontSize,intval($this->mX-80),intval(10+($j)*30),$this->mCase[$j],$this->mFontColor); 
    imagefilledrectangle($this->mImage,intval($this->mX-40+10),intval(10+$j*30),intval($this->mX-40+40),intval(20+$j*30),$color);
    }
    }
    }


    //--------------  
    function DrawLine(){  
    $num_for_single_grad = count($this->mRs[0]);
    $value_grad = $this->mYRecords[0];
    $single_width = intval($this->mGradX / $num_for_single_grad);
    for($j=0; $j < $num_for_single_grad;$j++ )// the first loop for group
    {
     for($i=0;$i < $this->mXGradCnt-1; $i ++ ) // the second loop for values in one group
    { if(is_numeric ($this->mRs[$i][$j])){
    $valuenow = $this->mRs[$i][$j] / $value_grad ;
    if($valuenow > $this->mYGradCnt) 
    {
    $heightnow = $this->mTotalY + 8;
    }
    else
    {
    $heightnow = $this->mGradY * $valuenow;
    }

    $valuenext = $this->mRs[$i+1][$j] / $value_grad ;
    if($valuenext > $this->mYGradCnt) 
    {
    $heightnext = $this->mTotalY + 8;
    }
    else
    {
    $heightnext = $this->mGradY * $valuenext;
    }
    if($i== $this->mXGradCnt-1)
    {
    $heightnext=$heightnow;
    }
    $color=imagecolorallocate($this->mImage,hexdec(substr($this->mColors[$j],0,2)),hexdec(substr($this->mColors[$j],2,2)),hexdec(substr($this->mColors[$j],4,2)));//颜色的组合
    imageline($this->mImage,intval($this->mXZero+$this->mGradX*($i+1)),intval($this->mYZero - $heightnow),intval($this->mXZero+$this->mGradX*($i+2)),intval($this->mYZero - $heightnext),$color);

    }
    else{
    for($k=0;$k<$this->mYGradCnt;$k++)
    if($this->mRs[$i][$j] ==$this->mYRecords[$k])
    {
    $heightnow=$this->mGradY*$k+$this->mGradY;
    break;
    }
    else{
    $heightnow = $this->mTotalY + 8;
    }

    for($k=0;$k<$this->mYGradCnt;$k++)
    if($this->mRs[$i+1][$j] ==$this->mYRecords[$k])
    {
    $heightnext=$this->mGradY*$k+$this->mGradY;
    break;
    }
    else{
    $heightnext = $this->mTotalY + 8;
    }

    if($i== $this->mXGradCnt-1)
    {
    $heightnext=$heightnow;
    }
    $color=imagecolorallocate($this->mImage,hexdec(substr($this->mColors[$j],0,2)),hexdec(substr($this->mColors[$j],2,2)),hexdec(substr($this->mColors[$j],4,2)));//颜色的组合
    imageline($this->mImage,intval($this->mXZero+$this->mGradX*($i+1)),intval($this->mYZero - $heightnow),intval($this->mXZero+$this->mGradX*($i+2)),intval($this->mYZero - $heightnext),$color);

    }
    }
    imagestring($this->mImage,$this->mFontSize,intval($this->mX-70),intval(10+($j)*30),$this->mCase[$j],$this->mFontColor); 
    imagefilledrectangle($this->mImage,intval($this->mX-60),intval(10+$j*30),intval($this->mX-60+40),intval(12+$j*30),$color);
    }


    }  

    //-------------- 
    function printAll(){  
    imagepng($this->mImage,$this->mPath.$this->imPath.$this->mName);  
    imagedestroy($this->mImage);  
    }  

    //--------------调试 
     
    function debug(){  
    echo "X:".$this->mX."<br>Y:".$this->mY;  
    echo "<br>BORDER:".$this->mBorder;  
    echo "<br>";  
    print_r($this->mRs);
    echo "<br>";  
    echo "<br>";  
    print_r($this->mYRecords);
    echo "<br>";  
    echo "<br>";  
    print_r($this->mXRecords);

    }  

    /*
    $report=new DrawImageReportClass;  

    //function SetImage($x,$y,$r,$g,$b,$tran)
    $report->SetImage(600,400,255,255,255,0);//参数(长,宽,背影色R,G,B,是否透明1或0)  
    //function SetFont($size,$color)
    $report->SetFont(1);//字体大小1-10  

    $rs= array(0=> array(200,100),1=> array(300,100),2=> array(300,200));//数值,用指定符号隔开  
    //$case1 =array("a","b","c");
    $case = array("My","Your");
    $rsx= array(1,2,3);
    $rsy= array(100,200,300,400,500);

    $colors = array("FF0000","FFFF00");

    //function SetRecords($rsx,$rsy,$colors,$rt=1,$border=4)
    $report->SetRecords($rs,$rsx,$rsy,$case,$colors,2,20);
    //参数(分隔数值的指定符号,数值变量,样式1为竖柱图2为折线图,距离)  
    $report->DrawReport();
    //$report->debug();//调式之用  
    */
    ?>