亚洲av成人无遮挡网站在线观看,少妇性bbb搡bbb爽爽爽,亚洲av日韩精品久久久久久,兔费看少妇性l交大片免费,无码少妇一区二区三区

  免費(fèi)注冊 查看新帖 |

Chinaunix

  平臺 論壇 博客 文庫
最近訪問板塊 發(fā)新帖
查看: 2071 | 回復(fù): 0
打印 上一主題 下一主題

php實(shí)現(xiàn)報(bào)表類 [復(fù)制鏈接]

論壇徽章:
0
跳轉(zhuǎn)到指定樓層
1 [收藏(0)] [報(bào)告]
發(fā)表于 2008-09-28 17:32 |只看該作者 |倒序?yàn)g覽

原創(chuàng)內(nèi)容....實(shí)現(xiàn)曲線圖,餅圖,柱形圖.
轉(zhuǎn)貼請注明出處,
http://blog.csdn.net/liq330









原代碼如下:
?php
class ImageReport
{
   var $Image;//圖片對像
   var $ImageName;//報(bào)表名稱
   var $ImageType;//報(bào)表類型
   
   var $ImageWidth;//圖片寬
   var $ImageHeight;//圖片高
   
   var $BgImage;//背景圖片
   var $BgR;//背景顏色R值
   var $BgG;//背景顏色G值
   var $BgB;//背景顏色B值
   var $FontSize;//字體大小
   var $FontColor;//字體顏色
   var $ItemArray;//數(shù)據(jù)數(shù)組
   var $ItemInterval;//兩項(xiàng)間的間隔
   var $XName;//x軸的名稱
   var $YName;//y軸的名稱
   var $isScale;//是否顯示刻度值
   var $margin;//邊距
   //字體
   var $font = 'arial.ttf';
   
    function ImageReport()
    {
        return ;
    }
   //設(shè)置圖片基本信息
   function setImage($ImageName,$ImageType,$ImageWidth=500,$ImageHeight=400)
   {
        $this->ImageName =$ImageName;
     $this->ImageType =$ImageType;
     $this->ImageWidth =$ImageWidth;
     $this->ImageHeight=$ImageHeight;
   }
   
   //設(shè)置坐標(biāo)
   function setItem($ItemArray,$ItemInterval="20",$XName="",$YName="",$isScale=true)
   {
        $this->ItemArray =$ItemArray;
     $this->ItemInterval =$ItemInterval;
     $this->XName =$XName;
     $this->YName =$YName;
     $this->isScale =$isScale;
   }
   
   //設(shè)置圖片背景
   function setBg($BgR="235",$BgG="255",$BgB="255",$BgImage="")
   {
        $this->BgR =$BgR;
     $this->BgG =$BgG;
     $this->BgB =$BgG;
     $this->BgImage =$BgImage;
   }
   
   //設(shè)置字體
   function setFont($FontSize)
   {
     $this->FontSize =$FontSize;
     $this->margin =$FontSize*2+5;
     //$this->FontColor =$FontColor;
   }
   //畫主體
   function drawReport()
   {
     //建立畫布
     $this->Image=imagecreatetruecolor($this->ImageWidth,$this->ImageHeight);
     //填充背景色
     $background=ImageColorAllocate($this->Image,$this->BgR,$this->BgG,$this->BgB);
         
     //畫背景顏色
     ImageFilledRectangle($this->Image,0,0,$this->ImageWidth,$this->ImageHeight,$background);
     //畫背景圖片
     if(!empty($this->BgImage))
     {
        $this->drawLogo();
     }
      //跟距參數(shù),畫不同的圖片
     switch($this->ImageType)
     {
         case "1":
           $this->drawColumn();
           break;
         case "2":
           $this->drawCurve();
           break;
         case "3":
           $this->drawCircle();
           break;
         default:
             break;
     }
   }
   
