function line($x_start, $y_start, $x_end, $y_end, $type, $brush_type, $brush_size, $colour, $offset) { //dbug("drawing line of type: $type, at offset: $offset"); $u_start = $x_start + $offset; $v_start = $this->calculated['boundary_box']['bottom'] - $y_start + $offset; $u_end = $x_end + $offset; $v_end = $this->calculated['boundary_box']['bottom'] - $y_end + $offset; switch ($type) { case 'brush': $this->draw_brush_line($u_start, $v_start, $u_end, $v_end, $brush_size, $brush_type, $colour); break; case 'line': ImageLine($this->image, $u_start, $v_start, $u_end, $v_end, $this->colour[$colour]); break; case 'dash': ImageDashedLine($this->image, $u_start, $v_start, $u_end, $v_end, $this->colour[$colour]); break; } }
##### Определение цветов $white = imagecolorallocate($im, 255, 255, 255); $red = imagecolorallocate($im, 255, 0, 0); $green = imagecolorallocate($im, 0, 170, 0); $blue = imagecolorallocate($im, 0, 0, 255); $black = imagecolorallocate($im, 0, 0, 0); $grey = imagecolorallocate($im, 192, 192, 192); for ($i = 0; $i <= 24; $i++) { #Сетка - вертикальные линии ImageDashedLine($im, 80 + $i * 15, 20, 80 + $i * 15, 120, $grey); ImageLine($im, 80 + $i * 15, 118, 80 + $i * 15, 122, $black); ImageString($im, 1, 78 + $i * 15, 123, $i, $black); } for ($i = 1; $i <= 4; $i++) { #Сетка - горизонтальные линии ImageDashedLine($im, 80, 20 + $i * 20, 440, 20 + $i * 20, $grey); ImageLine($im, 78, 20 + $i * 20, 82, 20 + $i * 20, $black); } ###### Вывод надписей ###### $m100 = round($max, 0) . " kb/s"; $m80 = round($max * 0.55, 0) . " kb/s"; $m60 = round($max * 0.2, 0) . " kb/s"; $m40 = round($max * 0.074, 0) . " kb/s"; $m20 = round($max * 0.027, 0) . " kb/s"; ImageString($im, 1, 40, 15, $m100, $black); ImageString($im, 1, 40, 35, $m80, $black); ImageString($im, 1, 40, 55, $m60, $black); ImageString($im, 1, 40, 75, $m40, $black); ImageString($im, 1, 40, 95, $m20, $black); ImageRectangle($im, 80, 20, 440, 120, $black); ImageString($im, 2, 220, 5, $ip, $black);
function Line($x1, $y1, $x2, $y2, $linestyle = 'solid') { if ($x1 >= 0 && $x1 <= $this->width && $y1 >= 0 && $y1 <= $this->height && $x2 >= 0 && $x2 <= $this->width && $y2 >= 0 && $y2 <= $this->height) { if ($linestyle == 'solid') { ImageLine($this->hImage, $x1, $y1, $x2, $y2, $this->hColor); } else { ImageDashedLine($this->hImage, $x1, $y1, $x2, $y2, $this->hColor); } $this->cur_x = $x2; $this->cur_y = $y2; return true; } return false; }
function DashedLine($image, $x1, $y1, $x2, $y2, $color) { ImageDashedLine($image, $x1, $y1, $x2, $y2, $color); }
$y1 = $gbot - $a; $y2 = $gbot - $b; $CC = $dv[$C][$x]; //error_log("y1 = $y1, y2 = $y2, x1 = $x1, x2 = $x2, ($CC)"); if ($CC == '!') { ImageLine($png, $x1, $y1, $x2, $y2, $col[$Y1]); } else { if ($dv[$C][$x] == '"') { ImageLine($png, $x1, $y1, $x2, $y2, $red); } else { if (isalnum($dv[$C][$x]) && $R >= 0) { $y3 = (int) ($gbot - $dv[$R][$x] * $ymult); // the next two lines center the code and // stop the bird dropping just short of it. $lodrop = $y2 + 8 > $gbot ? $gbot : $y2 + 8; ImageDashedLine($png, $x2, $lodrop, $x2, $y3, $red); if ($dv[$C][$x] != '#') { ImageString($png, 2, $x2 - 2, $y2, $dv[$C][$x], $blue); } } } } if ($cnv == 1) { error_log("cnv ({$Y1}:{$x} = {$dv[$Y1]}[{$x}])"); } } if ($Y2 >= 0) { $labbot = $gbot + 45; $labrow = 0; $lab = 170; ImageLine($png, $lab, $labbot, $lab + 25, $labbot, $col[$Y1]);
function MyDrawLine($image, $x1, $y1, $x2, $y2, $color, $drawtype) { if ($drawtype == MAP_LINK_DRAWTYPE_BOLD_LINE) { imageline($image, $x1, $y1, $x2, $y2, $color); if (abs($x1 - $x2) < abs($y1 - $y2)) { $x1++; $x2++; } else { $y1++; $y2++; } imageline($image, $x1, $y1, $x2, $y2, $color); } else { if ($drawtype == MAP_LINK_DRAWTYPE_DASHED_LINE) { if (function_exists('imagesetstyle')) { /* Use imagesetstyle+imageline instead of bugged ImageDashedLine */ $style = array($color, $color, $color, $color, IMG_COLOR_TRANSPARENT, IMG_COLOR_TRANSPARENT, IMG_COLOR_TRANSPARENT, IMG_COLOR_TRANSPARENT); imagesetstyle($image, $style); imageline($image, $x1, $y1, $x2, $y2, IMG_COLOR_STYLED); } else { ImageDashedLine($image, $x1, $y1, $x2, $y2, $color); } } else { if ($drawtype == MAP_LINK_DRAWTYPE_DOT && function_exists('imagesetstyle')) { $style = array($color, IMG_COLOR_TRANSPARENT, IMG_COLOR_TRANSPARENT, IMG_COLOR_TRANSPARENT); imagesetstyle($image, $style); imageline($image, $x1, $y1, $x2, $y2, IMG_COLOR_STYLED); } else { imageline($image, $x1, $y1, $x2, $y2, $color); } } } }
function bar($var) { $values = explode(",", $var["values"]); $labels = explode(",", $var["labels"]); $count = count($values); $padding = 10; $height = $count * 20 + 20; $width = 703; $max = $values[0]; $min = $values[0]; $text_width = 0; $text_width_array = array(); while (list($key, $item) = each($values)) { $max = max($max, $item); $min = min($min, $item); $text_box = ImageTTFBBox(10, 0, "simsun.ttc", $labels[$key]); $text_width_value = $text_box[2] - $text_box[0]; array_push($text_width_array, $text_width_value); $text_width = max($text_width, $text_width_value); } $max_width = $width - $text_width - $padding * 2; if ($max < 0) { $max = 0; } if ($min > 0) { $min = 0; } $m_l = floor(log(abs($min), 10)); //数量级 $m_r = floor(log($max, 10)); $m = max($m_l, $m_r); $k_l = ceil(abs($min) / pow(10, $m)); //倍数 $k_r = ceil($max / pow(10, $m)); $k = $k_l + $k_r; $a = $max_width / ($k * pow(10, $m)); //系数 $o = $k_l * pow(10, $m) * $a; //原点位置 //图片初始化 $img = imagecreate($max_width + $text_width + $padding * 2, $height + $padding * 2); $bg = ImageColorAllocate($img, 255, 255, 255); ImageColorTransparent($img, $bg); $white = ImageColorAllocate($img, 255, 255, 255); $black = ImageColorAllocate($img, 0, 0, 0); $gray = ImageColorAllocate($img, 230, 230, 230); //绘制正文信息 reset($values); while (list($i, $item) = each($values)) { getColor(($i + 1) / $count, $r, $g, $b); ImageLine($img, 0, $i * 20 + $padding + 17, $max_width + $text_width + $padding * 2, $i * 20 + $padding + 17, $gray); ImageFilledRectangle($img, $o, $i * 20 + $padding + 19, $o + $text_width + $padding * 2, $i * 20 + $padding + 35, ImageColorAllocate($img, $r * 0.7, $g * 0.7, $b * 0.7)); ImageFilledRectangle($img, $o, $i * 20 + $padding + 20, $o + $text_width + $padding * 2, $i * 20 + $padding + 34, ImageColorAllocate($img, $r, $g, $b)); if ($item < 0) { $x = $o + $item * $a; ImageFilledRectangle($img, $o, $i * 20 + $padding + 19, $x, $i * 20 + $padding + 35, ImageColorAllocate($img, $r * 0.7, $g * 0.7, $b * 0.7)); ImageFilledRectangle($img, $o, $i * 20 + $padding + 20, $x + 1, $i * 20 + $padding + 34, ImageColorAllocate($img, $r, $g, $b)); } else { $x = $o + $item * $a; ImageFilledRectangle($img, $o + $text_width + $padding * 2, $i * 20 + $padding + 19, $x + $text_width + $padding * 2, $i * 20 + $padding + 35, ImageColorAllocate($img, $r * 0.7, $g * 0.7, $b * 0.7)); ImageFilledRectangle($img, $o + $text_width + $padding * 2, $i * 20 + $padding + 20, $x + $text_width + $padding * 2 - 1, $i * 20 + $padding + 34, ImageColorAllocate($img, $r, $g, $b)); } $offset = ($text_width - $text_width_array[$i]) / 2; ImageTtfText($img, 10, 0, $o + $padding + $offset, $i * 20 + $padding + 32, $black, "simsun.ttc", $labels[$i]); } //绘制参考线 ImageTtfText($img, 10, 0, $o + 2 + $text_width + $padding * 2, $padding + 10, $black, "cour.ttf", "0"); ImageLine($img, $o, $padding, $o, $padding + $height, $black); ImageLine($img, $o + $text_width + $padding * 2, $padding, $o + $text_width + $padding * 2, $padding + $height, $black); ImageTtfText($img, 10, 0, $o, $padding + 10, $black, "cour.ttf", "(0x" . pow(10, $m) . ")"); if ($k > 10) { for ($i = 1; $i < $k_l + 1; $i++) { if ($i % 2 == 0 && $i != $k_l) { $x = $i * $a * pow(10, $m); ImageTtfText($img, 10, 0, $o - $x + 2, $padding + 10, $black, "cour.ttf", "-" . $i * pow(10, $m)); ImageLine($img, $o - $x, $padding, $o - $x, $padding + $height, $black); } } for ($i = 1; $i < $k_r + 1; $i++) { if ($i % 2 == 0 & $i != $k_r) { $x = $i * $a * pow(10, $m); ImageTtfText($img, 10, 0, $o + $x + 2 + $text_width + $padding * 2, $padding + 10, $black, "cour.ttf", $i * pow(10, $m)); ImageLine($img, $o + $x + $text_width + $padding * 2, $padding, $o + $x + $text_width + $padding * 2, $padding + $height, $black); } } } else { if ($k > 4) { for ($i = 1; $i < $k_l + 1; $i++) { if ($i != $k_l) { $x = $i * $a * pow(10, $m); ImageTtfText($img, 10, 0, $o - $x + 2, $padding + 10, $black, "cour.ttf", "-" . $i); ImageLine($img, $o - $x, $padding, $o - $x, $padding + $height, $black); } } for ($i = 1; $i < $k_r + 1; $i++) { if ($i != $k_r) { $x = $i * $a * pow(10, $m); ImageTtfText($img, 10, 0, $o + $x + 2 + $text_width + $padding * 2, $padding + 10, $black, "cour.ttf", $i); ImageLine($img, $o + $x + $text_width + $padding * 2, $padding, $o + $x + $text_width + $padding * 2, $padding + $height, $black); } } } else { if ($k > 2) { for ($i = 1; $i < $k_l + 1; $i++) { $x = ($i - 0.5) * $a * pow(10, $m); ImageTtfText($img, 10, 0, $o - $x + 2, $padding + 10, $black, "cour.ttf", "-" . ($i - 0.5) * pow(10, $m)); ImageDashedLine($img, $o - $x, $padding, $o - $x, $padding + $height, $black); if ($i != $k_l) { $x = $i * $a * pow(10, $m); ImageTtfText($img, 10, 0, $o - $x + 2, $padding + 10, $black, "cour.ttf", "-" . $i * pow(10, $m)); ImageLine($img, $o - $x, $padding, $o - $x, $padding + $height, $black); } } for ($i = 1; $i < $k_r + 1; $i++) { $x = ($i - 0.5) * $a * pow(10, $m); ImageTtfText($img, 10, 0, $o + $x + 2 + $text_width + $padding * 2, $padding + 10, $black, "cour.ttf", ($i - 0.5) * pow(10, $m)); ImageDashedLine($img, $o + $x + $text_width + $padding * 2, $padding, $o + $x + $text_width + $padding * 2, $padding + $height, $black); if ($i != $k_r) { $x = $i * $a * pow(10, $m); ImageTtfText($img, 10, 0, $o + $x + 2 + $text_width + $padding * 2, $padding + 10, $black, "cour.ttf", $i * pow(10, $m)); ImageLine($img, $o + $x + $text_width + $padding * 2, $padding, $o + $x + $text_width + $padding * 2, $padding + $height, $black); } } } else { for ($i = 1; $i < $k_l + 1; $i++) { $x = ($i - 0.5) * $a * pow(10, $m); ImageTtfText($img, 10, 0, $o - $x + 2, $padding + 10, $black, "cour.ttf", "-" . ($i - 0.5) * pow(10, $m)); ImageLine($img, $o - $x, $padding, $o - $x, $padding + $height, $black); $x = ($i - 0.25) * $a * pow(10, $m); ImageTtfText($img, 10, 0, $o - $x + 2, $padding + 10, $black, "cour.ttf", "-" . ($i - 0.25) * pow(10, $m)); ImageDashedLine($img, $o - $x, $padding, $o - $x, $padding + $height, $black); $x = ($i - 0.75) * $a * pow(10, $m); ImageTtfText($img, 10, 0, $o - $x + 2, $padding + 10, $black, "cour.ttf", "-" . ($i - 0.75) * pow(10, $m)); ImageDashedLine($img, $o - $x, $padding, $o - $x, $padding + $height, $black); } for ($i = 1; $i < $k_r + 1; $i++) { $x = ($i - 0.5) * $a * pow(10, $m); ImageTtfText($img, 10, 0, $o + $x + 2 + $text_width + $padding * 2, $padding + 10, $black, "cour.ttf", ($i - 0.5) * pow(10, $m)); ImageLine($img, $o + $x + $text_width + $padding * 2, $padding, $o + $x + $text_width + $padding * 2, $padding + $height, $black); $x = ($i - 0.25) * $a * pow(10, $m); ImageTtfText($img, 10, 0, $o + $x + 2 + $text_width + $padding * 2, $padding + 10, $black, "cour.ttf", ($i - 0.25) * pow(10, $m)); ImageDashedLine($img, $o + $x + $text_width + $padding * 2, $padding, $o + $x + $text_width + $padding * 2, $padding + $height, $black); $x = ($i - 0.75) * $a * pow(10, $m); ImageTtfText($img, 10, 0, $o + $x + 2 + $text_width + $padding * 2, $padding + 10, $black, "cour.ttf", ($i - 0.75) * pow(10, $m)); ImageDashedLine($img, $o + $x + $text_width + $padding * 2, $padding, $o + $x + $text_width + $padding * 2, $padding + $height, $black); } } } } ImagePNG($img); ImageDestroy($img); }
<?php require_once $_SERVER["DOCUMENT_ROOT"] . "/bitrix/modules/main/tools.php"; include $_SERVER["DOCUMENT_ROOT"] . "/bitrix/modules/statistic/colors.php"; require_once $_SERVER["DOCUMENT_ROOT"] . "/bitrix/modules/main/img.php"; // init image $ImageHandle = CreateImageHandle(45, 2); if (isset($_REQUEST["color"])) { $dec = ReColor($color); } else { $dec = 0; } if (is_array($dec)) { $color = ImageColorAllocate($ImageHandle, $dec[0], $dec[1], $dec[2]); } else { $color = ImageColorAllocate($ImageHandle, 0, 0, 0); } if (isset($_REQUEST["dash"]) && $_REQUEST["dash"] == "Y") { ImageDashedLine($ImageHandle, 3, 0, 40, 0, $color); ImageDashedLine($ImageHandle, 3, 1, 40, 1, $color); } else { ImageLine($ImageHandle, 3, 0, 40, 0, $color); ImageLine($ImageHandle, 3, 1, 40, 1, $color); } ShowImageHeader($ImageHandle);