phpで折れ線図の効果を実現するコード
6405 ワード
クラス 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()//調法の用 ?>