刚才查自己网站的反向链接,发现自己6年前写的一个GD图库生成横竖柱状图和折线图例程居然还挂在不少网站上.那我也再贴出来吧:)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 | <? Class 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;//字体颜色 //--------参数设置函数 function setImage($SizeX,$SizeY,$R,$G,$B,$Transparent){ $this->X=$SizeX; $this->Y=$SizeY; $this->R=$R; $this->G=$G; $this->B=$B; $this->TRANSPARENT=$Transparent; } function setItem($ArraySplit,$ItemArray,$ReportType,$Border){ $this->ARRAYSPLIT=$ArraySplit; $this->ITEMARRAY=$ItemArray; $this->REPORTTYPE=$ReportType; $this->BORDER=$Border; } function setFont($FontSize){ $this->FONTSIZE=$FontSize; } //----------------主体 function PrintReport(){ Header( "Content-type: image/gif"); //建立画布大小 $this->IMAGE=ImageCreate($this->X,$this->Y); //设定画布背景色 $background=ImageColorAllocate($this->IMAGE,$this->R,$this->G,$this->B); if($this->TRANSPARENT=="1"){ //背影透明 Imagecolortransparent($this->IMAGE,$background); }else{ //如不要透明时可填充背景色 ImageFilledRectangle($this->IMAGE,0,0,$this->X,$this->Y,$background); } //参数字体文小及颜色 $this->FONTCOLOR=ImageColorAllocate($this->IMAGE,255-$this->R,255-$this->G,255-$this->B); Switch ($this->REPORTTYPE){ case "0": break; case "1": $this->imageColumnS(); break; case "2": $this->imageColumnH(); break; case "3": $this->imageLine(); break; } $this->printXY(); $this->printAll(); } //-----------打印XY坐标轴 function printXY(){ //画XY坐标轴*/ $color=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,$this->Y-$this->BORDER,$color);//X轴 ImageLine ($this->IMAGE,$this->BORDER,$this->Y-$this->BORDER,$this-> X-$this->BORDER,$this->Y-$this->BORDER,$color);//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,$color); } //X轴上刻度 $rulerX=$rulerX+$this->BORDER; while($rulerX<($this->X-$this->BORDER*2)){ $rulerX=$rulerX+$this->BORDER; //ImageLine($this->IMAGE,$this->BORDER,10,$this->BORDER+10,10,$color); ImageLine($this->IMAGE,$rulerX,$this->Y-$this->BORDER,$rulerX,$this->Y-$this->BORDER+2,$color); } } //--------------竖柱形图 function imageColumnS(){ $item_array=Split($this->ARRAYSPLIT,$this->ITEMARRAY); $num=Count($item_array); $item_max=0; for ($i=0;$i<$num;$i++){ $item_max=Max($it em_max,$item_array[$i]); } $xx=$this->BORDER*2; //画柱形图 for ($i=0;$i<$num;$i++){ srand((double)microtime()*1000000); 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); } $color=ImageColorAllocate($this->IMAGE,$R,$G,$B); //柱形高度 $height=($this->Y-$this->BORDER)-($this->Y-$this->BORDER*2)*($item_array[$i]/$item_max); ImageFilledRectangle($this->IMAGE,$xx,$height,$xx+$this->BORDER,$this->Y-$this->BORDER,$color); ImageString($this->IMAGE,$this->FONTSIZE,$xx,$height-$this->BORDER,$item_array[$i],$this->FONTCOLOR); //用于间隔 $xx=$xx+$this->BORDER*2; } } //-----------横柱形图 function imageColumnH(){ $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()*1000000); 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); } $color=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,$color); ImageString($this->IMAGE,$this->FONTSIZE,$leight+2,$yy-$this->BORDER,$item_array[$i],$this->FONTCOLOR); //用于间隔 $yy=$yy-$this->BORDER*2; } } //--------------折线图 function imageLine(){ $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()*1000000); 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); } $color=ImageColorAllocate($this->IMAGE,$R,$G,$B); //柱形高度 $height_now=($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,$color); } ImageString($this->IMAGE,$this->FONTSIZE,$xx+$this->BORDER,$height_now-$this->BORDER/2,$item_array[$i],$this->FONTCOLOR); $height_next=$height_now; //用于间隔 $xx=$xx+$this->BORDER; } } //--------------完成打印图形YeMaoSheng.com function printAll(){ ImageGIF($this->IMAGE); ImageDestroy($this->IMAGE); } //--------------调试 function debug(){ echo "X:".$this->X."<br>Y:".$this->Y; echo "<br>BORDER:".$this->BORDER; $item_array=split($this->ARRAYSPLIT,$this->ITEMARRAY); $num=Count($item_array); echo "<br>数值个数:".$num."<br>数值:"; for ($i=0;$i<$num;$i++){ echo "<br>".$item_array[$i]; } } } $report=new ImageReport; $report->setImage(600,300,255,255,255,1);//参数(长,宽,背影色R,G,B,是否透明1或0) $temparray="50,25,100,250,180,200,150,220,200,150,50,25,100,250,180,200,150,220,200,150";//数值,用指定符号隔开 $report->setItem(',',$temparray,3,20);//参数(分隔数值的指定符号,数值变量,样式1为竖柱图2为横柱图3为折线图,距离) $report->setFont(1);//字体大小1-10 $report->PrintReport(); //$report->debug();//调试之用 ?> |