9 * Author: Carlos Reche/Joe Hunt
10 * E-mail: carlosreche@yahoo.com/joe.hunt.consulting@gmail.com
11 * Sorocaba, SP - Brazil/Wellington, New Zealand
13 * Created: Sep 20, 2004
14 * Last Modification: Sep 20, 2004/Apr 01, 2007
20 * graph creates 6 different types of graphics with how many parameters you want. You can
21 * change the appearance of the graphics in 3 different skins, and you can still cross data from 2
22 * graphics in only 1! It's a powerful script, and I recommend you read all the instructions
23 * to learn how to use all of this features. Don't worry, it's very simple to use it.
25 * This script is free. Please keep the credits.
31 INSTRUNCTIONS OF HOW TO USE THIS SCRIPT (Please, take a minute to read it. It's important!)
34 NOTE: make sure that your PHP is compiled to work with GD Lib.
36 ///// START OF EXAMPLE.PHP /////
40 require "class.graphics.inc";
52 In your html file you set it up as:
54 <img src="example.php" border="1" />
57 You can supply extra parameters to display(). Ex. $pg->display("test.png") will save the image to a file.
58 Ex. $pg->display("", true) will paint a border around the image. It might be suitable if you choose to save to
59 file for later presentation.
61 ///// END OF EXAMPLE.PHP /////
65 Here is a list of all parameters you may set:
67 title => Title of the graphic
68 axis_x => Name of values from Axis X
69 axis_y => Name of values from Axis Y
70 graphic_1 => Name of Graphic_1 (only shown if you are gonna cross data from 2 different graphics)
71 graphic_2 => Name of Graphic_2 (same comment of above)
73 type => Type of graphic (values 1 to 6)
74 1 => Vertical bars (default)
81 skin => Skin of the graphic (values 1 to 3)
86 credits => Only if you want to show my credits in the image. :)
87 0 => doesn't show (default)
90 x[0] => Name of the first parameter in Axis X
91 x[1] => Name of the second parameter in Axis X
94 y[0] => Value from "graphic_1" relative for "x[0]"
95 y[1] => Value from "graphic_1" relative for "x[1]"
98 z[0] => Value from "graphic_2" relative for "x[0]"
99 z[1] => Value from "graphic_2" relative for "x[1]"
103 NOTE: You can't cross data between graphics if you use "pie" or "donut" graphic. Values for "z"
104 won't be considerated.
106 That's all! Hope you make a good use of it!
107 It would be nice to receive feedback from others users. All comments are welcome!
140 var $total_parameters;
143 var $biggest_parameter;
144 var $available_types;
147 var $h3d = 15; // 3D height
148 var $built_in = true;
153 $this->x = $this->y = $this->z = array();
155 $this->biggest_x = NULL;
156 $this->biggest_y = NULL;
157 $this->alternate_x = false;
158 $this->graphic_2_exists = false;
159 $this->total_parameters = 0;
160 $this->sum_total = 1;
161 $this->latin_notation = false;
165 function display($save="", $border=false)
167 $this->legend_exists = (preg_match("/(5|6)/", $this->type)) ? true : false;
168 $this->biggest_graphic_name = (strlen($this->graphic_1) > strlen($this->graphic_2)) ? $this->graphic_1 : $this->graphic_2;
169 $this->height_title = (!empty($this->title)) ? ($this->string_height($this->tsize) + 15) : 0;
170 $this->space_between_bars = ($this->type == 1) ? 40 : 30;
171 $this->space_between_dots = 40;
172 $this->higher_value = 0;
173 $this->higher_value_str = 0;
177 $this->graphic_area_width = 0;
178 $this->graphic_area_height = 0;
179 $this->graphic_area_x1 = 30;
180 $this->graphic_area_y1 = 20 + $this->height_title;
181 $this->graphic_area_x2 = $this->graphic_area_x1 + $this->graphic_area_width;
182 $this->graphic_area_y2 = $this->graphic_area_y1 + $this->graphic_area_height;
184 if (count($this->z) && (preg_match("/(1|2|3|4)/", $this->type)))
185 $this->graphic_2_exists = true;
186 $this->total_parameters = count($this->x);
187 for ($i = 0; $i < $this->total_parameters; $i++)
189 if (strlen($this->x[$i]) > strlen($this->biggest_x))
190 $this->biggest_x = $this->x[$i];
191 if ($this->y[$i] > $this->biggest_y)
192 $this->biggest_y = number_format(round($this->y[$i], 1), 1, ".", "");
193 if ($this->graphic_2_exists)
195 if (isset($this->z[$i]) && $this->z[$i] > $this->biggest_y)
196 $this->biggest_y = number_format(round($this->z[$i], 1), 1, ".", "");
200 if (($this->graphic_2_exists == true) && ((!empty($this->graphic_1)) || (!empty($this->graphic_2))))
202 $this->legend_exists = true;
205 $this->sum_total = array_sum($this->y);
206 $this->space_between_bars += ($this->graphic_2_exists == true) ? 10 : 0;
208 $this->calculate_higher_value();
209 $this->calculate_width();
210 $this->calculate_height();
212 $this->create_graphic($save, $border);
215 function create_graphic($save="", $border=false)
218 $this->img = imagecreatetruecolor($this->width, $this->height);
220 $this->load_color_palette();
223 imagefill($this->img, 0, 0, $this->color['background']);
224 //imagefilledrectangle($this->img, 0, 0, $this->width, $this->height, $this->color['background']);
226 // imagerectangle($this->img, 0, 0, $this->width-1, $this->height-1, imagecolorallocate($this->img, 100, 150, 200));
229 if (!empty($this->title))
231 $center = ($this->width / 2) - ($this->string_width($this->title, $this->tsize) / 2);
232 $this->_imagestring($this->img, $this->tsize, $center, 10, $this->title, $this->color['title']);
236 // Draw axis and background lines for "vertical bars", "dots" and "lines"
237 if (preg_match("/^(1|3|4)$/", $this->type))
239 if ($this->legend_exists == true)
241 $this->draw_legend();
244 $higher_value_y = $this->graphic_area_y1 + (0.1 * $this->graphic_area_height);
245 $higher_value_size = 0.9 * $this->graphic_area_height;
247 $less = 7 * strlen($this->higher_value_str);
249 imageline($this->img, $this->graphic_area_x1, $higher_value_y, $this->graphic_area_x2, $higher_value_y, $this->color['bg_lines']);
250 $this->_imagestring($this->img, $this->size, ($this->graphic_area_x1-$less-7), ($higher_value_y-7), $this->higher_value_str, $this->color['axis_values']);
252 for ($i = 1; $i < 10; $i++)
254 $dec_y = $i * ($higher_value_size / 10);
255 $x1 = $this->graphic_area_x1;
256 $y1 = $this->graphic_area_y2 - $dec_y;
257 $x2 = $this->graphic_area_x2;
258 $y2 = $this->graphic_area_y2 - $dec_y;
260 imageline($this->img, $x1, $y1, $x2, $y2, $this->color['bg_lines']);
263 $value = $this->number_formated($this->higher_value * $i / 10, $this->dec1);
264 $less = 7 * strlen($value);
265 $this->_imagestring($this->img, $this->size, ($x1-$less-7), ($y2-7), $value, $this->color['axis_values']);
270 $this->_imagestring($this->img, $this->size, $this->graphic_area_x2+10, $this->graphic_area_y2+3, $this->axis_x, $this->color['title']);
271 imageline($this->img, $this->graphic_area_x1, $this->graphic_area_y2, $this->graphic_area_x2, $this->graphic_area_y2, $this->color['axis_line']);
273 $this->_imagestring($this->img, $this->size, 20, $this->graphic_area_y1-20, $this->axis_y, $this->color['title']);
274 imageline($this->img, $this->graphic_area_x1, $this->graphic_area_y1, $this->graphic_area_x1, $this->graphic_area_y2, $this->color['axis_line']);
278 // Draw axis and background lines for "horizontal bars"
279 else if ($this->type == 2)
281 if ($this->legend_exists == true)
283 $this->draw_legend();
286 $higher_value_x = $this->graphic_area_x2 - (0.2 * $this->graphic_area_width);
287 $higher_value_size = 0.8 * $this->graphic_area_width;
289 imageline($this->img, ($this->graphic_area_x1+$higher_value_size), $this->graphic_area_y1, ($this->graphic_area_x1+$higher_value_size), $this->graphic_area_y2, $this->color['bg_lines']);
290 $this->_imagestring($this->img, $this->size, (($this->graphic_area_x1+$higher_value_size) - ($this->string_width($this->higher_value, $this->size)/2)), ($this->graphic_area_y2+2), $this->higher_value_str, $this->color['axis_values']);
292 for ($i = 1, $alt = 15; $i < 10; $i++)
294 $dec_x = number_format(round($i * ($higher_value_size / 10), 1), 1, ".", "");
296 imageline($this->img, ($this->graphic_area_x1+$dec_x), $this->graphic_area_y1, ($this->graphic_area_x1+$dec_x), $this->graphic_area_y2, $this->color['bg_lines']);
299 $alt = (strlen($this->biggest_y) > 4 && $alt != 15) ? 15 : 2;
300 $value = $this->number_formated($this->higher_value * $i / 10, $this->dec1);
301 $this->_imagestring($this->img, $this->size, (($this->graphic_area_x1+$dec_x) - ($this->string_width($this->higher_value, $this->size)/2)), ($this->graphic_area_y2), $value, $this->color['axis_values'], $alt);
306 $this->_imagestring($this->img, $this->size, ($this->graphic_area_x2+10), ($this->graphic_area_y2+3), $this->axis_y, $this->color['title']);
307 imageline($this->img, $this->graphic_area_x1, $this->graphic_area_y2, $this->graphic_area_x2, $this->graphic_area_y2, $this->color['axis_line']);
309 $this->_imagestring($this->img, $this->size, 20, ($this->graphic_area_y1-20), $this->axis_x, $this->color['title']);
310 imageline($this->img, $this->graphic_area_x1, $this->graphic_area_y1, $this->graphic_area_x1, $this->graphic_area_y2, $this->color['axis_line']);
314 // Draw legend box for "pie" or "donut"
315 else if (preg_match("/^(5|6)$/", $this->type))
317 $this->draw_legend();
323 * Draw graphic: VERTICAL BARS
325 if ($this->type == 1)
328 $x = $this->graphic_area_x1 + 20;
330 foreach ($this->x as $i => $parameter)
332 if (isset($this->z[$i]))
334 $size = round($this->z[$i] * $higher_value_size / $this->higher_value);
336 $y1 = ($this->graphic_area_y2 - $size) + 1;
338 $y2 = $this->graphic_area_y2 - 1;
339 imageline($this->img, ($x1+1), ($y1-1), $x2, ($y1-1), $this->color['bars_2_shadow']);
340 imageline($this->img, ($x2+1), ($y1-1), ($x2+1), $y2, $this->color['bars_2_shadow']);
341 imageline($this->img, ($x2+2), ($y1-1), ($x2+2), $y2, $this->color['bars_2_shadow']);
342 imagefilledrectangle($this->img, $x1, $y1, $x2, $y2, $this->color['bars_2']);
345 $size = round($this->y[$i] * $higher_value_size / $this->higher_value);
346 $alt = (($num % 2 == 0) && (strlen($this->biggest_x) > 5)) ? 15 : 2;
348 $y1 = ($this->graphic_area_y2 - $size) + 1;
350 $y2 = $this->graphic_area_y2 - 1;
351 $x += $this->space_between_bars;
354 imageline($this->img, ($x1+1), ($y1-1), $x2, ($y1-1), $this->color['bars_shadow']);
355 imageline($this->img, ($x2+1), ($y1-1), ($x2+1), $y2, $this->color['bars_shadow']);
356 imageline($this->img, ($x2+2), ($y1-1), ($x2+2), $y2, $this->color['bars_shadow']);
357 imagefilledrectangle($this->img, $x1, $y1, $x2, $y2, $this->color['bars']);
358 $this->_imagestring($this->img, $this->size, ((($x1+$x2)/2) - (strlen($parameter)*7/2)), ($y2+2), $parameter, $this->color['axis_values'], $alt);
364 * Draw graphic: HORIZONTAL BARS
366 else if ($this->type == 2)
370 foreach ($this->x as $i => $parameter)
372 if (isset($this->z[$i]))
374 $size = round($this->z[$i] * $higher_value_size / $this->higher_value);
375 $x1 = $this->graphic_area_x1 + 1;
376 $y1 = $this->graphic_area_y1 + $y + 10;
379 imageline($this->img, ($x1), ($y2+1), $x2, ($y2+1), $this->color['bars_2_shadow']);
380 imageline($this->img, ($x1), ($y2+2), $x2, ($y2+2), $this->color['bars_2_shadow']);
381 imageline($this->img, ($x2+1), ($y1+1), ($x2+1), ($y2+2), $this->color['bars_2_shadow']);
382 imagefilledrectangle($this->img, $x1, $y1, $x2, $y2, $this->color['bars_2']);
383 $this->_imagestring($this->img, $this->size, ($x2+7), ($y1+7), $this->number_formated($this->z[$i], $this->dec2), $this->color['bars_2_shadow']);
386 $size = round(($this->y[$i] / $this->higher_value) * $higher_value_size);
387 $x1 = $this->graphic_area_x1 + 1;
388 $y1 = $this->graphic_area_y1 + $y;
391 $y += $this->space_between_bars;
393 imageline($this->img, ($x1), ($y2+1), $x2, ($y2+1), $this->color['bars_shadow']);
394 imageline($this->img, ($x1), ($y2+2), $x2, ($y2+2), $this->color['bars_shadow']);
395 imageline($this->img, ($x2+1), ($y1+1), ($x2+1), ($y2+2), $this->color['bars_shadow']);
396 imagefilledrectangle($this->img, $x1, $y1, $x2, $y2, $this->color['bars']);
397 $this->_imagestring($this->img, $this->size, ($x2+7), ($y1+2), $this->number_formated($this->y[$i], $this->dec2), $this->color['bars_shadow']);
399 //$this->_imagestring($this->img, $this->size, ($x1 - ((strlen($parameter)*7)+7)), ($y1+2), $parameter, $this->color['axis_values']);
400 $this->_imagestring($this->img, $this->size, 30, ($y1+2), $parameter, $this->color['axis_values']);
406 * Draw graphic: DOTS or LINE
408 else if (preg_match("/^(3|4)$/", $this->type))
411 $x[0] = $this->graphic_area_x1+1;
413 foreach ($this->x as $i => $parameter)
415 if ($this->graphic_2_exists == true)
417 $size = round($this->z[$i] * $higher_value_size / $this->higher_value);
418 $z[$i] = $this->graphic_area_y2 - $size;
421 $alt = (($i % 2 == 0) && (strlen($this->biggest_x) > 5)) ? 15 : 2;
422 $size = round($this->y[$i] * $higher_value_size / $this->higher_value);
423 $y[$i] = $this->graphic_area_y2 - $size;
427 imageline($this->img, $x[$i], ($this->graphic_area_y1+10), $x[$i], ($this->graphic_area_y2-1), $this->color['bg_lines']);
429 $this->_imagestring($this->img, $this->size, ($x[$i] - (strlen($parameter)*7/2 )), ($this->graphic_area_y2+2), $parameter, $this->color['axis_values'], $alt);
431 $x[$i+1] = $x[$i] + 40;
434 foreach ($x as $i => $value_x)
436 if ($this->graphic_2_exists == true)
441 if ($this->type == 4)
443 imageline($this->img, $x[$i], $z[$i], $x[$i+1], $z[$i+1], $this->color['line_2']);
444 imageline($this->img, $x[$i], ($z[$i]+1), $x[$i+1], ($z[$i+1]+1), $this->color['line_2']);
446 imagefilledrectangle($this->img, $x[$i]-1, $z[$i]-1, $x[$i]+2, $z[$i]+2, $this->color['line_2']);
450 imagefilledrectangle($this->img, $x[$i-1]-1, $z[$i-1]-1, $x[$i-1]+2, $z[$i-1]+2, $this->color['line_2']);
459 if ($this->type == 4)
461 imageline($this->img, $x[$i], $y[$i], $x[$i+1], $y[$i+1], $this->color['line']);
462 imageline($this->img, $x[$i], ($y[$i]+1), $x[$i+1], ($y[$i+1]+1), $this->color['line']);
464 imagefilledrectangle($this->img, $x[$i]-1, $y[$i]-1, $x[$i]+2, $y[$i]+2, $this->color['line']);
468 imagefilledrectangle($this->img, $x[$i-1]-1, $y[$i-1]-1, $x[$i-1]+2, $y[$i-1]+2, $this->color['line']);
477 * Draw graphic: PIE or DONUT
479 else if (preg_match("/^(5|6)$/", $this->type))
481 $center_x = ($this->graphic_area_x1 + $this->graphic_area_x2) / 2;
482 $center_y = ($this->graphic_area_y1 + $this->graphic_area_y2) / 2;
483 $width = $this->graphic_area_width;
484 $height = $this->graphic_area_height;
488 foreach ($this->x as $i => $parameter)
490 $size = $this->y[$i] * 360 / $this->sum_total;
497 if ($this->type == 5)
500 foreach ($sizes as $i => $size)
503 while ($num_color > 7)
507 $color = 'arc_' . $num_color . '_shadow';
509 for ($i = $this->h3d; $i >= 0; $i--)
511 //imagearc($this->img, $center_x, ($center_y+$i), $width, $height, $start, ($start+$size), $this->color[$color]);
512 imagefilledarc($this->img, $center_x, ($center_y+$i), $width, $height, $start, ($start+$size), $this->color[$color], IMG_ARC_NOFILL);
520 foreach ($sizes as $i => $size)
523 while ($num_color > 7)
527 $color = 'arc_' . $num_color;
529 imagefilledarc($this->img, $center_x, $center_y, ($width+2), ($height+2), $start, ($start+$size), $this->color[$color], IMG_ARC_EDGED);
535 else if ($this->type == 6)
537 foreach ($sizes as $i => $size)
540 while ($num_color > 7)
544 $color = 'arc_' . $num_color;
545 $color_shadow = 'arc_' . $num_color . '_shadow';
546 imagefilledarc($this->img, $center_x, $center_y, $width, $height, $start, ($start+$size), $this->color[$color], IMG_ARC_PIE);
549 imagefilledarc($this->img, $center_x, $center_y, 100, 100, 0, 360, $this->color['background'], IMG_ARC_PIE);
550 imagearc($this->img, $center_x, $center_y, 100, 100, 0, 360, $this->color['bg_legend']);
551 imagearc($this->img, $center_x, $center_y, ($width+1), ($height+1), 0, 360, $this->color['bg_legend']);
556 if ($this->credits == true)
558 $this->draw_credits();
561 imagepng($this->img, $save);
564 header('Content-type: image/png');
565 imagepng($this->img);
567 imagedestroy($this->img);
570 function calculate_width()
576 $this->legend_box_width = ($this->legend_exists == true) ? ($this->string_width($this->biggest_graphic_name, $this->tsize) + 25) : 0;
577 $this->graphic_area_width = ($this->space_between_bars * $this->total_parameters) + 30;
578 $this->graphic_area_x1 += $this->string_width(($this->higher_value_str), $this->size);
579 $this->width += $this->graphic_area_x1 + 20;
580 $this->width += ($this->legend_exists == true) ? 50 : ((7 * strlen($this->axis_x)) + 10);
585 $this->legend_box_width = ($this->legend_exists == true) ? ($this->string_width($this->biggest_graphic_name, $this->size) + 25) : 0;
586 $this->graphic_area_width = ($this->string_width($this->higher_value_str, $this->size) > 50) ? (5 * ($this->string_width($this->higher_value_str, $this->size)) * 0.85) : 200;
587 $this->graphic_area_x1 += 7 * strlen($this->biggest_x);
588 $this->width += ($this->legend_exists == true) ? 60 : ((7 * strlen($this->axis_y)) + 30);
589 $this->width += $this->graphic_area_x1;
594 $this->legend_box_width = ($this->legend_exists == true) ? ($this->string_width($this->biggest_graphic_name, $this->size) + 25) : 0;
595 $this->graphic_area_width = ($this->space_between_dots * $this->total_parameters) - 10;
596 $this->graphic_area_x1 += $this->string_width(($this->higher_value_str), $this->size);
597 $this->width += $this->graphic_area_x1 + 20;
598 $this->width += ($this->legend_exists == true) ? 40 : ((7 * strlen($this->axis_x)) + 10);
603 $this->legend_box_width = ($this->legend_exists == true) ? ($this->string_width($this->biggest_graphic_name, $this->size) + 25) : 0;
604 $this->graphic_area_width = ($this->space_between_dots * $this->total_parameters) - 10;
605 $this->graphic_area_x1 += $this->string_width(($this->higher_value_str), $this->size);
606 $this->width += $this->graphic_area_x1 + 20;
607 $this->width += ($this->legend_exists == true) ? 40 : ((7 * strlen($this->axis_x)) + 10);
612 $this->legend_box_width = $this->string_width($this->biggest_x, $this->size) + 85;
613 $this->graphic_area_width = 200;
619 $this->legend_box_width = $this->string_width($this->biggest_x, $this->size) + 85;
620 $this->graphic_area_width = 180;
625 $this->width += $this->graphic_area_width;
626 $this->width += $this->legend_box_width;
629 $this->graphic_area_x2 = $this->graphic_area_x1 + $this->graphic_area_width;
630 $this->legend_box_x1 = $this->graphic_area_x2 + 40;
631 $this->legend_box_x2 = $this->legend_box_x1 + $this->legend_box_width;
634 function calculate_height()
640 $this->legend_box_height = ($this->graphic_2_exists == true) ? 40 : 0;
641 $this->graphic_area_height = 150;
647 $this->legend_box_height = ($this->graphic_2_exists == true) ? 40 : 0;
648 $this->graphic_area_height = ($this->space_between_bars * $this->total_parameters) + 10;
654 $this->legend_box_height = ($this->graphic_2_exists == true) ? 40 : 0;
655 $this->graphic_area_height = 150;
661 $this->legend_box_height = ($this->graphic_2_exists == true) ? 40 : 0;
662 $this->graphic_area_height = 150;
668 $this->legend_box_height = (!empty($this->axis_x)) ? 30 : 5;
669 $this->legend_box_height += (14 * $this->total_parameters);
670 $this->graphic_area_height = 150;
676 $this->legend_box_height = (!empty($this->axis_x)) ? 30 : 5;
677 $this->legend_box_height += (14 * $this->total_parameters);
678 $this->graphic_area_height = 180;
683 $this->height += $this->height_title;
684 $this->height += ($this->legend_box_height > $this->graphic_area_height) ? ($this->legend_box_height - $this->graphic_area_height) : 0;
685 $this->height += $this->graphic_area_height;
687 $this->graphic_area_y2 = $this->graphic_area_y1 + $this->graphic_area_height;
688 $this->legend_box_y1 = $this->graphic_area_y1 + 10;
689 $this->legend_box_y2 = $this->legend_box_y1 + $this->legend_box_height;
692 function draw_legend()
694 $x1 = $this->legend_box_x1;
695 $y1 = $this->legend_box_y1;
696 $x2 = $this->legend_box_x2;
697 $y2 = $this->legend_box_y2;
699 imagefilledrectangle($this->img, $x1, $y1, $x2, $y2, $this->color['bg_legend']);
705 // Draw legend values for VERTICAL BARS, HORIZONTAL BARS, DOTS and LINES
706 if (preg_match("/^(1|2|3|4)$/", $this->type))
708 $color_1 = (preg_match("/^(1|2)$/", $this->type)) ? $this->color['bars'] : $this->color['line'];
709 $color_2 = (preg_match("/^(1|2)$/", $this->type)) ? $this->color['bars_2'] : $this->color['line_2'];
711 imagefilledrectangle($this->img, $x, $y, ($x+10), ($y+10), $color_1);
712 imagerectangle($this->img, $x, $y, ($x+10), ($y+10), $this->color['title']);
713 $this->_imagestring($this->img, $this->size, ($x+15), ($y-2), $this->graphic_1, $this->color['axis_values']);
715 imagefilledrectangle($this->img, $x, $y, ($x+10), ($y+10), $color_2);
716 imagerectangle($this->img, $x, $y, ($x+10), ($y+10), $this->color['title']);
717 $this->_imagestring($this->img, $this->size, ($x+15), ($y-2), $this->graphic_2, $this->color['axis_values']);
720 // Draw legend values for PIE or DONUT
721 else if (preg_match("/^(5|6)$/", $this->type))
723 if (!empty($this->axis_x))
725 $this->_imagestring($this->img, $this->size, ((($x1+$x2)/2) - (strlen($this->axis_x)*7/2)), $y, $this->axis_x, $this->color['title']);
731 foreach ($this->x as $i => $parameter)
737 $color = 'arc_' . $num;
739 $percent = number_format(round(($this->y[$i] * 100 / $this->sum_total), 2), 2, ".", "") . ' %';
740 $less = (strlen($percent) * 7);
744 imageline($this->img, ($x1+15), ($y-2), ($x2-5), ($y-2), $this->color['bg_lines']);
746 imagefilledrectangle($this->img, $x, $y, ($x+10), ($y+10), $this->color[$color]);
747 imagerectangle($this->img, $x, $y, ($x+10), ($y+10), $this->color['title']);
748 $this->_imagestring($this->img, $this->size, ($x+15), ($y-2), $parameter, $this->color['axis_values']);
749 $this->_imagestring($this->img, $this->size, ($x2-$less), ($y-2), $percent, $this->color['axis_values']);
757 function string_width($string, $size)
759 $single_width = $size + 4;
760 return $single_width * strlen($string);
763 function string_height($size)
780 function calculate_higher_value()
782 $digits = strlen(round($this->biggest_y));
783 $interval = pow(10, ($digits-1));
784 $this->higher_value = round(($this->biggest_y - ($this->biggest_y % $interval) + $interval), 1);
785 $this->higher_value_str = $this->number_formated($this->higher_value, $this->dec1);
788 function number_formated($number, $dec_size = 1)
790 if ($this->latin_notation == true)
791 return number_format(round($number, $dec_size), $dec_size, ",", ".");
792 return number_format(round($number, $dec_size), $dec_size, ".", ",");
795 function number_float($number)
797 if ($this->latin_notation == true)
798 $number = str_replace(".", "", $number);
799 return (float)str_replace(",", "", $number);
803 function draw_credits()
805 $this->_imagestring($this->img, $this->size - 2, ($this->width-120), ($this->height-10), "Powered by Carlos Reche", $this->color['title']);
809 function load_color_palette()
815 //$this->color['title'] = imagecolorallocate($this->img, 50, 50, 50);
816 $this->color['title'] = imagecolorallocate($this->img, 40, 70, 130);
817 //$this->color['background'] = imagecolorallocate($this->img, 238, 255, 238);
818 $this->color['background'] = imagecolorallocate($this->img, 255, 255, 255);
819 $this->color['axis_values'] = imagecolorallocate($this->img, 50, 50, 50);
820 $this->color['axis_line'] = imagecolorallocate($this->img, 100, 100, 100);
821 $this->color['bg_lines'] = imagecolorallocate($this->img, 220, 220, 220);
822 $this->color['bg_legend'] = imagecolorallocate($this->img, 255, 255, 255);
824 if (preg_match("/^(1|2)$/", $this->type))
826 $this->color['bars'] = imagecolorallocate($this->img, 100, 150, 200);
827 $this->color['bars_shadow'] = imagecolorallocate($this->img, 50, 100, 150);
828 $this->color['bars_2'] = imagecolorallocate($this->img, 200, 250, 150);
829 $this->color['bars_2_shadow'] = imagecolorallocate($this->img, 120, 170, 70);
831 else if (preg_match("/^(3|4)$/", $this->type))
833 $this->color['line'] = imagecolorallocate($this->img, 100, 150, 200);
834 $this->color['line_2'] = imagecolorallocate($this->img, 230, 100, 100);
836 else if (preg_match("/^(5|6)$/", $this->type))
838 $this->color['arc_1'] = imagecolorallocate($this->img, 255, 150, 0);
839 $this->color['arc_2'] = imagecolorallocate($this->img, 150, 0, 255);
840 $this->color['arc_3'] = imagecolorallocate($this->img, 0, 255, 255);
841 $this->color['arc_4'] = imagecolorallocate($this->img, 255, 0, 0);
842 $this->color['arc_5'] = imagecolorallocate($this->img, 0, 255, 0);
843 $this->color['arc_6'] = imagecolorallocate($this->img, 0, 0, 255);
844 $this->color['arc_7'] = imagecolorallocate($this->img, 255, 255, 0);
845 $this->color['arc_1_shadow'] = imagecolorallocate($this->img, 127, 75, 0);
846 $this->color['arc_2_shadow'] = imagecolorallocate($this->img, 75, 0, 127);
847 $this->color['arc_3_shadow'] = imagecolorallocate($this->img, 0, 127, 127);
848 $this->color['arc_4_shadow'] = imagecolorallocate($this->img, 127, 0, 0);
849 $this->color['arc_5_shadow'] = imagecolorallocate($this->img, 0, 127, 0);
850 $this->color['arc_6_shadow'] = imagecolorallocate($this->img, 0, 0, 127);
851 $this->color['arc_7_shadow'] = imagecolorallocate($this->img, 127, 127, 0);
857 $this->color['title'] = imagecolorallocate($this->img, 255, 255, 255);
858 $this->color['background'] = imagecolorallocate($this->img, 0, 0, 0);
859 $this->color['axis_values'] = imagecolorallocate($this->img, 0, 230, 0);
860 $this->color['axis_line'] = imagecolorallocate($this->img, 0, 200, 0);
861 $this->color['bg_lines'] = imagecolorallocate($this->img, 100, 100, 100);
862 $this->color['bg_legend'] = imagecolorallocate($this->img, 70, 70, 70);
864 if (preg_match("/^(1|2)$/", $this->type))
866 $this->color['bars'] = imagecolorallocate($this->img, 50, 200, 50);
867 $this->color['bars_shadow'] = imagecolorallocate($this->img, 0, 150, 0);
868 $this->color['bars_2'] = imagecolorallocate($this->img, 255, 255, 255);
869 $this->color['bars_2_shadow'] = imagecolorallocate($this->img, 220, 220, 220);
871 else if (preg_match("/^(3|4)$/", $this->type))
873 $this->color['line'] = imagecolorallocate($this->img, 220, 220, 220);
874 $this->color['line_2'] = imagecolorallocate($this->img, 0, 180, 0);
876 else if (preg_match("/^(5|6)$/", $this->type))
878 $this->color['arc_1'] = imagecolorallocate($this->img, 255, 255, 255);
879 $this->color['arc_2'] = imagecolorallocate($this->img, 200, 220, 200);
880 $this->color['arc_3'] = imagecolorallocate($this->img, 160, 200, 160);
881 $this->color['arc_4'] = imagecolorallocate($this->img, 135, 180, 135);
882 $this->color['arc_5'] = imagecolorallocate($this->img, 115, 160, 115);
883 $this->color['arc_6'] = imagecolorallocate($this->img, 100, 140, 100);
884 $this->color['arc_7'] = imagecolorallocate($this->img, 90, 120, 90);
885 $this->color['arc_1_shadow'] = imagecolorallocate($this->img, 127, 127, 127);
886 $this->color['arc_2_shadow'] = imagecolorallocate($this->img, 100, 110, 100);
887 $this->color['arc_3_shadow'] = imagecolorallocate($this->img, 80, 100, 80);
888 $this->color['arc_4_shadow'] = imagecolorallocate($this->img, 67, 90, 67);
889 $this->color['arc_5_shadow'] = imagecolorallocate($this->img, 57, 80, 57);
890 $this->color['arc_6_shadow'] = imagecolorallocate($this->img, 50, 70, 50);
891 $this->color['arc_7_shadow'] = imagecolorallocate($this->img, 45, 60, 45);
898 $this->color['title'] = imagecolorallocate($this->img, 250, 50, 50);
899 //$this->color['background'] = imagecolorallocate($this->img, 250, 250, 220);
900 $this->color['background'] = imagecolorallocate($this->img, 255, 255, 255);
901 $this->color['axis_values'] = imagecolorallocate($this->img, 50, 150, 50);
902 $this->color['axis_line'] = imagecolorallocate($this->img, 50, 100, 50);
903 $this->color['bg_lines'] = imagecolorallocate($this->img, 200, 224, 180);
904 //$this->color['bg_legend'] = imagecolorallocate($this->img, 230, 230, 200);
905 $this->color['bg_legend'] = imagecolorallocate($this->img, 255, 255, 255);
907 if (preg_match("/^(1|2)$/", $this->type))
909 $this->color['bars'] = imagecolorallocate($this->img, 255, 170, 80);
910 $this->color['bars_shadow'] = imagecolorallocate($this->img, 200, 120, 30);
911 $this->color['bars_2'] = imagecolorallocate($this->img, 250, 230, 80);
912 $this->color['bars_2_shadow'] = imagecolorallocate($this->img, 180, 150, 0);
914 else if (preg_match("/^(3|4)$/", $this->type))
916 $this->color['line'] = imagecolorallocate($this->img, 230, 100, 0);
917 $this->color['line_2'] = imagecolorallocate($this->img, 220, 200, 50);
919 else if (preg_match("/^(5|6)$/", $this->type))
921 $this->color['arc_1'] = imagecolorallocate($this->img, 100, 150, 200);
922 $this->color['arc_2'] = imagecolorallocate($this->img, 200, 250, 150);
923 $this->color['arc_3'] = imagecolorallocate($this->img, 250, 200, 150);
924 $this->color['arc_4'] = imagecolorallocate($this->img, 250, 150, 150);
925 $this->color['arc_5'] = imagecolorallocate($this->img, 250, 250, 150);
926 $this->color['arc_6'] = imagecolorallocate($this->img, 230, 180, 250);
927 $this->color['arc_7'] = imagecolorallocate($this->img, 200, 200, 150);
928 $this->color['arc_1_shadow'] = imagecolorallocate($this->img, 50, 75, 100);
929 $this->color['arc_2_shadow'] = imagecolorallocate($this->img, 100, 125, 75);
930 $this->color['arc_3_shadow'] = imagecolorallocate($this->img, 125, 100, 75);
931 $this->color['arc_4_shadow'] = imagecolorallocate($this->img, 125, 75, 75);
932 $this->color['arc_5_shadow'] = imagecolorallocate($this->img, 125, 125, 75);
933 $this->color['arc_6_shadow'] = imagecolorallocate($this->img, 115, 90, 125);
934 $this->color['arc_7_shadow'] = imagecolorallocate($this->img, 100, 100, 75);
941 function _imagestring($img, $size, $x, $y, $string, $col, $alt=0)
943 if ($alt && strlen($string) > 12)
944 $string = substr($string, 0, 12);
947 imagestring($img, $size, $x, $y + $alt, $string, $col);
966 imagettftext($img, $size, $angle, $x, $y + $alt, $col, $this->fontfile, $string);