>  기사  >  백엔드 개발  >  다양한 그래픽 보고서를 표시할 수 있는 PHP 그림 클래스

다양한 그래픽 보고서를 표시할 수 있는 PHP 그림 클래스

WBOY
WBOY원래의
2016-07-25 09:11:071026검색
  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->R=$R
  24. $this->B= $B ; $this->TRANSPARENT=$Transparent;
  25. }
  26. function setItem($ArraySplit,$ItemArray,$ReportType,$Border){
  27. $this->ARRAYSPLIT=$ ArraySplit;
  28. $this->ITEMARRAY=$ItemArray;
  29. $this->BORDER=$Border;
  30. }
  31. 함수 ($ FontSize){
  32. $this->FONTSIZE=$FontSize;
  33. }
  34. //X축 스케일 값 설정
  35. function setX($numX = 1, $stepX = 1){
  36. $this->numX = $numX;
  37. $this->stepX = $stepX;
  38. }
  39. //--------------- -Body
  40. function PrintReport(){
  41. //캔버스 크기 생성
  42. $this->IMAGE=ImageCreate($this->X,$this->Y)
  43. // 캔버스 배경색 설정
  44. $Background=ImageColorAllocate($this->IMAGE,$this->R,$this->G,$this->B)
  45. if($this-> ;TRANSPARENT ==="1"){
  46. //배경은 투명합니다
  47. Imagecolortransparent($this->IMAGE,$Background)
  48. }else{
  49. //채울 수 있습니다. 투명하게 하고 싶지 않은 경우 배경색
  50. ImageFilledRectangle($this->IMAGE,0,0,$this->X,$this->Y,$Background)
  51. }
  52. //글꼴 크기 및 색상 매개변수
  53. $this->FONTCOLOR=ImageColorAllocate($this->IMAGE,255-$this->R,255-$this->G,255-$ this->B);
  54. 스위치( $this->REPORTTYPE){
  55. 케이스 "0":
  56. 중단
  57. 케이스 "1":
  58. $this->imageColumnS ();
  59. 중단;
  60. 사례 "2":
  61. $this->imageColumnH()
  62. 중단
  63. 사례 "3":
  64. $this->imageLine ();
  65. 중단;
  66. 사례 "4":
  67. $this->imageCircle()
  68. 중단
  69. }
  70. $this->printXY(); 🎜> $this->printAll();
  71. }
  72. //---------XY 좌표축 인쇄
  73. function printXY(){
  74. $rulerY = $ ruleX = "";
  75. //XY 좌표축 그리기*/
  76. $color=ImageColorAllocate($this->IMAGE,255-$this->R,255-$this->G,255 -$this->B)
  77. $xx=$this->X/10
  78. $yy=$this->Y-$this->Y/10;
  79. ImageLine ($this->IMAGE,$this->BORDER,$this->BORDER,$this->BORDER,$this->Y-$this->BORDER,$color);//X -축
  80. ImageLine($this->IMAGE ,$this->BORDER,$this->Y-$this->BORDER,$this->X-$this->BORDER,$ this->Y-$this->BORDER, $color);//y축
  81. imagestring($this->IMAGE, $this->FONTSIZE, $this->BORDER-2, $this->Y-$this->BORDER 5 , "0", $color);
  82. //Y축 크기 조정
  83. $rulerY=$this->Y-$this-> BORDER;
  84. $i = 0;
  85. while ($rulerY>$this->BORDER*2){
  86. $rulerY=$rulerY-$this->BORDER; this->IMAGE,$this->BORDER,$ 눈금자Y,$this->BORDER-2,$rulerY,$color)
  87. if($this->REPORTTYPE == 2) {//가로 막대형 차트
  88. imagestring($this- >IMAGE, $this->FONTSIZE, $this->BORDER-10, $rulerY-2-$this->BORDER*($i . 5), $this->numX, $color)
  89. $this->numX = $this->stepX;
  90. }
  91. $i ;
  92. }
  93. // X축 크기 조정
  94. $rulerX=$rulerX $this ->BORDER
  95. $i = 0;
  96. while($rulerX<($this->X-$this-> BORDER*2)){
  97. $rulerX=$rulerX $this ->BORDER
  98. //ImageLine($this->IMAGE,$this->BORDER,10,$this->BORDER; 10,10,$color)
  99. ImageLine($this- >IMAGE,$rulerX,$this->Y-$this->BORDER,$rulerX,$this->Y-$this- >BORDER 2,$color);
  100. / /Scale 값
  101. if($this->REPORTTYPE == 1){//세로 막대형 차트
  102. imagestring($this-> IMAGE, $this->FONTSIZE, $rulerX-2 $this- >BORDER*($i .5), $this->Y-$this->BORDER 5, $this->numX, $ color);
  103. $this->numX = $this- >stepX;
  104. }else if($this->REPORTTYPE == 3){//折线图
  105. imagestring($this->IMAGE, $this->FONTSIZE, $rulerX-2, $this->Y-$ this->BORDER 5, $this->numX, $color);
  106. $this->numX = $this->stepX;
  107. }
  108. $i ;
  109. }
  110. }
  111. //--------------- 종 모양 그림
  112. function imageColumnS(){
  113. $item_array=Split($this-> ARRAYSPLIT,$this->ITEMARRAY);
  114. $num=개수($item_array);
  115. $item_max=0;
  116. for ($i=0;$i<$num;$i ){
  117. $item_max=Max($item_max,$item_array[$i]);
  118. }
  119. $xx=$ this->BORDER*2;
  120. //형식 그림
  121. for ($i=0;$i<$num;$i ){
  122. srand((double)microtime()*1000000);
  123. if($ this->R!=255 && $this->G!=255 && $this->B!=255){
  124. $R=Rand($this->R,200);
  125. $G=Rand($this->G,200);
  126. $B=Rand($this->B,200);
  127. }else{
  128. $R=Rand(50,200);
  129. $G=랜드(50,200);
  130. $B=랜드(50,200);
  131. }
  132. $color=ImageColorAllocate($this->IMAGE,$R,$G,$B);
  133. //모양의 높이
  134. $height=($this->Y-$this->BORDER)-($this->Y-$this->BORDER*2)*($ item_array[$i]/$item_max);
  135. ImageFilledRectangle($this->IMAGE,$xx,$height,$xx $this->BORDER,$this->Y-$this->BORDER,$color);
  136. ImageString($this->IMAGE,$this->FONTSIZE,$xx,$height-$this->BORDER,$item_array[$i],$this->FONTCOLOR);
  137. //사용于间隔
  138. $xx=$xx $this->BORDER*2;
  139. }
  140. }
  141. //------------ 모양 그림
  142. function imageColumnH(){
  143. $item_array=Split($this->ARRAYSPLIT ,$this->ITEMARRAY);
  144. $num=개수($item_array);
  145. $item_max=0;
  146. for ($i=0;$i<$num;$i ){
  147. $item_max=Max($item_max,$item_array[$i]);
  148. }
  149. $yy=$ this->Y-$this->BORDER*2;
  150. //형식 그림
  151. for ($i=0;$i<$num;$i ){
  152. srand((double)microtime()*1000000);
  153. if($ this->R!=255 && $this->G!=255 && $this->B!=255){
  154. $R=Rand($this->R,200);
  155. $G=Rand($this->G,200);
  156. $B=Rand($this->B,200);
  157. }else{
  158. $R=Rand(50,200);
  159. $G=랜드(50,200);
  160. $B=랜드(50,200);
  161. }
  162. $color=ImageColorAllocate($this->IMAGE,$R,$G,$B);
  163. //형태의 크기
  164. $leight=($this->X-$this->BORDER*2)*($item_array[$i]/$item_max);
  165. $leight = $leight < $this->BORDER ? $this->BORDER : $leight;
  166. ImageFilledRectangle($this->IMAGE,$this->BORDER,$yy-$this->BORDER,$leight,$yy,$color);
  167. ImageString($this->IMAGE,$this->FONTSIZE,$leight 2,$yy-$this->BORDER,$item_array[$i],$this->FONTCOLOR);
  168. //사용于间隔
  169. $yy=$yy-$this->BORDER*2;
  170. }
  171. }
  172. //--------------- 折线图
  173. function imageLine(){
  174. $item_array=Split($this-> ARRAYSPLIT,$this->ITEMARRAY);
  175. $num=개수($item_array);
  176. $item_max=0;
  177. for ($i=0;$i<$num;$i ){
  178. $item_max=Max($item_max,$item_array[$i]);
  179. }
  180. $xx=$ this->BORDER;
  181. //형식 그림
  182. for ($i=0;$i<$num;$i ){
  183. srand((double)microtime()*1000000);
  184. if($ this->R!=255 && $this->G!=255 && $this->B!=255){
  185. $R=Rand($this->R,200);
  186. $G=Rand($this->G,200);
  187. $B=Rand($this->B,200);
  188. }else{
  189. $R=Rand(50,200);
  190. $G=랜드(50,200);
  191. $B=랜드(50,200);
  192. }
  193. $color=ImageColorAllocate($this->IMAGE,$R,$G,$B);
  194. //모양의 높이
  195. $height_now=($this->Y-$this->BORDER)-($this->Y-$this->BORDER*2)*($ item_array[$i]/$item_max);
  196. if($i!="0")
  197. ImageLine($this->IMAGE,$xx-$this->BORDER,$height_next,$xx,$height_now,$color);
  198. ImageString($this->IMAGE,$this->FONTSIZE,$xx 2,$height_now-$this->BORDER/2,$item_array[$i],$this-> 글꼴 색상);
  199. $height_next=$height_now;
  200. //사용于间隔
  201. $xx=$xx $this->BORDER;
  202. }
  203. }
  204. //---------------饼状图
  205. function imageCircle(){
  206. $total = 0;
  207. $ item_array=분할($this->ARRAYSPLIT,$this->ITEMARRAY);
  208. $num=개수($item_array);
  209. $item_max=0;
  210. for ($i=0;$i<$num;$i ){
  211. $item_max=Max($item_max,$item_array[$i]);
  212. $total = $item_array[$i ];
  213. }
  214. $yy=$this->Y-$this->BORDER*2;
  215. //画饼状图的阴影부분분
  216. $e=0;
  217. for ($i=0;$i<$num;$i ){
  218. srand((double )microtime()*1000000);
  219. if($this->R!=255 && $this->G!=255 && $this->B!=255){
  220. $R= 랜드($this->R,200);
  221. $G=Rand($this->G,200);
  222. $B=Rand($this->B,200);
  223. }else{
  224. $R=Rand(50,200);
  225. $G=랜드(50,200);
  226. $B=랜드(50,200);
  227. }
  228. $s=$e;
  229. $leight=$item_array[$i]/$total*360;
  230. $e=$s $leight;
  231. $color=ImageColorAllocate( $this->IMAGE,$R,$G,$B);
  232. $colorarray[$i]=$color;
  233. //画圆
  234. for ($j = 90; $j > 70; $j--) imagefilledarc($this->IMAGE, 110, $j, 200, 100, $s, $ e, $color, IMG_ARC_PIE);
  235. //imagefilledarc($this->IMAGE, 110, 70, 200, 100, $s, $e, $color, IMG_ARC_PIE);
  236. //ImageFilledRectangle($this->IMAGE,$this->BORDER,$yy-$this->BORDER,$leight,$yy,$color);
  237. //ImageString($this->IMAGE,$this->FONTSIZE,$leight 2,$yy-$this->BORDER,$item_array[$i],$this->FONTCOLOR);
  238. //사용于间隔
  239. $yy=$yy-$this->BORDER*2;
  240. }
  241. //画饼状图的表면부분
  242. $e=0;
  243. for ($i=0;$i<$num;$i ){
  244. srand((double)microtime()*1000000);
  245. if($this->R!=255 && $this->G!=255 && $this->B!=255){
  246. $R=Rand($this->R,200);
  247. $G=Rand($this->G,200);
  248. $B=Rand($this->B,200);
  249. }else{
  250. $R=Rand(50,200);
  251. $G=랜드(50,200);
  252. $B=랜드(50,200);
  253. }
  254. $s=$e;
  255. $leight=$item_array[$i]/$total*360;
  256. $e=$s $leight;
  257. //$color= $colorarray[$i];
  258. $color=ImageColorAllocate($this->IMAGE,$R,$G,$B);
  259. //画圆
  260. //for ($j = 90; $j > 70; $j--) imagefilledarc($this->IMAGE, 110, $j, 200, 100, $s , $e, $color, IMG_ARC_PIE);
  261. imagefilledarc($this->IMAGE, 110, 70, 200, 100, $s, $e, $color, IMG_ARC_PIE);
  262. }
  263. }
  264. //---------------完成打印图shape
  265. function printAll(){
  266. ImagePNG($this->IMAGE) ;
  267. ImageDestroy($this->IMAGE);
  268. }
  269. //-------------调试
  270. function debug(){
  271. echo "X:".$this->X."< ;br/>Y:".$this->Y;
  272. echo "
    BORDER:".$this->BORDER;
  273. $item_array=split($this->ARRAYSPLIT,$this->ITEMARRAY);
  274. $num=개수($item_array);
  275. echo "
    数值个数:".$num."
    数值:";
  276. for ($i=0;$i<$num;$i ){
  277. echo "
    ".$item_array[$i];
  278. }
  279. }
  280. }
  281. //$report->debug();//调式之用
  282. /*
  283. Header( "콘텐츠 유형:이미지/png" );
  284. $report=new ImageReport;
  285. $report->setImage(600,500,255,255,255,1);//参数(长,高,背影colorR,G,B,是否透明1或0)
  286. >符号,数值变weight,样式1为竖柱图2为横柱图3为折线图4为饼图,距离)
  287. $report->setFont(1);//字体大小1-10
  288. / /$report->setX(1,1);//设置X轴刻degree值(起始刻島值=1,刻島间隔值=1)
  289. $report->PrintReport();
  290. * /
  291. ?>
复代码

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.