public function generate()
 {
     $color = $this->hex2dec($this->color);
     $color[] = 0;
     $tmp = imagecreatetruecolor($this->size, $this->size);
     imagefill($tmp, 0, 0, imagecolorallocatealpha($tmp, 0, 0, 0, 127));
     imageSmoothArc($tmp, $this->size / 2, $this->size / 2, $this->size * 0.7, $this->size * 0.7, $color, 0, M_PI * 2);
     return $tmp;
 }
 public function generate()
 {
     $color = $this->hex2dec($this->color);
     $color[] = 0;
     $tmp = imagecreatetruecolor($this->size, $this->size);
     imagefill($tmp, 0, 0, imagecolorallocatealpha($tmp, $this->bgColorRGB[0], $this->bgColorRGB[1], $this->bgColorRGB[2], 127));
     imageSmoothArc($tmp, $this->size / 2, $this->size / 2, $this->size * 0.7, $this->size * 0.7, $color, 0, M_PI * 2);
     $frame = $this->generateMarkerFrame($tmp, false);
     return $frame;
 }
 public function generate()
 {
     $color = $this->hex2dec($this->color);
     $color[] = 0;
     $bgColorRGB = $this->bgColorRGB;
     $bgColorRGB[] = 0;
     $tmp = imagecreatetruecolor($this->size * 7.5, $this->size * 7.5);
     imagefill($tmp, 0, 0, imagecolorallocatealpha($tmp, 0, 0, 0, 127));
     imageSmoothArc($tmp, $this->size * 7.5 / 2, $this->size * 7.5 / 2, $this->size * 6.8, $this->size * 6.8, $color, 0, M_PI * 2);
     imageSmoothArc($tmp, $this->size * 7.5 / 2, $this->size * 7.5 / 2, $this->size * 7.5 * 0.7, $this->size * 7.5 * 0.7, $bgColorRGB, 0, M_PI * 2);
     return $tmp;
 }
 public function generate()
 {
     $color = $this->hex2dec($this->color);
     $color[] = 0;
     $im = imagecreatetruecolor($this->size * 3.35, $this->size * 3.35);
     imagefill($im, 0, 0, imagecolorallocatealpha($im, $color[0], $color[1], $color[2], 127));
     $dotSize = 1.7;
     $movePerct = 0.5;
     imageSmoothArc($im, $this->size * 3.35 / 2, $this->size * 3.35 / 2 - $this->size * $dotSize * ($movePerct - 0.2), $this->size * $dotSize, $this->size * $dotSize, $color, 0, M_PI * 2);
     imageSmoothArc($im, $this->size * 3.35 / 2 + $this->size * $dotSize * ($movePerct - 0.2), $this->size * 3.35 / 2 + $this->size * $dotSize * ($movePerct - 0.2), $this->size * $dotSize, $this->size * $dotSize, $color, 0, M_PI * 2);
     imageSmoothArc($im, $this->size * 3.35 / 2 - $this->size * $dotSize * ($movePerct - 0.2), $this->size * 3.35 / 2 + $this->size * $dotSize * ($movePerct - 0.2), $this->size * $dotSize, $this->size * $dotSize, $color, 0, M_PI * 2);
     return $im;
 }
Exemplo n.º 5
0
 function DrawImageSmoothArc($im, $xc, $yc, $w, $h, $s, $e, $color, $style = null)
 {
     $tmp = $s;
     $s = (360 - $e) / 180 * M_PI;
     $e = (360 - $tmp) / 180 * M_PI;
     return imageSmoothArc($im, round($xc), round($yc), round($w), round($h), $this->CreateColorForImageSmoothArc($color), $s, $e);
 }
