phpで折れ線図の効果を実現するコード


クラス 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;//フォントの色  //--------パラメータ設定関数  機能 setImage($SizeX、$R、$G、$B、$Transparent){  $this->X=$SizeX;   $this->Y=$SizY;   $this->R=$R;   $this->G=$G;   $this->B=$B   $this->TRANSPARENT=$Transparent;   }   機能 setItem($AraySplit、$ItemAray、$ReportType、$Border)   $this->ARRAYSPLIT=$AraySplit;   $this->ITEMARRAY=$ItemAray;   $this->REPORTTYPE=$Report Type;   $this->BORDER=$Border;   }   機能 set Font($FontSize){   $this->FONTSIZE=$FontSize;   }   //----------------主体   機能 PrintReport(){   ヘッド( "Conttentt type: イメージ   //キャンバスのサイズを設定   $this->IMAGE=ImageCreate($this->X、$this->Y)   //キャンバスの背景色を設定します。   $background=ImageColorAllocate($this->IMAGE、$this->R、$this->G、$this->B)   if($this->TRANSPARENT==“1”){   //背中が透ける   Imagecolortrasparent($this->IMAGE、$background);   }else{   //透明でない場合は背景色を塗りつぶします。   ImageFilled Rectangle($this->IMAGE、0,0、$this->X、$this->Y、background);   }   //パラメータフォントのサイズと色   $this->FONTCOLOR=ImageColorAllocate($this->>IMAGE,255-$this->R,255-$this->G,255-$this->B);   スイッチ ($this->REPORTTYPE){   case "0":   break;   case "1":   $this->imagColumnS();   break;   case "2":   $this->imagColumnH();   break;   case "3":   $this->イメージライン()   break;   }   $this->printXY();   $this->printAll();   }   //-----------XY軸の印刷   機能 printXY(){   //XY軸を描く*/   $カラー=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、$X軸   Imageline($this->IMAGE、$this->BORDER、$this->Y->BORDER、$this->BORDER、$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、$   }   //X軸目盛り   $rulerX=$rulerX+$this->BORDER;   while($rulerX<($this->>X->BORDER*2)   $rulerX=$rulerX+$this->BORDER;   //Imageline($this->IMAGE、$this->BORDER、10、$this->BORDER+10,10、$カラー)   Imageline($this->IMAGE、$rulerX、$this->Y->BORDER、$rulerX、$this->Y-BORDER+2、$   }   }   //--------------縦棒グラフ   機能 イマジColumnS(){   $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(*)100000);  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)   }   $カラー=ImageColorAllocate($this->IMAGE、$R、$G、$B)   //縦の高さ   $height=($this->>Y-$this->BORDER)-($this->>Y-this->BORDER*2)*($item_array[$i]/$item_max)   ImageFilledRectangle($this->IMAGE、$height、$xx+$this->BORDER、$this->Y-BORDER、$   ImageStering($this->>IMAGE、$this->FONTSIZE、$height-$this->BORDER、$array[$i]、$this->FONTCOLOR;   //間隔用   $xx=$xx+$this->BORDER*2;   }   }   //-----------横棒図   機能 イマジColumnH(){   $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(*)100000);  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)   }   $カラー=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、$カラー)   ImageStering($this->>IMAGE、$this->FONTSIZE、$leight+2、$yy-this->BORDER、$array[$i]、$this->FONTCOLOR;   //間隔用   $yy=$yy-$this->BORDER*2;   }   }   //--------------折れ線図   機能 イメージライン(){   $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(*)100000);  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)   }   $カラー=ImageColorAllocate($this->IMAGE、$R、$G、$B)   //縦の高さ   $ヘightnow=($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、$   }   ImageStering($this->>IMAGE、$this->FONTSIZE、$xx+$this->BORDER、height_now-$this->BORDER/2,item_array[$i]、$this->FONTCOLOR;   $ヘightnext=$heightnow   //間隔用   $xx=$xx+$this->BORDER;   }   }   //--------------図の印刷完了http://knowsky.com   機能 printAll(){   ImageGIF($this->IMAGE);   ImageDestroy($this->IMAGE);   }   //--------------デバッグ   機能 debug(){   echo "X:「.this-」X.「.$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];   }   }   }   $レポート=new ImageReport   $report->setImage(600,300,255,255,255,1);パラメータ(長さ、幅、後ろ姿色R、G、B、透明かどうか1または0)   $temparray=「50,25,100,250,180,200,150,150,220,200,150,50,25,100,250,180,200,150,220,200,150,150」数値は指定記号で区切られます。   $report->setItem(',',temparray,3,20)/。パラメータ(区切り値の指定記号、数値変数、スタイル1は縦棒図2は横棒図3は折れ線図、距離)   $レポート->set Font(1)/。フォントサイズ1-10   $レポート->PrintReport()   //$レポート->debug()//調法の用   ?>