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
Share on other sites

This thread is more than a year old. Please don't revive it unless you have something important to add.

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • 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.