ホームページ >バックエンド開発 >PHPチュートリアル >さまざまなグラフィカルレポートを表示できるPHPピクチャークラス

さまざまなグラフィカルレポートを表示できるPHPピクチャークラス

WBOY
WBOYオリジナル
2016-07-25 09:11:071060ブラウズ
  1. class ImageReport{
  2. var $X;//画像サイズ X 軸
  3. var $Y;//画像サイズ Y 軸
  4. var $R;//背景色R値
  5. var $G;//...G.
  6. var $B;//...B.
  7. var $TRANSPARENT;//透明1か0か
  8. var $IMAGE;//画像オブジェクト
  9. //- ------------------
  10. var $ARRAYSPLIT;//値の区切りに使用する記号を指定します
  11. var $ITEMARRAY;//値
  12. var $REPORTTYPE; //チャートの種類、1は垂直列、2は水平列、3は折れ線
  13. var $BORDER;//距離
  14. //----------------- --
  15. var $FONTSIZE;/ /フォント サイズ
  16. var $FONTCOLOR;//フォントの色
  17. var $numX = 1;//X 軸の開始スケール値
  18. var $stepX = 1;//X 軸の各スケール間隔値
  19. //-- ------パラメータ設定関数
  20. function setImage($SizeX,$SizeY,$R,$G,$B,$Transparent){
  21. $this->X=$SizeX ;
  22. $this->Y =$SizeY;
  23. $this->G=$G;
  24. $this-> ;TRANSPARENT=$Transparent;
  25. }
  26. function setItem($ArraySplit,$ItemArray,$ReportType,$Border){
  27. $this->>ITEMARRAY=$ItemArray; ->REPORTTYPE=$ReportType;
  28. $this->BORDER=$Border;
  29. function setFont($FontSize){
  30. $this->FONTSIZE=$FontSize }
  31. //X 軸のスケール値設定
  32. function setX($numX = 1 , $stepX = 1){
  33. $this->numX = $numX;
  34. $this->stepX = $stepX;
  35. }
  36. //------ --------- 本体
  37. 関数 PrintReport(){
  38. //キャンバスサイズ作成
  39. $this->IMAGE=ImageCreate($this->X,$this->Y); /キャンバスの背景色を設定します
  40. $background= ImageColorAllocate($this->IMAGE,$this->R,$this->G,$this->B)
  41. if($this->TRANSPARENT= ="1"){
  42. // 背景は透明です
  43. Imagecolortransparent($this->IMAGE,$background);
  44. }else{
  45. // 透明にしたくない場合は、背景を塗りつぶすことができます背景色
  46. ImageFilledRectangle($this->IMAGE,0,0,$this->X,$this->Y,$background)
  47. }
  48. //パラメータのフォントサイズと色
  49. $this-> ;FONTCOLOR=ImageColorAllocate($this->IMAGE,255-$this->R, 255-$this->G,255-$this->B);
  50. スイッチ ($this->REPORTTYPE) {
  51. ケース "0":
  52. ケース "1":
  53. $this->imageColumnS();
  54. ケース "2":
  55. ケース; "3":
  56. $this->imageLine();
  57. ブレーク;
  58. ケース "4 ":
  59. $this->imageCircle();
  60. $this->printXY(); this->printAll();
  61. }
  62. //-------- ---XY 座標軸を印刷する
  63. function printXY(){
  64. $rulerY = $rulerX = "";
  65. // XY 座標軸*/
  66. $color=ImageColorAllocate($this->IMAGE,255-$this->R,255-$this->G,255-$this->B); $this->X/10;
  67. $yy=$this->Y-$this->Y/10;
  68. ImageLine($this->IMAGE,$this->BORDER,$this-> ;BORDER,$this->BORDER,$this->Y-$this->BORDER ,$color);//X 軸
  69. ImageLine($this->IMAGE,$this->BORDER,$ this->Y-$this->BORDER,$this->X-$this->BORDER,$this->Y-$this->BORDER,$color);//y 軸
  70. imagestring($this->IMAGE, $this->FONTSIZE, $this->BORDER- 2, $this->Y-$this->BORDER+5, "0", $color);
  71. //Y 軸のスケール
  72. $rulerY=$this->Y-$this->BORDER ;
  73. $i = 0;
  74. while($rulerY>$this->BORDER*2){
  75. $rulerY =$rulerY-$this->BORDER;
  76. ImageLine($this->IMAGE,$this->BORDER,$rulerY,$this->BORDER-2,$rulerY,$color); ($this->REPORTTYPE == 2){//横棒グラフ
  77. imagestring($this->IMAGE, $this->FONTSIZE, $this->BORDER-10, $rulerY-2-$this ->BORDER*($i+.5), $this->numX, $color);
  78. $this->numX += $this->stepX;
  79. }
  80. $i++;
  81. }
  82. // while($rulerXX-$this->BORDER*2)){
  83. $rulerX=$rulerX+$this->BORDER
  84. //ImageLine($this->BORDER; IMAGE,$ this->BORDER,10,$this->BORDER+10,10,$color);
  85. ImageLine($this->IMAGE,$rulerX,$this->Y-$this-> ;BORDER, $rulerX,$this->Y-$this->BORDER+2,$color);
  86. //スケール値
  87. if($this->REPORTTYPE == 1){//垂直列chart
  88. 画像文字列 ($this->IMAGE, $this->FONTSIZE, $rulerX-2+$this->BORDER*($i+.5), $this->Y-$this->BORDER +5, $this->numX, $color);
  89. $this->numX += $this->stepX;
  90. }else if($this->REPORTTYPE == 3){//折線图
  91. imagestring($this->IMAGE, $this->FONTSIZE, $rulerX-2, $this->Y-$this- >BORDER+5, $this->numX, $color);
  92. $this->numX += $this->stepX;
  93. }
  94. $i++;
  95. }
  96. }
  97. //--- -----------竖柱形図
  98. function imageColumnS(){
  99. $item_array=Split($this->ARRAYSPLIT,$this->ITEMARRAY);
  100. $num=Count($item_array);
  101. $item_max=0;
  102. for ($i=0;$i $item_max=Max($item_max,$item_array[$i]);
  103. }
  104. $xx=$this->BORDER*2;
  105. //画柱形図
  106. for ($i=0;$i srand((double)microtime()*1000000);
  107. if($this->R!=255 && $this->G!=255 && $this->B!=255){
  108. $R=Rand($this->R,200);
  109. $G=Rand($this->G,200);
  110. $B=Rand($this->B,200);
  111. }else{
  112. $R=Rand(50,200);
  113. $G=ランド(50,200);
  114. $B=ランド(50,200);
  115. }
  116. $color=ImageColorAllocate($this->IMAGE,$R,$G,$B);
  117. //柱状の高さ
  118. $height=($this->Y-$this->BORDER)-($this->Y-$this->BORDER*2)*($item_array[$i ]/$item_max);
  119. ImageFilledRectangle($this->IMAGE,$xx,$height,$xx+$this->BORDER,$this->Y-$this->BORDER,$color);
  120. ImageString($this->IMAGE,$this->FONTSIZE,$xx,$height-$this->BORDER,$item_array[$i],$this->FONTCOLOR);
  121. //間隔を空けるために使用します
  122. $xx=$xx+$this->BORDER*2;
  123. }
  124. }
  125. //-----------横柱形図
  126. function imageColumnH(){
  127. $item_array=Split($this->ARRAYSPLIT,$this->ITEMARRAY);
  128. $num=Count($item_array);
  129. $item_max=0;
  130. for ($i=0;$i $item_max=Max($item_max,$item_array[$i]);
  131. }
  132. $yy=$this->Y-$this ->ボーダー*2;
  133. //画柱形図
  134. for ($i=0;$i srand((double)microtime()*1000000);
  135. if($this->R!=255 && $this->G!=255 && $this->B!=255){
  136. $R=Rand($this->R,200);
  137. $G=Rand($this->G,200);
  138. $B=Rand($this->B,200);
  139. }else{
  140. $R=Rand(50,200);
  141. $G=ランド(50,200);
  142. $B=ランド(50,200);
  143. }
  144. $color=ImageColorAllocate($this->IMAGE,$R,$G,$B);
  145. //柱形長さ
  146. $leight=($this->X-$this->BORDER*2)*($item_array[$i]/$item_max);
  147. $leight = $leight BORDER ? $this->BORDER : $leight;
  148. ImageFilledRectangle($this->IMAGE,$this->BORDER,$yy-$this->BORDER,$leight,$yy,$color);
  149. ImageString($this->IMAGE,$this->FONTSIZE,$leight+2,$yy-$this->BORDER,$item_array[$i],$this->FONTCOLOR);
  150. //間隔を空けるために使用します
  151. $yy=$yy-$this->BORDER*2;
  152. }
  153. }
  154. //--------------折線図
  155. function imageLine(){
  156. $item_array=Split($this->ARRAYSPLIT,$this->ITEMARRAY);
  157. $num=Count($item_array);
  158. $item_max=0;
  159. for ($i=0;$i $item_max=Max($item_max,$item_array[$i]);
  160. }
  161. $xx=$this->BORDER;
  162. //画柱形図
  163. for ($i=0;$i srand((double)microtime()*1000000);
  164. if($this->R!=255 && $this->G!=255 && $this->B!=255){
  165. $R=Rand($this->R,200);
  166. $G=Rand($this->G,200);
  167. $B=Rand($this->B,200);
  168. }else{
  169. $R=Rand(50,200);
  170. $G=ランド(50,200);
  171. $B=ランド(50,200);
  172. }
  173. $color=ImageColorAllocate($this->IMAGE,$R,$G,$B);
  174. //柱状の高さ
  175. $height_now=($this->Y-$this->BORDER)-($this->Y-$this->BORDER*2)*($item_array[$i ]/$item_max);
  176. if($i!="0")
  177. ImageLine($this->IMAGE,$xx-$this->BORDER,$height_next,$xx,$height_now,$color);
  178. ImageString($this->IMAGE,$this->FONTSIZE,$xx+2,$height_now-$this->BORDER/2,$item_array[$i],$this->FONTCOLOR);
  179. $height_next=$height_now;
  180. //間隔を空けるために使用します
  181. $xx=$xx+$this->BORDER;
  182. }
  183. }
  184. //--------------饼状態図
  185. function imageCircle(){
  186. $total = 0;
  187. $item_array=Split($this->ARRAYSPLIT,$これ->ITEMARRAY);
  188. $num=Count($item_array);
  189. $item_max=0;
  190. for ($i=0;$i $item_max=Max($item_max,$item_array[$i]);
  191. $total += $item_array[$i];
  192. }
  193. $yy=$this->Y-$this->BORDER*2;
  194. //画饼状態図の阴影部分
  195. $e=0;
  196. for ($i=0;$i srand((double)microtime()*1000000);
  197. if ($this->R!=255 && $this->G!=255 && $this->B!=255){
  198. $R=Rand($this->R,200);
  199. $G=Rand($this->G,200);
  200. $B=Rand($this->B,200);
  201. }else{
  202. $R=Rand(50,200);
  203. $G=ランド(50,200);
  204. $B=ランド(50,200);
  205. }
  206. $s=$e;
  207. $leight=$item_array[$i]/$total*360;
  208. $e=$s+$leight;
  209. $color=ImageColorAllocate($this->IMAGE,$R, $G,$B);
  210. $colorarray[$i]=$color;
  211. //画圆
  212. for ($j = 90; $j > 70; $j--) imagefilledarc($this->IMAGE, 110, $j, 200, 100, $s, $e, $color 、IMG_ARC_PIE);
  213. //imagefilledarc($this->IMAGE, 110, 70, 200, 100, $s, $e, $color, IMG_ARC_PIE);
  214. //ImageFilledRectangle($this->IMAGE,$this->BORDER,$yy-$this->BORDER,$leight,$yy,$color);
  215. //ImageString($this->IMAGE,$this->FONTSIZE,$leight+2,$yy-$this->BORDER,$item_array[$i],$this->FONTCOLOR);
  216. //間隔を空けるために使用します
  217. $yy=$yy-$this->BORDER*2;
  218. }
  219. //画饼状態図の表面部分
  220. $e=0;
  221. for ($i=0;$i srand((double)microtime()*1000000);
  222. if($this->R!=255 && $this->G!=255 && $this->B!=255){
  223. $R=Rand($this->R,200);
  224. $G=Rand($this->G,200);
  225. $B=Rand($this->B,200);
  226. }else{
  227. $R=Rand(50,200);
  228. $G=ランド(50,200);
  229. $B=ランド(50,200);
  230. }
  231. $s=$e;
  232. $leight=$item_array[$i]/$total*360;
  233. $e=$s+$leight;
  234. //$color=$colorarray[$i];
  235. $color =ImageColorAllocate($this->IMAGE,$R,$G,$B);
  236. //画圆
  237. //for ($j = 90; $j > 70; $j--) imagefilledarc($this->IMAGE, 110, $j, 200, 100, $s, $e, $color, IMG_ARC_PIE);
  238. imagefilledarc($this->IMAGE, 110, 70, 200, 100, $s, $e, $color, IMG_ARC_PIE);
  239. }
  240. }
  241. //-------------- 打印画像の完成
  242. function printAll(){
  243. ImagePNG($this->IMAGE);
  244. ImageDestroy($this->IMAGE );
  245. }
  246. //--------------调试
  247. function debug(){
  248. echo "X:".$this->X."
    Y:" .$this->Y;
  249. echo "
    BORDER:".$this->BORDER;
  250. $item_array=split($this->ARRAYSPLIT,$this->ITEMARRAY);
  251. $num=Count($item_array);
  252. echo "
    数值个数:".$num."
    数值:";
  253. for ($i=0;$i<$num;$i++){
  254. echo "
    ".$item_array[$i];
  255. }
  256. }
  257. }
  258. //$report->debug();//调式之用
  259. /*
  260. Header( "Content-type:image/png");
  261. $report=new ImageReport;
  262. $report ->setImage(600,500,255,255,255,1);//パラメータ(长,高,背影色R,G,B,有無透明1または0)
  263. $temparray="0,260,400,124,48,720,122,440,475";//数值,指定記号間隔を使用开
  264. $report->setItem(',',$temparray,3,23);//パラメータ(分間隔数の指定記号,数值变量,样式1は竖柱、図2は横柱、図3は折れ線図4饼図,距離)
  265. $report->setFont(1);//文字大小1-10
  266. //$report->setX(1,1);//設置X轴刻度值(起始刻度值=1,刻度间間隔值=1)
  267. $report->PrintReport();
  268. */
  269. ?>
复制發


声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。