   //畫柱狀圖
   function drawColumn()
   {
     //調(diào)用畫標(biāo)題
     $this->drawTitle();
     //調(diào)用畫坐標(biāo)
     $this->drawXY();
     //獲取數(shù)組的量
     $num=count($this->ItemArray);
     //獲取數(shù)組中的最大值
     //最大值
     $max=$this->getArrayMax($this->ItemArray);
   
     for($i=0;$icount($this->ItemArray);$i++)
     {
        //隨機(jī)顏色
        srand((double)microtime()*1000000);
        $R=Rand(50,200);
        $G=Rand(50,200);
        $B=Rand(50,200);
      
        $color=ImageColorAllocate($this->Image,$R,$G,$B);
        
        $yColor=ImageColorAllocate($this->Image,$R-10,$G-10,$B-10);
        //柱體高度
        
        $height=(($this->ImageHeight-$this->margin*2-$this->FontSize-5)*$this->ItemArray[$i]["value"])/$max;
        //畫柱體
        ImageFilledRectangle($this->Image,$this->margin+$this->ItemInterval*(2*$i+1),$this->ImageHeight-$height+$this->FontSize-5-$this->margin,$this->margin+$this->ItemInterval*(2*$i+2),$this->ImageHeight-$this->margin,$color);
        //畫柱體上的陰影
        imagefilledarc($this->Image, $this->margin+$this->ItemInterval*(2*$i+3/2), $this->ImageHeight-$height+$this->FontSize-5-$this->margin,$this->ItemInterval, $this->margin/2, 0, 360, $yColor, IMG_ARC_PIE);
        
        //寫柱體上面的數(shù)值
        imagestring($this->Image,$this->FontSize,$this->margin+$this->ItemInterval*(2*$i+1),$this->ImageHeight-$height+$this->FontSize-5-$this->margin-$this->FontSize-10,$this->ItemArray[$i]["value"],$color);
        //顏色
        $color=ImageColorAllocate($this->Image,255-$this->BgR,255-$this->BgG,255-$this->BgB);
   
        //寫柱體的鍵值
        imagettftext($this->Image,7,0,$this->margin+$this->ItemInterval*(2*$i+1)-3,$this->ImageHeight-$this->margin+$this->FontSize+2,$color,$this->font,$this->ItemArray[$i]["key"]);
   
     }
     //調(diào)用畫LOGO
    // $this->drawLogo();
   
   }
   //畫曲線圖
   function drawCurve()
   {
     //調(diào)用畫標(biāo)題
     $this->drawTitle();
     //調(diào)用畫坐標(biāo)
     $this->drawXY(true);
     
     //最大值
     $max=$this->getArrayMax($this->ItemArray);
     
     //顏色
     $color=ImageColorAllocate($this->Image,255-$this->BgR,255-$this->BgG,255-$this->BgB);
     //背景刻度的顏色
     $bgSColor=ImageColorAllocate($this->Image,$this->BgR-10,$this->BgG-10,$this->BgB-10);
     //線條顏色
     $linkColor=ImageColorAllocate($this->Image,51,51,153);
  
     //畫右X軸
     ImageLine($this->Image,$this->margin,$this->margin+$this->FontSize+5,$this->ImageWidth-$this->margin,$this->margin+$this->FontSize+5,$color);
     //畫右Y軸
     ImageLine($this->Image,$this->ImageWidth-$this->margin,$this->margin+$this->FontSize+5,$this->ImageWidth-$this->margin,$this->ImageHeight-$this->margin+2,$color);
     
     $tdCount=count($this->ItemArray);
     $tdWidth=($this->ImageWidth-$this->margin*2)/$tdCount;
     
   
     for($i=0;$i$tdCount-1;$i++)
    {
        //線條高度
        $startHeight=(($this->ImageHeight-$this->margin*2-$this->FontSize-5)*$this->ItemArray[$i]["value"])/$max;
        //結(jié)束線線條高度
        $endHeight =(($this->ImageHeight-$this->margin*2-$this->FontSize-5)*$this->ItemArray[$i+1]["value"])/$max;
        //畫背景X軸刻度
        ImageLine($this->Image,($i+1)*$tdWidth+$this->margin,$this->margin+$this->FontSize+6,($i+1)*$tdWidth+$this->margin,$this->ImageHeight-$this->margin,$bgSColor);
        //畫線條
        ImageLine($this->Image,$i*$tdWidth+$this->margin,$this->ImageHeight-$startHeight+$this->FontSize-5-$this->margin,($i+1)*$tdWidth+$this->margin,$this->ImageHeight-$endHeight+$this->FontSize-5-$this->margin,$linkColor);
     }
     //畫刻度的值
     for($i=0;$i$tdCount;$i++)
     {
        //顯示值
        //ImageString($this->Image,5,$i*$tdWidth+$this->margin,$this->ImageHeight-$this->margin+1,$this->ItemArray[$i]["key"],$color);
        //畫標(biāo)題的字
        imagettftext($this->Image,7,0,$i*$tdWidth+$this->margin,$this->ImageHeight-$this->margin+1+10,$color,$this->font,$this->ItemArray[$i]["key"]);
     }
   }
   //畫餅圖
   function drawCircle()
   {
      //一個(gè)扇區(qū)的角度
      $degree=0;
      //開始的角度
      $e=0;
      //用于保存顏色的數(shù)組
      $colorArray;
      //用于保存開始角度的數(shù)組
      $startDegree;
      //用于保存結(jié)束角度的數(shù)組
      $endDegree;
      
      //扇形的寬
      $width=($this->ImageWidth-$this->margin*2)-200;
         //獲取數(shù)組的量
      $num=count($this->ItemArray);
      //調(diào)用畫標(biāo)題
      $this->drawTitle();
      //各項(xiàng)之和
      $total=0;
      
      //計(jì)算各項(xiàng)之和
      for($i=0;$i$num;$i++)
      {
        $total+=$this->ItemArray[$i]["value"];
      }
      //保扇區(qū)的各項(xiàng)值保存到數(shù)組
      for($i=0;$icount($this->ItemArray);$i++)
      {
        //隨機(jī)顏色
        srand((double)microtime()*1000000);
        $R=Rand(50,200);
        $G=Rand(50,200);
        $B=Rand(50,200);

        //把顏色保存進(jìn)數(shù)組
        $colorArray[$i]["R"]=$R;
        $colorArray[$i]["G"]=$G;
        $colorArray[$i]["B"]=$B;
        
        //計(jì)算一個(gè)區(qū)塊的角度
        //echo $this->ItemArray[$i]["value"];
        //exit;
        $degree=$this->ItemArray[$i]["value"]/$total*360;
        $startDegree[$i]=$e;
        $endDegree[$i]=$e+$degree;
        $e+=$degree;
      }
       $j=$width/4+$this->margin+35;
       $mJ=$j-15;
       //畫陰影
       for ($j;$j >$mJ; $j--)
       {
         for($i=0;$i$num;$i++)
         {
          $color=ImageColorAllocate($this->Image,$colorArray[$i]["R"]-10,$colorArray[$i]["G"]-10,$colorArray[$i]["B"]-10);
          imagefilledarc($this->Image, $width/2+$this->margin, $j, $width, $width/2, $startDegree[$i], $endDegree[$i], $color, IMG_ARC_PIE);
         }
       }
       //畫區(qū)面和右邊的標(biāo)識字
      for($i=0;$i$num;$i++)
      {
        //獲取顏色
        $color=ImageColorAllocate($this->Image,$colorArray[$i]["R"],$colorArray[$i]["G"],$colorArray[$i]["B"]);
        
        //畫區(qū)面
        imagefilledarc($this->Image, $width/2+$this->margin, $width/4+$this->margin+20, $width, $width/2, $startDegree[$i], $endDegree[$i], $color, IMG_ARC_PIE);
        
        //說明方塊的上邊距
        $top=$this->margin+20+$i*10;
        //畫右邊的距形
        ImageFilledRectangle($this->Image,$width+$this->margin+20,$top+($i*10),$width+$this->margin+30,$top+($i*10)+10,$color);
        //字體顏色為黑色
        $fontColor=ImageColorAllocate($this->Image,255-$this->BgR,255-$this->BgG,255-$this->BgB);
        
        //畫右邊的說明文字
        $rightStr=$this->ItemArray[$i]["key"].":".$this->ItemArray[$i]["value"]."(".round($this->ItemArray[$i]["value"]*100/$total,2)."%)";
        //ImageString($this->Image,10,$width+$this->margin+35,$top+($i*10)-3,$rightStr,$fontColor);
        imagettftext($this->Image, 9,0,$width+$this->margin+35,$top+($i*10)+8,$fontColor,$this->font,$rightStr);
        
      }
      //清空各數(shù)組
      unset($colorArray,$startDegree,$endDegree);
   }
   //顯示圖片
   function showImage($ImageSavePath="")
   {
      // echo $ImageSavePath;
       //exit;
       if(empty($ImageSavePath))
       {
         ImagePNG($this->Image);
       }
       else
       {
         ImagePNG($this->Image,$ImageSavePath);
       }
      
       ImageDestroy($this->Image);
   }
   //畫標(biāo)題
   function drawTitle()
   {
        //顏色
     $color=ImageColorAllocate($this->Image,255-$this->BgR,255-$this->BgG,255-$this->BgB);
  
     //陰影色
     $black = imagecolorallocate($this->Image, 0, 0, 0);
     
     //計(jì)算標(biāo)題字體的寬度
     $fontWidth=strlen($this->ImageName)*($this->FontSize)-strlen($this->ImageName)*2;
     //畫標(biāo)題字的陰影
     imagettftext($this->Image, $this->FontSize+3,0,$this->ImageWidth/2-$fontWidth/2+1,$this->FontSize+11,$black,$this->font,$this->ImageName);
     //畫標(biāo)題的字
     imagettftext($this->Image, $this->FontSize+3,0,$this->ImageWidth/2-$fontWidth/2,$this->FontSize+10,$color,$this->font,$this->ImageName);
     
     //畫標(biāo)題下面的線條
     imageline($this->Image,$this->ImageWidth/2-$fontWidth/2-20,$this->FontSize+12,$this->ImageWidth/2-$fontWidth/2+1+$fontWidth+20,$this->FontSize+12,$color);
   }
   