function imageSmoothArc(&$img, $cx, $cy, $w, $h, $color, $start, $stop)
{
    // Originally written from scratch by Ulrich Mierendorff, 06/2006
    // Rewritten and improved, 04/2007, 07/2007
    // compared to old version:
    // + Support for transparency added
    // + Improved quality of edges & antialiasing
    // note: This function does not represent the fastest way to draw elliptical
    // arcs. It was written without reading any papers on that subject. Better
    // algorithms may be twice as fast or even more.
    // what it cannot do: It does not support outlined arcs, only filled
    // Parameters:
    // $cx      - Center of ellipse, X-coord
    // $cy      - Center of ellipse, Y-coord
    // $w       - Width of ellipse ($w >= 2)
    // $h       - Height of ellipse ($h >= 2 )
    // $color   - Color of ellipse as a four component array with RGBA
    // $start   - Starting angle of the arc, no limited range!
    // $stop    - Stop     angle of the arc, no limited range!
    // $start _can_ be greater than $stop!
    // If any value is not in the given range, results are undefined!
    // This script does not use any special algorithms, everything is completely
    // written from scratch; see http://de.wikipedia.org/wiki/Ellipse for formulas.
    while ($start < 0) {
        $start += 2 * M_PI;
    }
    while ($stop < 0) {
        $stop += 2 * M_PI;
    }
    while ($start > 2 * M_PI) {
        $start -= 2 * M_PI;
    }
    while ($stop > 2 * M_PI) {
        $stop -= 2 * M_PI;
    }
    if ($start > $stop) {
        imageSmoothArc($img, $cx, $cy, $w, $h, $color, $start, 2 * M_PI);
        imageSmoothArc($img, $cx, $cy, $w, $h, $color, 0, $stop);
        return;
    }
    $a = 1.0 * round($w / 2);
    $b = 1.0 * round($h / 2);
    $cx = 1.0 * round($cx);
    $cy = 1.0 * round($cy);
    $aaAngle = atan($b * $b / ($a * $a) * tan(0.25 * M_PI));
    $aaAngleX = $a * cos($aaAngle);
    $aaAngleY = $b * sin($aaAngle);
    $a -= 0.5;
    // looks better...
    $b -= 0.5;
    for ($i = 0; $i < 4; $i++) {
        if ($start < ($i + 1) * M_PI / 2) {
            if ($start > $i * M_PI / 2) {
                if ($stop > ($i + 1) * M_PI / 2) {
                    imageSmoothArcDrawSegment($img, $cx, $cy, $a, $b, $aaAngleX, $aaAngleY, $color, $start, ($i + 1) * M_PI / 2, $i);
                } else {
                    imageSmoothArcDrawSegment($img, $cx, $cy, $a, $b, $aaAngleX, $aaAngleY, $color, $start, $stop, $i);
                    break;
                }
            } else {
                if ($stop > ($i + 1) * M_PI / 2) {
                    imageSmoothArcDrawSegment($img, $cx, $cy, $a, $b, $aaAngleX, $aaAngleY, $color, $i * M_PI / 2, ($i + 1) * M_PI / 2, $i);
                } else {
                    imageSmoothArcDrawSegment($img, $cx, $cy, $a, $b, $aaAngleX, $aaAngleY, $color, $i * M_PI / 2, $stop, $i);
                    break;
                }
            }
        }
    }
}
Exemplo n.º 7
0
 }
 /**  Watched status ( DOT or Check Mark ) **/
 imagealphablending($im, true);
 if (INDICATOR == "DOT") {
     // half dot if partially watched
     if ($pos_right) {
         $pos_left = $pos_right;
     } else {
         $pos_left = $img_w - $img_w * $pad_right;
     }
     $pos_left = $pos_left * 1.1;
     if ($progress > 0) {
         imageSmoothArc($im, $pos_left, $dot_center, $dot_size, $dot_size, array(255, 165, 0, 5), 30, M_PI / 2);
     } else {
         if (!isset($_GET['watched']) or $_GET['watched'] == 0) {
             imageSmoothArc($im, $pos_left, $dot_center, $dot_size, $dot_size, array(255, 165, 0, 5), M_PI / 2, 0);
         }
     }
 }
 if (INDICATOR == "CHECK") {
     // mark it if watched
     if (isset($_GET['watched']) and $_GET['watched'] == 1) {
         $overlay = imagecreatefrompng('images/check-mark-512.png');
         // use the last right position if set for the new left
         if ($pos_right) {
             $pos_left = $pos_right;
         } else {
             $pos_left = $img_w - $img_w * $pad_right;
         }
         $pos_right = $pos_left + $check_box_size;
         $right_padding = $check_box_size * $pad_right;
Exemplo n.º 8
0
            $r = $q;
            $g = $v;
            $b = $p;
            break;
        case 2:
            $r = $p;
            $g = $v;
            $b = $t;
            break;
        case 3:
            $r = $p;
            $g = $q;
            $b = $v;
            break;
        case 4:
            $r = $t;
            $g = $p;
            $b = $v;
            break;
        case 5:
            $r = $v;
            $g = $p;
            $b = $q;
            break;
        default:
            break;
    }
    imageSmoothArc($img, 325, 460, 620, 300, array($r * 255, $g * 255, $b * 255, 0), $i * 2 * M_PI / $n, ($i + 1) * 2 * M_PI / $n);
}
header('Content-Type: image/png');
imagePNG($img);
Exemplo n.º 9
0
 /**
  * Show a multi-area chart
  *
  * @param $raw_datas : an array with :
  *    - key 'datas', ex : array( 'test1' => 15, 'test2' => 25)
  *    - key 'unit', ex : '%', 'Kg' (optionnal)
  *    - key 'spline', curves line (boolean - optionnal)
  * @param $title : title of the chart
  * @param $desc : description of the chart (optionnal)
  * @param $show_label : behavior of the graph labels,
  *                      values : 'hover', 'never', 'always' (optionnal)
  * @param $export : keep only svg to export (optionnal)
  * @return nothing
  */
 function showGArea($params)
 {
     global $LANG;
     $criterias = PluginMreportingCommon::initGraphParams($params);
     foreach ($criterias as $key => $val) {
         ${$key} = $val;
     }
     //$rand = $opt['rand'];
     $configs = PluginMreportingConfig::initConfigParams($opt['f_name'], $opt['class']);
     foreach ($configs as $k => $v) {
         ${$k} = $v;
     }
     if (self::DEBUG_GRAPH && isset($raw_datas)) {
         Toolbox::logdebug($raw_datas);
     }
     if (isset($raw_datas['datas'])) {
         $datas = $raw_datas['datas'];
     } else {
         $datas = array();
     }
     $options = array("title" => $title, "desc" => $desc, "randname" => $randname, "export" => $export, "delay" => $delay, "short_classname" => $opt["short_classname"]);
     $this->initGraph($options);
     if (count($datas) <= 0) {
         if ($export != "odtall") {
             echo $LANG['plugin_mreporting']["error"][1];
             $end['opt']["export"] = false;
             $end['opt']["randname"] = false;
             $end['opt']["f_name"] = $opt['f_name'];
             $end['opt']["class"] = $opt['class'];
             PluginMreportingCommon::endGraph($end);
         }
         return false;
     }
     $labels2 = $raw_datas['labels2'];
     $datas = PluginMreportingCommon::compileDatasForUnit($datas, $unit);
     $raw_datas['datas'] = $datas;
     $values = array_values($datas);
     $labels = array_keys($datas);
     $max = 1;
     foreach ($values as $line) {
         foreach ($line as $label2 => $value) {
             if ($value > $max) {
                 $max = $value;
             }
         }
     }
     if ($max == 1 && $unit == '%') {
         $max = 100;
     }
     $nb = count($labels2);
     $width = $this->width;
     $nb_bar = count($datas);
     if ($nb_bar > 1) {
         $percent = 2 * (450 + 18 * $nb_bar) / (18 * $nb_bar * 100);
     } else {
         $percent = 0.2;
     }
     $height = $percent * 450 + 18 * $nb_bar;
     $delta = 450 - $height;
     $height_tot = 450 + $height;
     $width_line = ($width - 45) / $nb;
     $index1 = 0;
     $index3 = 1;
     $step = ceil($nb / 20);
     //create image
     $image = imagecreatetruecolor($width, $height_tot);
     if ($show_graph) {
         //colors
         $palette = self::getPalette($nb_bar);
         $alphapalette = self::getPalette($nb_bar, "50");
         $darkerpalette = self::getDarkerPalette($nb_bar);
         //background
         $bg_color = $this->white;
         imagefilledrectangle($image, 0, 0, $width - 1, $height_tot - 1, $bg_color);
         //draw x-axis grey step line and value ticks
         $xstep = round(($height + $delta + 40) / 13);
         for ($i = 0; $i < 13; $i++) {
             $yaxis = $height_tot - 30 - $xstep * $i;
             //horizontal grey lines
             imageLine($image, 30, $yaxis, 30 + $width_line * ($nb - 1), $yaxis, $this->grey);
             //value ticks
             if ($i * $max / 12 < 10) {
                 $val = round($i * $max / 12, 1);
             } else {
                 $val = round($i * $max / 12);
             }
             $box = @imageTTFBbox($this->fontsize - 1, $this->fontangle, $this->font, $val);
             $textwidth = abs($box[4] - $box[0]);
             imagettftext($image, $this->fontsize - 1, $this->fontangle, 25 - $textwidth, $yaxis + 5, $this->darkgrey, $this->font, $val);
         }
         //draw y-axis vertical grey step line
         for ($i = 0; $i < $nb; $i++) {
             $xaxis = 30 + $width_line * $i;
             imageLine($image, $xaxis, $height - 40, $xaxis, $height_tot, $this->grey);
         }
         //draw y-axis
         imageLine($image, 30, $height - 40, 30, $height_tot - 25, $this->black);
         //draw y-axis
         imageLine($image, 30, $height_tot - 30, $width - 50, $height_tot - 30, $this->black);
         //create border on export
         if ($export) {
             imagerectangle($image, 0, 0, $width - 1, $height_tot - 1, $this->black);
         }
         //on png graph, no way to draw curved polygons, force area reports to be linear
         if ($area) {
             $spline = false;
         }
         //add title on export
         if ($export) {
             imagettftext($image, $this->fontsize + 1, $this->fontangle, 10, 20, $this->black, $this->font, $title);
         }
         //parse datas
         foreach ($datas as $label => $data) {
             $aCoords = array();
             $index2 = 0;
             $old_data = 0;
             //parse line
             foreach ($data as $subdata) {
                 //if first index, continue
                 if ($index2 == 0) {
                     $old_data = $subdata;
                     $index2++;
                     continue;
                 }
                 // determine coords
                 $x1 = $index2 * $width_line - $width_line + 30;
                 $y1 = $height_tot - 30 - $old_data * ($height_tot - $height) / $max;
                 $x2 = $x1 + $width_line;
                 $y2 = $height_tot - 30 - $subdata * ($height_tot - $height) / $max;
                 //in case of area chart fill under point space
                 if ($area > 0) {
                     $points = array($x1, $y1, $x2, $y2, $x2, $height_tot - 30, $x1, $height_tot - 30);
                     imagefilledpolygon($image, $points, 4, $alphapalette[$index1]);
                 }
                 //trace lines between points (if linear)
                 if (!$spline) {
                     $this->imageSmoothAlphaLineLarge($image, $x1, $y1, $x2, $y2, $palette[$index1]);
                 }
                 $aCoords[$x1] = $y1;
                 $old_data = $subdata;
                 $index2++;
                 $index3++;
             }
             //if curved spline activated, draw cubic spline for the current line
             if ($spline) {
                 $aCoords[$x2] = $y2;
                 $this->imageCubicSmoothLine($image, $palette[$index1], $aCoords);
                 $index2 = 0;
                 $old_data = 0;
                 $old_label = "";
             }
             //draw labels and dots
             $index2 = 0;
             $old_data = 0;
             foreach ($data as $subdata) {
                 //if first index, continue
                 if ($index2 == 0) {
                     $old_data = $subdata;
                     $old_label = $label;
                     $index2++;
                     continue;
                 }
                 // determine coords
                 $x1 = $index2 * $width_line - $width_line + 30;
                 $y1 = $height_tot - 30 - $old_data * ($height_tot - $height) / $max;
                 $x2 = $x1 + $width_line;
                 $y2 = $height_tot - 30 - $subdata * ($height_tot - $height) / $max;
                 //trace dots
                 $color_rbg = self::colorHexToRGB($darkerpalette[$index1]);
                 imageSmoothArc($image, $x1 - 1, $y1 - 1, 7, 7, $color_rbg, 0, 2 * M_PI);
                 imageSmoothArc($image, $x1 - 1, $y1 - 1, 4, 4, array(255, 255, 255, 0), 0, 2 * M_PI);
                 //display values label
                 if ($show_label == "always" || $show_label == "hover") {
                     imagettftext($image, $this->fontsize - 2, $this->fontangle, $index2 == 1 ? $x1 : $x1 - 6, $y1 - 5, $darkerpalette[$index1], $this->font, $old_data);
                 }
                 //show x-axis ticks
                 if ($step != 0 && $index3 / $step == round($index3 / $step)) {
                     imageline($image, $x1, $height_tot - 30, $x1, $height_tot - 27, $darkerpalette[$index1]);
                 }
                 $old_data = $subdata;
                 $old_label = $label;
                 $index2++;
                 $index3++;
             }
             /*** display last value ***/
             if (isset($x2)) {
                 //trace dots
                 $color_rbg = self::colorHexToRGB($darkerpalette[$index1]);
                 imageSmoothArc($image, $x2 - 1, $y2 - 1, 7, 7, $color_rbg, 0, 2 * M_PI);
                 imageSmoothArc($image, $x2 - 1, $y2 - 1, 4, 4, array(255, 255, 255, 0), 0, 2 * M_PI);
                 //display value label
                 if ($show_label == "always" || $show_label == "hover") {
                     imagettftext($image, $this->fontsize - 2, $this->fontangle, $index2 == 1 ? $x2 : $x2 - 6, $y2 - 5, $darkerpalette[$index1], $this->font, $old_data);
                 }
             }
             /*** end display last value ***/
             $index1++;
         }
         //display labels2
         $index = 0;
         foreach ($labels2 as $label) {
             $x = $index * $width_line + 20;
             if ($step != 0 && $index / $step == round($index / $step)) {
                 imagettftext($image, $this->fontsize - 1, $this->fontangle, $x, $height_tot - 10, $this->black, $this->font, $label);
             }
             $index++;
         }
         //legend (align left)
         $index = 0;
         foreach ($labels as $label) {
             //legend label
             $box = @imageTTFBbox($this->fontsize, $this->fontangle, $this->font, $label);
             $textwidth = abs($box[4] - $box[0]);
             $textheight = abs($box[5] - $box[1]);
             imagettftext($image, $this->fontsize - 1, $this->fontangle, 20, 35 + $index * 14, $this->black, $this->font, $label);
             //legend circle
             $color_rbg = self::colorHexToRGB($palette[$index]);
             imageSmoothArc($image, 10, 30 + $index * 14, 7, 7, $color_rbg, 0, 2 * M_PI);
             $index++;
         }
     }
     //generate image
     $params = array("image" => $image, "export" => $export, "f_name" => $opt['f_name'], "class" => $opt['class'], "title" => $title, "randname" => $randname, "raw_datas" => $raw_datas, "withdata" => $opt['withdata']);
     $contents = $this->generateImage($params);
     if ($show_graph) {
         $this->showImage($contents, $export);
     }
     $opt['randname'] = $randname;
     $options = array("opt" => $opt, "export" => $export, "datas" => $datas, "labels2" => $labels2, "flip_data" => $flip_data, "unit" => $unit);
     PluginMreportingCommon::endGraph($options);
 }
