Jump to content

PHP Script


Mehdi

Recommended Posts

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]
<?php
header("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

Archived

This topic is now archived and is closed to further replies.

×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.