Mehdi Posted November 1, 2006 Share Posted November 1, 2006 Hello,I've written a script that has to show a bar chart with horizontal line of the name of companies en vertical line of amount of money that each company has payed. But it doesn't work. I think it have to work well. Could you check it, and tell me where the error is, please?Thanks,[code]<?phpheader("Content-type: image/png");class simpelbar{ private $margin=20; //The margin around of chart private $marginverticalline=20; //place of vertical line private $marginhorizentalline=40;//place of horizontal line private $barmargin=10; //distance between two cells private $inputwidth; //inserted width private $inputheight; //inserted height private $cells=array(); //array for the companies information private $font="luxisri.ttf"; //font function __construct($width,$height){ $this->inputwidth=$width; $this->inputheight=$height; } function addbar($company,$money){ $this->cells[$company]=$money; } private function fontadjust($widthbar){ $fontsize=$widthbar; foreach($this->cells as $key=>$val){ while(true){ $textsize=imageTTFbbox($fontsize,0,$this->font,$key); if(abs($textsize[2])<$widthbar){ break; } $fontsize--; } } return $fontsize; } function draw(){ $realwidth=$this->inputwidth-$this->margin*2; //the width of image $realheight=$this->inputheight-$this->margin*2; //the height of image $ystarthorizentalline=$realheight-$this->marginhorizentalline; // the begging y-point of horizontal line $xendhorizentalline=$realwidth-$this->margin; //the end x-point of horizontal line $max=max($this->cells); //the maximum amount of the money $totalbars=count($this->cells); //total cells of the chart $verticallinelong=$ystarthorizentalline-$this->margin; //the height of the vertical line $widthbar=(int)(($realwidth-(2*$this->margin)-($this->barmargin*($totalbars+1)))/$totalbars); //the width of a cell $text_size=$this->fontadjust($widthbar); //the text size $image=imagecreate($realwidth,$realheight); $red=imagecolorallocate($image,255,0,0); $blue=imagecolorallocate($image,0,0,255); $black=imagecolorallocate($image,0,0,0); imageline($image, $this->margin,$ystarthorizentalline,$this->margin,$this->margin,$black); imageline($image,$this->margin,$ystarthorizentalline,$xendhorizentalline,$ystarthorizentalline,$black); $xbar=$this->margin+$this->barmargin; //the x-point of the first cell foreach($this->cells as $key=>$val){ $ybar=$ystarthorizentalline-(int)($val/$max*$verticallinelong); // the y-point of first cell $nextxbar=$xbar+$widthbar;// the second x-point of the cell $nextybar=$this->marginhorizentalline;// the second y-point of the cell imagefilledrectangle($image,$xbar,$ybar,$nextxbar,$nextybar,$blue); $box=imageTTFbbox($text_size,0,$this->font,$key); $xstartfont=$xbar+(int)(($widthbar-abs($box[2]))/2); //the begging of the text under the cells imageTTFtext($image,35,0,$xstartfont,$realheight-5,$black,$this->font,$key); $xbar=$nextxbar+$this->barmargin;//counting of the x-point of the next cell } imagepng($image); }}$test=new simpelbar(400,300);$test->addbar("Shell",300);$test->addbar("Philips",200);$test->addbar("CCC",400);$test->draw();?>[/code] Quote Link to comment Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.