Exemplo n.º 10
0
function imageSmoothArc(&$img, $cx, $cy, $w, $h, $color, $start, $stop)
{
    while ($start < 0) {
        $start += 2 * M_PI;
    }
    while ($stop < 0) {
        $stop += 2 * M_PI;
    }
    while ($start > 2 * M_PI) {
        $start -= 2 * M_PI;
    }
    while ($stop > 2 * M_PI) {
        $stop -= 2 * M_PI;
    }
    if ($start > $stop) {
        imageSmoothArc(&$img, $cx, $cy, $w, $h, $color, $start, 2 * M_PI);
        imageSmoothArc(&$img, $cx, $cy, $w, $h, $color, 0, $stop);
        return;
    }
    $a = 1.0 * round($w / 2);
    $b = 1.0 * round($h / 2);
    $cx = 1.0 * round($cx);
    $cy = 1.0 * round($cy);
    for ($i = 0; $i < 4; $i++) {
        if ($start < ($i + 1) * M_PI / 2) {
            if ($start > $i * M_PI / 2) {
                if ($stop > ($i + 1) * M_PI / 2) {
                    imageSmoothArcDrawSegment($img, $cx, $cy, $a, $b, $color, $start, ($i + 1) * M_PI / 2, $i);
                } else {
                    imageSmoothArcDrawSegment($img, $cx, $cy, $a, $b, $color, $start, $stop, $i);
                    break;
                }
            } else {
                if ($stop > ($i + 1) * M_PI / 2) {
                    imageSmoothArcDrawSegment($img, $cx, $cy, $a, $b, $color, $i * M_PI / 2, ($i + 1) * M_PI / 2, $i);
                } else {
                    imageSmoothArcDrawSegment($img, $cx, $cy, $a, $b, $color, $i * M_PI / 2, $stop, $i);
                    break;
                }
            }
        }
    }
}