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;
154 $this->x = $this->y = $this->z = array();
156 $this->biggest_x = NULL;
157 $this->biggest_y = NULL;
158 $this->alternate_x = false;
159 $this->graphic_2_exists = false;
160 $this->total_parameters = 0;
161 $this->sum_total = 1;
162 $this->latin_notation = false;
166 function display($save="", $border=false)
168 $this->legend_exists = (preg_match("/(5|6)/", $this->type)) ? true : false;
169 $this->biggest_graphic_name = (strlen($this->graphic_1) > strlen($this->graphic_2)) ? $this->graphic_1 : $this->graphic_2;
170 $this->height_title = (!empty($this->title)) ? ($this->string_height($this->tsize) + 15) : 0;
171 $this->space_between_bars = ($this->type == 1) ? 40 : 30;
172 $this->space_between_dots = 40;
173 $this->higher_value = 0;
174 $this->higher_value_str = 0;
178 $this->graphic_area_width = 0;
179 $this->graphic_area_height = 0;
180 $this->graphic_area_x1 = 30;
181 $this->graphic_area_y1 = 20 + $this->height_title;
182 $this->graphic_area_x2 = $this->graphic_area_x1 + $this->graphic_area_width;
183 $this->graphic_area_y2 = $this->graphic_area_y1 + $this->graphic_area_height;
185 if (count($this->z) && (preg_match("/(1|2|3|4)/", $this->type)))
186 $this->graphic_2_exists = true;
187 $this->total_parameters = count($this->x);
188 for ($i = 0; $i < $this->total_parameters; $i++)
190 if (strlen($this->x[$i]) > strlen($this->biggest_x))
191 $this->biggest_x = $this->x[$i];
192 if ($this->y[$i] > $this->biggest_y)
193 $this->biggest_y = number_format(round($this->y[$i], 1), 1, ".", "");
194 if ($this->graphic_2_exists)
196 if (isset($this->z[$i]) && $this->z[$i] > $this->biggest_y)
197 $this->biggest_y = number_format(round($this->z[$i], 1), 1, ".", "");
201 if (($this->graphic_2_exists == true) && ((!empty($this->graphic_1)) || (!empty($this->graphic_2))))
203 $this->legend_exists = true;
206 $this->sum_total = array_sum($this->y);
207 if ($this->sum_total == 0)
208 $this->sum_total = 1;
209 $this->space_between_bars += ($this->graphic_2_exists == true) ? 10 : 0;
211 $this->calculate_higher_value();
212 $this->calculate_width();
213 $this->calculate_height();
215 $this->create_graphic($save, $border);
218 function create_graphic($save="", $border=false)
221 $this->img = imagecreatetruecolor($this->width, $this->height);
223 $this->load_color_palette();
226 imagefill($this->img, 0, 0, $this->color['background']);
227 //imagefilledrectangle($this->img, 0, 0, $this->width, $this->height, $this->color['background']);
229 // imagerectangle($this->img, 0, 0, $this->width-1, $this->height-1, imagecolorallocate($this->img, 100, 150, 200));
232 if (!empty($this->title))
234 $center = ($this->width / 2) - ($this->string_width($this->title, $this->tsize) / 2);
235 $this->_imagestring($this->img, $this->tsize, $center, 10, $this->title, $this->color['title']);
239 // Draw axis and background lines for "vertical bars", "dots" and "lines"
240 if (preg_match("/^(1|3|4)$/", $this->type))
242 if ($this->legend_exists == true)
244 $this->draw_legend();
247 $higher_value_y = $this->graphic_area_y1 + (0.1 * $this->graphic_area_height);
248 $higher_value_size = 0.9 * $this->graphic_area_height;
250 $less = 7 * strlen($this->higher_value_str);
252 imageline($this->img, $this->graphic_area_x1, $higher_value_y, $this->graphic_area_x2, $higher_value_y, $this->color['bg_lines']);
253 $this->_imagestring($this->img, $this->size, ($this->graphic_area_x1-$less-7), ($higher_value_y-7), $this->higher_value_str, $this->color['axis_values']);
255 for ($i = 1; $i < 10; $i++)
257 $dec_y = $i * ($higher_value_size / 10);
258 $x1 = $this->graphic_area_x1;
259 $y1 = $this->graphic_area_y2 - $dec_y;
260 $x2 = $this->graphic_area_x2;
261 $y2 = $this->graphic_area_y2 - $dec_y;
263 imageline($this->img, $x1, $y1, $x2, $y2, $this->color['bg_lines']);
266 $value = $this->number_formated($this->higher_value * $i / 10, $this->dec1);
267 $less = 7 * strlen($value);
268 $this->_imagestring($this->img, $this->size, ($x1-$less-7), ($y2-7), $value, $this->color['axis_values']);
273 $this->_imagestring($this->img, $this->size, $this->graphic_area_x2+10, $this->graphic_area_y2+3, $this->axis_x, $this->color['title']);
274 imageline($this->img, $this->graphic_area_x1, $this->graphic_area_y2, $this->graphic_area_x2, $this->graphic_area_y2, $this->color['axis_line']);
276 $this->_imagestring($this->img, $this->size, 20, $this->graphic_area_y1-20, $this->axis_y, $this->color['title']);
277 imageline($this->img, $this->graphic_area_x1, $this->graphic_area_y1, $this->graphic_area_x1, $this->graphic_area_y2, $this->color['axis_line']);
281 // Draw axis and background lines for "horizontal bars"
282 else if ($this->type == 2)
284 if ($this->legend_exists == true)
286 $this->draw_legend();
289 $higher_value_x = $this->graphic_area_x2 - (0.2 * $this->graphic_area_width);
290 $higher_value_size = 0.8 * $this->graphic_area_width;
292 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']);
293 $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']);
295 for ($i = 1, $alt = 15; $i < 10; $i++)
297 $dec_x = number_format(round($i * ($higher_value_size / 10), 1), 1, ".", "");
299 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']);
302 $alt = (strlen($this->biggest_y) > 4 && $alt != 15) ? 15 : 2;
303 $value = $this->number_formated($this->higher_value * $i / 10, $this->dec1);
304 $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);
309 $this->_imagestring($this->img, $this->size, ($this->graphic_area_x2+10), ($this->graphic_area_y2+3), $this->axis_y, $this->color['title']);
310 imageline($this->img, $this->graphic_area_x1, $this->graphic_area_y2, $this->graphic_area_x2, $this->graphic_area_y2, $this->color['axis_line']);
312 $this->_imagestring($this->img, $this->size, 20, ($this->graphic_area_y1-20), $this->axis_x, $this->color['title']);
313 imageline($this->img, $this->graphic_area_x1, $this->graphic_area_y1, $this->graphic_area_x1, $this->graphic_area_y2, $this->color['axis_line']);
317 // Draw legend box for "pie" or "donut"
318 else if (preg_match("/^(5|6)$/", $this->type))
320 $this->draw_legend();
326 * Draw graphic: VERTICAL BARS
328 if ($this->type == 1)
331 $x = $this->graphic_area_x1 + 20;
333 foreach ($this->x as $i => $parameter)
335 if (isset($this->z[$i]))
337 $size = round($this->z[$i] * $higher_value_size / $this->higher_value);
339 $y1 = ($this->graphic_area_y2 - $size) + 1;
341 $y2 = $this->graphic_area_y2 - 1;
342 imageline($this->img, ($x1+1), ($y1-1), $x2, ($y1-1), $this->color['bars_2_shadow']);
343 imageline($this->img, ($x2+1), ($y1-1), ($x2+1), $y2, $this->color['bars_2_shadow']);
344 imageline($this->img, ($x2+2), ($y1-1), ($x2+2), $y2, $this->color['bars_2_shadow']);
345 imagefilledrectangle($this->img, $x1, $y1, $x2, $y2, $this->color['bars_2']);
348 $size = round($this->y[$i] * $higher_value_size / $this->higher_value);
349 $alt = (($num % 2 == 0) && (strlen($this->biggest_x) > 5)) ? 15 : 2;
351 $y1 = ($this->graphic_area_y2 - $size) + 1;
353 $y2 = $this->graphic_area_y2 - 1;
354 $x += $this->space_between_bars;
357 imageline($this->img, ($x1+1), ($y1-1), $x2, ($y1-1), $this->color['bars_shadow']);
358 imageline($this->img, ($x2+1), ($y1-1), ($x2+1), $y2, $this->color['bars_shadow']);
359 imageline($this->img, ($x2+2), ($y1-1), ($x2+2), $y2, $this->color['bars_shadow']);
360 imagefilledrectangle($this->img, $x1, $y1, $x2, $y2, $this->color['bars']);
361 $this->_imagestring($this->img, $this->size, ((($x1+$x2)/2) - (strlen($parameter)*7/2)), ($y2+2), $parameter, $this->color['axis_values'], $alt);
367 * Draw graphic: HORIZONTAL BARS
369 else if ($this->type == 2)
373 foreach ($this->x as $i => $parameter)
375 if (isset($this->z[$i]))
377 $size = round($this->z[$i] * $higher_value_size / $this->higher_value);
378 $x1 = $this->graphic_area_x1 + 1;
379 $y1 = $this->graphic_area_y1 + $y + 10;
382 imageline($this->img, ($x1), ($y2+1), $x2, ($y2+1), $this->color['bars_2_shadow']);
383 imageline($this->img, ($x1), ($y2+2), $x2, ($y2+2), $this->color['bars_2_shadow']);
384 imageline($this->img, ($x2+1), ($y1+1), ($x2+1), ($y2+2), $this->color['bars_2_shadow']);
385 imagefilledrectangle($this->img, $x1, $y1, $x2, $y2, $this->color['bars_2']);
386 $this->_imagestring($this->img, $this->size, ($x2+7), ($y1+7), $this->number_formated($this->z[$i], $this->dec2), $this->color['bars_2_shadow']);
389 $size = round(($this->y[$i] / $this->higher_value) * $higher_value_size);
390 $x1 = $this->graphic_area_x1 + 1;
391 $y1 = $this->graphic_area_y1 + $y;
394 $y += $this->space_between_bars;
396 imageline($this->img, ($x1), ($y2+1), $x2, ($y2+1), $this->color['bars_shadow']);
397 imageline($this->img, ($x1), ($y2+2), $x2, ($y2+2), $this->color['bars_shadow']);
398 imageline($this->img, ($x2+1), ($y1+1), ($x2+1), ($y2+2), $this->color['bars_shadow']);
399 imagefilledrectangle($this->img, $x1, $y1, $x2, $y2, $this->color['bars']);
400 $this->_imagestring($this->img, $this->size, ($x2+7), ($y1+2), $this->number_formated($this->y[$i], $this->dec2), $this->color['bars_shadow']);
402 //$this->_imagestring($this->img, $this->size, ($x1 - ((strlen($parameter)*7)+7)), ($y1+2), $parameter, $this->color['axis_values']);
403 $this->_imagestring($this->img, $this->size, 30, ($y1+2), $parameter, $this->color['axis_values']);
409 * Draw graphic: DOTS or LINE
411 else if (preg_match("/^(3|4)$/", $this->type))
414 $x[0] = $this->graphic_area_x1+1;
416 foreach ($this->x as $i => $parameter)
418 if ($this->graphic_2_exists == true)
420 $size = round($this->z[$i] * $higher_value_size / $this->higher_value);
421 $z[$i] = $this->graphic_area_y2 - $size;
424 $alt = (($i % 2 == 0) && (strlen($this->biggest_x) > 5)) ? 15 : 2;
425 $size = round($this->y[$i] * $higher_value_size / $this->higher_value);
426 $y[$i] = $this->graphic_area_y2 - $size;
430 imageline($this->img, $x[$i], ($this->graphic_area_y1+10), $x[$i], ($this->graphic_area_y2-1), $this->color['bg_lines']);
432 $this->_imagestring($this->img, $this->size, ($x[$i] - (strlen($parameter)*7/2 )), ($this->graphic_area_y2+2), $parameter, $this->color['axis_values'], $alt);
434 $x[$i+1] = $x[$i] + 40;
437 foreach ($x as $i => $value_x)
439 if ($this->graphic_2_exists == true)
444 if ($this->type == 4)
446 imageline($this->img, $x[$i], $z[$i], $x[$i+1], $z[$i+1], $this->color['line_2']);
447 imageline($this->img, $x[$i], ($z[$i]+1), $x[$i+1], ($z[$i+1]+1), $this->color['line_2']);
449 imagefilledrectangle($this->img, $x[$i]-1, $z[$i]-1, $x[$i]+2, $z[$i]+2, $this->color['line_2']);
453 imagefilledrectangle($this->img, $x[$i-1]-1, $z[$i-1]-1, $x[$i-1]+2, $z[$i-1]+2, $this->color['line_2']);
462 if ($this->type == 4)
464 imageline($this->img, $x[$i], $y[$i], $x[$i+1], $y[$i+1], $this->color['line']);
465 imageline($this->img, $x[$i], ($y[$i]+1), $x[$i+1], ($y[$i+1]+1), $this->color['line']);
467 imagefilledrectangle($this->img, $x[$i]-1, $y[$i]-1, $x[$i]+2, $y[$i]+2, $this->color['line']);
471 imagefilledrectangle($this->img, $x[$i-1]-1, $y[$i-1]-1, $x[$i-1]+2, $y[$i-1]+2, $this->color['line']);
480 * Draw graphic: PIE or DONUT
482 else if (preg_match("/^(5|6)$/", $this->type))
484 $center_x = ($this->graphic_area_x1 + $this->graphic_area_x2) / 2;
485 $center_y = ($this->graphic_area_y1 + $this->graphic_area_y2) / 2;
486 $width = $this->graphic_area_width;
487 $height = $this->graphic_area_height;
491 foreach ($this->x as $i => $parameter)
493 $size = $this->y[$i] * 360 / $this->sum_total;
500 if ($this->type == 5)
503 foreach ($sizes as $i => $size)
506 while ($num_color > 7)
510 $color = 'arc_' . $num_color . '_shadow';
512 for ($i = $this->h3d; $i >= 0; $i--)
514 //imagearc($this->img, $center_x, ($center_y+$i), $width, $height, $start, ($start+$size), $this->color[$color]);
515 imagefilledarc($this->img, $center_x, ($center_y+$i), $width, $height, $start, ($start+$size), $this->color[$color], IMG_ARC_NOFILL);
523 foreach ($sizes as $i => $size)
526 while ($num_color > 7)
530 $color = 'arc_' . $num_color;
532 imagefilledarc($this->img, $center_x, $center_y, ($width+2), ($height+2), $start, ($start+$size), $this->color[$color], IMG_ARC_EDGED);
538 else if ($this->type == 6)
540 foreach ($sizes as $i => $size)
543 while ($num_color > 7)
547 $color = 'arc_' . $num_color;
548 $color_shadow = 'arc_' . $num_color . '_shadow';
549 imagefilledarc($this->img, $center_x, $center_y, $width, $height, $start, ($start+$size), $this->color[$color], IMG_ARC_PIE);
552 imagefilledarc($this->img, $center_x, $center_y, 100, 100, 0, 360, $this->color['background'], IMG_ARC_PIE);
553 imagearc($this->img, $center_x, $center_y, 100, 100, 0, 360, $this->color['bg_legend']);
554 imagearc($this->img, $center_x, $center_y, ($width+1), ($height+1), 0, 360, $this->color['bg_legend']);
559 if ($this->credits == true)
561 $this->draw_credits();
564 imagepng($this->img, $save);
567 header('Content-type: image/png');
568 imagepng($this->img);
570 imagedestroy($this->img);
573 function calculate_width()
579 $this->legend_box_width = ($this->legend_exists == true) ? ($this->string_width($this->biggest_graphic_name, $this->tsize) + 25) : 0;
580 $this->graphic_area_width = ($this->space_between_bars * $this->total_parameters) + 30;
581 $this->graphic_area_x1 += $this->string_width(($this->higher_value_str), $this->size);
582 $this->width += $this->graphic_area_x1 + 20;
583 $this->width += ($this->legend_exists == true) ? 50 : ((7 * strlen($this->axis_x)) + 10);
588 $this->legend_box_width = ($this->legend_exists == true) ? ($this->string_width($this->biggest_graphic_name, $this->size) + 25) : 0;
589 $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;
590 $this->graphic_area_x1 += 7 * strlen($this->biggest_x);
591 $this->width += ($this->legend_exists == true) ? 60 : ((7 * strlen($this->axis_y)) + 30);
592 $this->width += $this->graphic_area_x1;
597 $this->legend_box_width = ($this->legend_exists == true) ? ($this->string_width($this->biggest_graphic_name, $this->size) + 25) : 0;
598 $this->graphic_area_width = ($this->space_between_dots * $this->total_parameters) - 10;
599 $this->graphic_area_x1 += $this->string_width(($this->higher_value_str), $this->size);
600 $this->width += $this->graphic_area_x1 + 20;
601 $this->width += ($this->legend_exists == true) ? 40 : ((7 * strlen($this->axis_x)) + 10);
606 $this->legend_box_width = ($this->legend_exists == true) ? ($this->string_width($this->biggest_graphic_name, $this->size) + 25) : 0;
607 $this->graphic_area_width = ($this->space_between_dots * $this->total_parameters) - 10;
608 $this->graphic_area_x1 += $this->string_width(($this->higher_value_str), $this->size);
609 $this->width += $this->graphic_area_x1 + 20;
610 $this->width += ($this->legend_exists == true) ? 40 : ((7 * strlen($this->axis_x)) + 10);
615 $this->legend_box_width = $this->string_width($this->biggest_x, $this->size) + 85;
616 $this->graphic_area_width = 200;
622 $this->legend_box_width = $this->string_width($this->biggest_x, $this->size) + 85;
623 $this->graphic_area_width = 180;
628 $this->width += $this->graphic_area_width;
629 $this->width += $this->legend_box_width;
632 $this->graphic_area_x2 = $this->graphic_area_x1 + $this->graphic_area_width;
633 $this->legend_box_x1 = $this->graphic_area_x2 + 40;
634 $this->legend_box_x2 = $this->legend_box_x1 + $this->legend_box_width;
637 function calculate_height()
643 $this->legend_box_height = ($this->graphic_2_exists == true) ? 40 : 0;
644 $this->graphic_area_height = 150;
650 $this->legend_box_height = ($this->graphic_2_exists == true) ? 40 : 0;
651 $this->graphic_area_height = ($this->space_between_bars * $this->total_parameters) + 10;
657 $this->legend_box_height = ($this->graphic_2_exists == true) ? 40 : 0;
658 $this->graphic_area_height = 150;
664 $this->legend_box_height = ($this->graphic_2_exists == true) ? 40 : 0;
665 $this->graphic_area_height = 150;
671 $this->legend_box_height = (!empty($this->axis_x)) ? 30 : 5;
672 $this->legend_box_height += (14 * $this->total_parameters);
673 $this->graphic_area_height = 150;
679 $this->legend_box_height = (!empty($this->axis_x)) ? 30 : 5;
680 $this->legend_box_height += (14 * $this->total_parameters);
681 $this->graphic_area_height = 180;
686 $this->height += $this->height_title;
687 $this->height += ($this->legend_box_height > $this->graphic_area_height) ? ($this->legend_box_height - $this->graphic_area_height) : 0;
688 $this->height += $this->graphic_area_height;
690 $this->graphic_area_y2 = $this->graphic_area_y1 + $this->graphic_area_height;
691 $this->legend_box_y1 = $this->graphic_area_y1 + 10;
692 $this->legend_box_y2 = $this->legend_box_y1 + $this->legend_box_height;
695 function draw_legend()
697 $x1 = $this->legend_box_x1;
698 $y1 = $this->legend_box_y1;
699 $x2 = $this->legend_box_x2;
700 $y2 = $this->legend_box_y2;
702 imagefilledrectangle($this->img, $x1, $y1, $x2, $y2, $this->color['bg_legend']);
708 // Draw legend values for VERTICAL BARS, HORIZONTAL BARS, DOTS and LINES
709 if (preg_match("/^(1|2|3|4)$/", $this->type))
711 $color_1 = (preg_match("/^(1|2)$/", $this->type)) ? $this->color['bars'] : $this->color['line'];
712 $color_2 = (preg_match("/^(1|2)$/", $this->type)) ? $this->color['bars_2'] : $this->color['line_2'];
714 imagefilledrectangle($this->img, $x, $y, ($x+10), ($y+10), $color_1);
715 imagerectangle($this->img, $x, $y, ($x+10), ($y+10), $this->color['title']);
716 $this->_imagestring($this->img, $this->size, ($x+15), ($y-2), $this->graphic_1, $this->color['axis_values']);
718 imagefilledrectangle($this->img, $x, $y, ($x+10), ($y+10), $color_2);
719 imagerectangle($this->img, $x, $y, ($x+10), ($y+10), $this->color['title']);
720 $this->_imagestring($this->img, $this->size, ($x+15), ($y-2), $this->graphic_2, $this->color['axis_values']);
723 // Draw legend values for PIE or DONUT
724 else if (preg_match("/^(5|6)$/", $this->type))
726 if (!empty($this->axis_x))
728 $this->_imagestring($this->img, $this->size, ((($x1+$x2)/2) - (strlen($this->axis_x)*7/2)), $y, $this->axis_x, $this->color['title']);
734 foreach ($this->x as $i => $parameter)
740 $color = 'arc_' . $num;
742 $percent = number_format(round(($this->y[$i] * 100 / $this->sum_total), 2), 2, ".", "") . ' %';
743 $less = (strlen($percent) * 7);
747 imageline($this->img, ($x1+15), ($y-2), ($x2-5), ($y-2), $this->color['bg_lines']);
749 imagefilledrectangle($this->img, $x, $y, ($x+10), ($y+10), $this->color[$color]);
750 imagerectangle($this->img, $x, $y, ($x+10), ($y+10), $this->color['title']);
751 $this->_imagestring($this->img, $this->size, ($x+15), ($y-2), $parameter, $this->color['axis_values']);
752 $this->_imagestring($this->img, $this->size, ($x2-$less), ($y-2), $percent, $this->color['axis_values']);
760 function string_width($string, $size)
762 $single_width = $size + 4;
763 return $single_width * strlen($string);
766 function string_height($size)
783 function calculate_higher_value()
785 $digits = strlen(round($this->biggest_y));
786 $interval = pow(10, ($digits-1));
787 $this->higher_value = round(($this->biggest_y - ($this->biggest_y % $interval) + $interval), 1);
788 $this->higher_value_str = $this->number_formated($this->higher_value, $this->dec1);
791 function number_formated($number, $dec_size = 1)
793 if ($this->latin_notation == true)
794 return number_format(round($number, $dec_size), $dec_size, ",", ".");
795 return number_format(round($number, $dec_size), $dec_size, ".", ",");
798 function number_float($number)
800 if ($this->latin_notation == true)
801 $number = str_replace(".", "", $number);
802 return (float)str_replace(",", "", $number);
806 function draw_credits()
808 $this->_imagestring($this->img, $this->size - 2, ($this->width-120), ($this->height-10), "Powered by Carlos Reche", $this->color['title']);
812 function load_color_palette()
818 //$this->color['title'] = imagecolorallocate($this->img, 50, 50, 50);
819 $this->color['title'] = imagecolorallocate($this->img, 40, 70, 130);
820 //$this->color['background'] = imagecolorallocate($this->img, 238, 255, 238);
821 $this->color['background'] = imagecolorallocate($this->img, 255, 255, 255);
822 $this->color['axis_values'] = imagecolorallocate($this->img, 50, 50, 50);
823 $this->color['axis_line'] = imagecolorallocate($this->img, 100, 100, 100);
824 $this->color['bg_lines'] = imagecolorallocate($this->img, 220, 220, 220);
825 $this->color['bg_legend'] = imagecolorallocate($this->img, 255, 255, 255);
827 if (preg_match("/^(1|2)$/", $this->type))
829 $this->color['bars'] = imagecolorallocate($this->img, 100, 150, 200);
830 $this->color['bars_shadow'] = imagecolorallocate($this->img, 50, 100, 150);
831 $this->color['bars_2'] = imagecolorallocate($this->img, 200, 250, 150);
832 $this->color['bars_2_shadow'] = imagecolorallocate($this->img, 120, 170, 70);
834 else if (preg_match("/^(3|4)$/", $this->type))
836 $this->color['line'] = imagecolorallocate($this->img, 100, 150, 200);
837 $this->color['line_2'] = imagecolorallocate($this->img, 230, 100, 100);
839 else if (preg_match("/^(5|6)$/", $this->type))
841 $this->color['arc_1'] = imagecolorallocate($this->img, 255, 150, 0);
842 $this->color['arc_2'] = imagecolorallocate($this->img, 150, 0, 255);
843 $this->color['arc_3'] = imagecolorallocate($this->img, 0, 255, 255);
844 $this->color['arc_4'] = imagecolorallocate($this->img, 255, 0, 0);
845 $this->color['arc_5'] = imagecolorallocate($this->img, 0, 255, 0);
846 $this->color['arc_6'] = imagecolorallocate($this->img, 0, 0, 255);
847 $this->color['arc_7'] = imagecolorallocate($this->img, 255, 255, 0);
848 $this->color['arc_1_shadow'] = imagecolorallocate($this->img, 127, 75, 0);
849 $this->color['arc_2_shadow'] = imagecolorallocate($this->img, 75, 0, 127);
850 $this->color['arc_3_shadow'] = imagecolorallocate($this->img, 0, 127, 127);
851 $this->color['arc_4_shadow'] = imagecolorallocate($this->img, 127, 0, 0);
852 $this->color['arc_5_shadow'] = imagecolorallocate($this->img, 0, 127, 0);
853 $this->color['arc_6_shadow'] = imagecolorallocate($this->img, 0, 0, 127);
854 $this->color['arc_7_shadow'] = imagecolorallocate($this->img, 127, 127, 0);
860 $this->color['title'] = imagecolorallocate($this->img, 255, 255, 255);
861 $this->color['background'] = imagecolorallocate($this->img, 0, 0, 0);
862 $this->color['axis_values'] = imagecolorallocate($this->img, 0, 230, 0);
863 $this->color['axis_line'] = imagecolorallocate($this->img, 0, 200, 0);
864 $this->color['bg_lines'] = imagecolorallocate($this->img, 100, 100, 100);
865 $this->color['bg_legend'] = imagecolorallocate($this->img, 70, 70, 70);
867 if (preg_match("/^(1|2)$/", $this->type))
869 $this->color['bars'] = imagecolorallocate($this->img, 50, 200, 50);
870 $this->color['bars_shadow'] = imagecolorallocate($this->img, 0, 150, 0);
871 $this->color['bars_2'] = imagecolorallocate($this->img, 255, 255, 255);
872 $this->color['bars_2_shadow'] = imagecolorallocate($this->img, 220, 220, 220);
874 else if (preg_match("/^(3|4)$/", $this->type))
876 $this->color['line'] = imagecolorallocate($this->img, 220, 220, 220);
877 $this->color['line_2'] = imagecolorallocate($this->img, 0, 180, 0);
879 else if (preg_match("/^(5|6)$/", $this->type))
881 $this->color['arc_1'] = imagecolorallocate($this->img, 255, 255, 255);
882 $this->color['arc_2'] = imagecolorallocate($this->img, 200, 220, 200);
883 $this->color['arc_3'] = imagecolorallocate($this->img, 160, 200, 160);
884 $this->color['arc_4'] = imagecolorallocate($this->img, 135, 180, 135);
885 $this->color['arc_5'] = imagecolorallocate($this->img, 115, 160, 115);
886 $this->color['arc_6'] = imagecolorallocate($this->img, 100, 140, 100);
887 $this->color['arc_7'] = imagecolorallocate($this->img, 90, 120, 90);
888 $this->color['arc_1_shadow'] = imagecolorallocate($this->img, 127, 127, 127);
889 $this->color['arc_2_shadow'] = imagecolorallocate($this->img, 100, 110, 100);
890 $this->color['arc_3_shadow'] = imagecolorallocate($this->img, 80, 100, 80);
891 $this->color['arc_4_shadow'] = imagecolorallocate($this->img, 67, 90, 67);
892 $this->color['arc_5_shadow'] = imagecolorallocate($this->img, 57, 80, 57);
893 $this->color['arc_6_shadow'] = imagecolorallocate($this->img, 50, 70, 50);
894 $this->color['arc_7_shadow'] = imagecolorallocate($this->img, 45, 60, 45);
901 $this->color['title'] = imagecolorallocate($this->img, 250, 50, 50);
902 //$this->color['background'] = imagecolorallocate($this->img, 250, 250, 220);
903 $this->color['background'] = imagecolorallocate($this->img, 255, 255, 255);
904 $this->color['axis_values'] = imagecolorallocate($this->img, 50, 150, 50);
905 $this->color['axis_line'] = imagecolorallocate($this->img, 50, 100, 50);
906 $this->color['bg_lines'] = imagecolorallocate($this->img, 200, 224, 180);
907 //$this->color['bg_legend'] = imagecolorallocate($this->img, 230, 230, 200);
908 $this->color['bg_legend'] = imagecolorallocate($this->img, 255, 255, 255);
910 if (preg_match("/^(1|2)$/", $this->type))
912 $this->color['bars'] = imagecolorallocate($this->img, 255, 170, 80);
913 $this->color['bars_shadow'] = imagecolorallocate($this->img, 200, 120, 30);
914 $this->color['bars_2'] = imagecolorallocate($this->img, 250, 230, 80);
915 $this->color['bars_2_shadow'] = imagecolorallocate($this->img, 180, 150, 0);
917 else if (preg_match("/^(3|4)$/", $this->type))
919 $this->color['line'] = imagecolorallocate($this->img, 230, 100, 0);
920 $this->color['line_2'] = imagecolorallocate($this->img, 220, 200, 50);
922 else if (preg_match("/^(5|6)$/", $this->type))
924 $this->color['arc_1'] = imagecolorallocate($this->img, 100, 150, 200);
925 $this->color['arc_2'] = imagecolorallocate($this->img, 200, 250, 150);
926 $this->color['arc_3'] = imagecolorallocate($this->img, 250, 200, 150);
927 $this->color['arc_4'] = imagecolorallocate($this->img, 250, 150, 150);
928 $this->color['arc_5'] = imagecolorallocate($this->img, 250, 250, 150);
929 $this->color['arc_6'] = imagecolorallocate($this->img, 230, 180, 250);
930 $this->color['arc_7'] = imagecolorallocate($this->img, 200, 200, 150);
931 $this->color['arc_1_shadow'] = imagecolorallocate($this->img, 50, 75, 100);
932 $this->color['arc_2_shadow'] = imagecolorallocate($this->img, 100, 125, 75);
933 $this->color['arc_3_shadow'] = imagecolorallocate($this->img, 125, 100, 75);
934 $this->color['arc_4_shadow'] = imagecolorallocate($this->img, 125, 75, 75);
935 $this->color['arc_5_shadow'] = imagecolorallocate($this->img, 125, 125, 75);
936 $this->color['arc_6_shadow'] = imagecolorallocate($this->img, 115, 90, 125);
937 $this->color['arc_7_shadow'] = imagecolorallocate($this->img, 100, 100, 75);
944 function _imagestring($img, $size, $x, $y, $string, $col, $alt=0)
946 if ($alt && strlen($string) > 12)
947 $string = substr($string, 0, 12);
949 $encoding = $_SESSION['language']->encoding;
950 if ($encoding != 'UTF-8') {
951 if (function_exists('iconv'))
952 $string = iconv($encoding, 'UTF-8', $string);
954 $string = mb_convert_encoding($string, 'UTF-8', $encoding);
959 imagestring($img, $size, $x, $y + $alt, $string, $col);
979 imagettftext($img, $size, $angle, $x, $y + $alt, $col, $this->fontfile, $string);