   //畫LOGO
   function drawLogo()
   {
      list($w,$h,$type) = getimagesize($this->BgImage);
      
      $source;
      switch($type)
      {
          //圖片是GIF
         case 1:
          $source=imagecreatefromgif($this->BgImage);
          break;
          //圖片是jPG
         case 2:
          $source = imagecreatefromjpeg($this->BgImage);
          break;
          //圖片是PNG
         case 3:
          $source = imagecreatefrompng($this->BgImage);
      }
  
       imagecopymerge($this->Image,$source,0,0,0,0,$w,$h,20);
   }
   //畫坐標(biāo)
   function drawXY($bgScale=false)
   {
        //最大值
     $max=$this->getArrayMax($this->ItemArray);
     
     //顏色
     $color=ImageColorAllocate($this->Image,255-$this->BgR,255-$this->BgG,255-$this->BgB);
     //背景刻度的顏色
     $bgSColor=ImageColorAllocate($this->Image,$this->BgR-10,$this->BgG-10,$this->BgB-10);
     //畫X軸
     ImageLine($this->Image,$this->margin,$this->ImageHeight-$this->margin+2,$this->ImageWidth-$this->margin,$this->ImageHeight-$this->margin+2,$color);
     //畫Y軸
     ImageLine($this->Image,$this->margin,$this->margin+$this->FontSize+5,$this->margin,$this->ImageHeight-$this->margin+2,$color);
      
         
     //陰影色
     $black = imagecolorallocate($this->Image, 0, 0, 0);
     
      //畫Y軸字的陰影
     imagettftext($this->Image, $this->FontSize, 90, $this->FontSize+2, intval($this->ImageHeight/2)-1, $black, $this->font, $this->YName);
     //畫Y軸的字
     imagettftext($this->Image, $this->FontSize, 90, $this->FontSize+2, intval($this->ImageHeight/2), $color, $this->font, $this->YName);
   
      //畫X軸字的陰影
     imagettftext($this->Image, $this->FontSize,0,intval($this->ImageWidth/2)-1,$this->ImageHeight-$this->FontSize+5,$black,$this->font,$this->XName);
     //畫X軸的字
     imagettftext($this->Image, $this->FontSize,0,intval($this->ImageWidth/2),$this->ImageHeight-$this->FontSize+5,$color,$this->font,$this->XName);
   
      
     //畫0點(diǎn)坐標(biāo)
     imagettftext($this->Image,8,90,$this->margin/2+$this->FontSize,$this->ImageHeight-$this->margin,$color,$this->font,"0");
     //畫最大值數(shù)據(jù)
    // imagettftext($this->Image, $this->FontSize,90,$this->margin/2+7,$this->margin+20,$black,$font,$max);
     
     //畫內(nèi)容的實(shí)際高度
     $height=$this->ImageHeight-$this->margin*2-($this->FontSize+5);
     //每一刻度的值
     $scale=intval($height/10);
   
     for($i=0;$i10;$i++)
     {
       //畫刻度,如果設(shè)置了背景刻度
       if($bgScale)
       {
         ImageLine($this->Image,$this->margin+1,$this->margin+$i*$scale+$this->FontSize+5+$i,$this->ImageWidth-$this->margin,$this->margin+$i*$scale+$this->FontSize+5+$i,$bgSColor);
       }
       else
       {
         ImageLine($this->Image,$this->margin-2,$this->margin+$i*$scale+$this->FontSize+5+$i,$this->margin,$this->margin+$i*$scale+$this->FontSize+5+$i,$color);
       }
       //畫刻度上的值
       if($this->isScale)
       {
        $num=round($max-$max/10*$i,1);
        imagettftext($this->Image, 7,90,$this->margin/2+$this->FontSize,$this->margin+$i*$scale+15+$this->FontSize,$color,$this->font,$num);
       }
     }
     //如果未畫刻度值,則畫最大值
     if(!$this->isScale)
     {
        imagettftext($this->Image, 7,90,$this->margin/2+$this->FontSize,$this->margin+15+$this->FontSize,$color,$this->font,$max);
     }
   }
   
