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] Link to comment https://forums.phpfreaks.com/topic/25860-php-script/ Share on other sites More sharing options...
Recommended Posts
Archived
This topic is now archived and is closed to further replies.