Version: 1.0
Type: Full Script
Category: Graphics
License: GNU General Public License
Description: Graph IT - Display dynamic graph on your website using this free code - input can be by sending the data or sending a link to a file with the data See example of script usage on <a href=http://www.3dpictor.com>3D Pictor</a> I would appreciate a link back to http://www.3dpictor.com from the pages displaying graphs using this code
<?php
/************************************************************************
* GraphIT - Dynamic graph display using PHP GD
* By Kobi Tyrkel - (c) 2006
* Free for use under the limitation of having this remark left in the
* code and a link to http://www.3dpictor.com with the
* title "GraphIT - Dynamic graph display from www.3dpictor.com"
* from each page that contains the graph
************************************************************************/
// Graph display parameters
$SIZE = ((isset($_GET['size'])) ? $_GET['size'] : 25);
$THICK = ((isset($_GET['thick'])) ? $_GET['thick'] : 1);
$GRAPHTYPE = ((isset($_GET['graphtype'])) ? $_GET['graphtype'] : 4);
$XOFFSET = $SIZE;
$YOFFSET = 1.3 * $SIZE;
$STARTFROMZERO = ((isset($_GET['startfromzero'])) ? $_GET['startfromzero'] : 1);
function imagethreedframe ($img, $x0, $y0, $x1, $y1, $colour, $colourtop, $colourside, $backgroundcolor, $dx, $dy)
{
if ($y0 > $y1)
imagefilledpolygon($img, array ($x0 - $dx, $y1 + $dy, $x0, $y1, $x1, $y1, $x1 - $dx, $y1 + $dy), 4, $colourtop);
else
imagefilledpolygon($img, array ($x0 - $dx, $y0 + $dy, $x0, $y0, $x1, $y0, $x1 - $dx, $y0 + $dy), 4, $colourtop);
imagefilledpolygon($img, array ($x1 - $dx, $y0 + $dy, $x1- $dx, $y1 + $dy, $x1, $y1, $x1, $y0), 4, $colourside);
imagefilledrectangle($img, $x0 - $dx, $y0 + $dy, $x1 - $dx, $y1 + $dy, $colour);
if ($y0 > $y1)
imagepolygon($img, array ($x0 - $dx, $y1 + $dy, $x0, $y1, $x1, $y1, $x1 - $dx, $y1 + $dy), 4, $backgroundcolor);
else
imagepolygon($img, array ($x0 - $dx, $y0 + $dy, $x0, $y0, $x1, $y0, $x1 - $dx, $y0 + $dy), 4, $backgroundcolor);
imagepolygon($img, array ($x1 - $dx, $y0 + $dy, $x1- $dx, $y1 + $dy, $x1, $y1, $x1, $y0), 4, $backgroundcolor);
imagerectangle($img, $x0 - $dx, $y0 + $dy, $x1 - $dx, $y1 + $dy, $backgroundcolor);
}
function imageframe ($img, $x0, $y0, $x1, $y1, $colour, $colourtop, $colourside, $backgroundcolor)
{
imagefilledrectangle($img, $x0, $y0 , $x1, $y1 , $colour);
imagerectangle($img, $x0, $y0, $x1, $y1, $backgroundcolor);
}
// Location of the data file
$datafilename = ((isset($_GET['data'])) ? $_GET['data'] : '');
// Get a data file into an array of series
// the data source in a file at a URL
if ($datafilename<>'')
$series = file($datafilename);
else
$series = Array($_GET['headers'], $_GET['values']);
$count_of_array_elements = 0;
$min_value = 0;
$max_value = 0;
$xvalue = explode(",", $series[0]);
$yvalue = explode(",", $series[1]);
$count_of_array_elements = max (count($xvalue),count($yvalue));
$min_value = min(0, min($yvalue));
$max_value = max(0, max($yvalue));
$WIDTH = ($count_of_array_elements + 2) * $SIZE;
$HEIGHT = ($max_value - $min_value+ 3) * $SIZE;
header ("Content-type: image/jpeg");
$img = ImageCreate ($WIDTH, $HEIGHT) or die("Cannot Initialize new GD image stream ");
$backgroundcolor = ImageColorAllocate ($img, 0, 0, 0);
$gridcolor = ImageColorAllocate ($img, 255, 255, 255);
// X GRID
for ($x = 0; $x < count($xvalue); $x++) {
imageline($img, $XOFFSET + $x * $SIZE, $HEIGHT - $YOFFSET ,$XOFFSET + $x * $SIZE - $SIZE/4, $HEIGHT - $YOFFSET + $SIZE/4, $gridcolor);
imagestring($img, 5, $XOFFSET + $x * $SIZE - $SIZE/4, $HEIGHT - 0.6 * $SIZE * (2- $x%2), $xvalue[$x], $gridcolor);
}
// Y GRID
for ($y = $min_value; $y < $max_value + 1; $y++) {
imageline($img, $XOFFSET, $HEIGHT - $YOFFSET - $y * $SIZE + $min_value * $SIZE, $XOFFSET - $SIZE/4, $HEIGHT - $YOFFSET - $y * $SIZE + $min_value * $SIZE, $gridcolor);
imagestring($img, 5, 0, $HEIGHT - $SIZE - $y * $SIZE - $SIZE/2 + $min_value * $SIZE, $y, $gridcolor);
imageline($img, $XOFFSET, $HEIGHT - $YOFFSET - $y * $SIZE + $min_value * $SIZE, $XOFFSET + $count_of_array_elements * $SIZE, $HEIGHT - $YOFFSET - $y * $SIZE + $min_value * $SIZE, $gridcolor);
}
imageline($img, $XOFFSET, $HEIGHT - $YOFFSET + $min_value * $SIZE, $XOFFSET + $count_of_array_elements * $SIZE, $HEIGHT - $YOFFSET + $min_value * $SIZE, $gridcolor);
imageline($img, $XOFFSET, $HEIGHT - $YOFFSET , $XOFFSET, $HEIGHT - $YOFFSET- ($max_value + 1) * $SIZE + $min_value * $SIZE, $gridcolor);
imagesetthickness ($img, $THICK);
$serie = 1;
$start=1;
$x1=0;
$y1= $min_value * $SIZE;
if (is_array($yvalue)) {
$colour[$serie] = ImageColorAllocate($img, 22 * $serie, 100 * $serie, 254 * $serie);
$colourtop[$serie] = ImageColorAllocate($img, 2 * $serie, 2 * $serie, 214 * $serie);
$colourside[$serie] = ImageColorAllocate($img, 2 * $serie, 2 * $serie, 224 * $serie);
foreach ($yvalue as $line_num => $value) {
$x0=$x1;
$y0=$y1;
$x1=$line_num * $SIZE + $XOFFSET;
$y1=$HEIGHT - $value * $SIZE - $YOFFSET + $min_value * $SIZE;
switch ($GRAPHTYPE) {
case 1: imagefilledellipse($img, $x1, $y1, $THICK*2, $THICK*2, $colour[$serie]);
break;
case 2: if ($start == 1) {
$start = 0;
} else {
imageline($img, $x0, $y0, $x1, $y1, $colour[$serie]);
}
break;
case 3: imageframe ($img, $x1 - ($serie - 1) * $SIZE, $HEIGHT - $YOFFSET + ($serie - 1) * $SIZE + $min_value * $SIZE, $x1+$SIZE/1.1 - ($serie - 1) * $SIZE , $y1 + ($serie - 1) * $SIZE, $colour[$serie], $colourtop[$serie], $colourside[$serie], $backgroundcolor);
break;
case 4: imagethreedframe ($img, $x1 - ($serie - 1) * $SIZE, $HEIGHT - $YOFFSET + ($serie - 1) * $SIZE + $min_value * $SIZE, $x1+$SIZE/1.1 - ($serie - 1) * $SIZE , $y1 + ($serie - 1) * $SIZE, $colour[$serie], $colourtop[$serie], $colourside[$serie], $backgroundcolor,$SIZE/4, $SIZE/4);
break;
default : imagefilledellipse($img, $x1, $y1, $THICK*2, $THICK*2, $colour[$serie]);
if ($start == 1) {
$start = 0;
} else {
imageline($img, $x0, $y0, $x1, $y1, $colour[$serie]);
}
break;
}
}
}
imagegif($img);
ImageDestroy($img);
?>