   //獲取數(shù)組中的最大值
   function getArrayMax($Array)
   {
     $temp=0;
        for($i=0;$icount($Array);$i++)
     {
         if($temp$Array[$i]["value"])
         {
             $temp=$Array[$i]["value"];
         }
     }
     return $temp;

}
?>
調(diào)用方法


require_once ("ImageReport.inc.php");
     $report=new ImageReport;
     $report->setImage($title,$type,$imgW,$imgH);//參數(shù)(標(biāo)題,類型(1(柱圖),2(曲線圖),3(餅圖)),圖片寬,圖片高)
     
    //這個(gè)我用數(shù)據(jù)庫查出來的,要改一下.格式是多維數(shù)據(jù).key=>value
     $temparray=$this->db->GetArray("select report_key as 'key',report_value as value from cms_r_report_data where report_id=$id order by report_dataId ASC");
     $report->setItem($temparray,$interval,$XName,$YName,$isScale);//參數(shù)(數(shù)組,間隔,X軸文字,Y軸文字,背景圖片)
     $report->setBg($BgR,$BgG,$BgB,"logo.jpg");//參數(shù)(背景顏色)
     $report->setFont(10);//字體大小1-10
     $report->drawReport();
     $report->showImage("../images/report/".$id.".png");//參數(shù)為保存的路徑


本文來自ChinaUnix博客,如果查看原文請點(diǎn):http://blog.chinaunix.net/u/5743/showart_1270197.html
您需要登錄后才可以回帖 登錄 | 注冊

本版積分規(guī)則 發(fā)表回復(fù)

  

北京盛拓優(yōu)訊信息技術(shù)有限公司. 版權(quán)所有 京ICP備16024965號-6 北京市公安局海淀分局網(wǎng)監(jiān)中心備案編號:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年舉報(bào)專區(qū)
中國互聯(lián)網(wǎng)協(xié)會會員  聯(lián)系我們:huangweiwei@itpub.net
感謝所有關(guān)心和支持過ChinaUnix的朋友們 轉(zhuǎn)載本站內(nèi)容請注明原作者名及出處

清除 Cookies - ChinaUnix - Archiver - WAP - TOP