public function getShape()
 {
     $c = $this->_points[2];
     // base
     $b = $this->_points[1];
     // sides
     $a = $this->_points[0];
     // calculate angle, cosine rule
     $alpha = acos((pow($b, 2) + pow($c, 2) - pow($a, 2)) / (2 * $b * $c));
     // pythag to calc height and y distance
     $height = abs(sin($alpha)) * $b;
     $width = abs(cos($alpha)) * $b;
     $x = 0;
     // start point
     $y = 100;
     $points = array($x, $y, $x + $c, $y, $x + $width, $y - $height);
     // draw
     $image = imagecreatetruecolor(100, 100);
     // sets background to red
     $white = ImageColorAllocate($image, 255, 255, 255);
     ImageFillToBorder($image, 0, 0, $white, $white);
     $blue = imagecolorallocate($image, 0, 0, 255);
     imagefilledpolygon($image, $points, 3, $blue);
     return $image;
 }
示例#2
0
function FilledArc(&$im, $CenterX, $CenterY, $DiameterX, $DiameterY, $Start, $End, $line_color, $fill_color='none',$key='') 
	{
	ImageArc($im, $CenterX, $CenterY, $DiameterX, $DiameterY, $Start, $End, $line_color);
	// To close the arc with 2 lines between the center and the 2 limits of the arc 
	$x = $CenterX + (cos(deg2rad($Start)) * ($DiameterX / 2)); 
	$y = $CenterY + (sin(deg2rad($Start)) * ($DiameterY / 2)); 
	ImageLine($im, $x, $y, $CenterX, $CenterY, $line_color); 
	$x = $CenterX + (cos(deg2rad($End)) * ($DiameterX / 2)); 
	$y = $CenterY + (sin(deg2rad($End)) * ($DiameterY / 2)); 
	ImageLine($im, $x, $y, $CenterX, $CenterY, $line_color); 
	// To fill the arc, the starting point is a point in the middle of the closed space 
	$x = $CenterX + (cos(deg2rad(($Start + $End) / 2)) * ($DiameterX / 4)); 
	$y = $CenterY + (sin(deg2rad(($Start + $End) / 2)) * ($DiameterY / 4)); 
	ImageFillToBorder($im, $x, $y, $line_color, $fill_color);
	
	// Ainda faltam vários ajustes para escrita do label na vertical... Anderson Peterle => 08/08/2007
	if ($key)
		imagestringup($im,2,$x,$y,$key,$x);
	}
示例#3
0
 function DrawPie()
 {
     $width = $this->chart_area[2] - $this->chart_area[0];
     $height = $this->chart_area[3] - $this->chart_area[1];
     list($r, $g, $b) = ColorSet('black');
     $black = ImageColorAllocate($this->img, $r, $g, $b);
     $xpos = $this->chart_area[0] + $width / 2;
     $ypos = $this->chart_area[1] + $height / 2;
     $durchmesser = min($width, $height) * 0.97;
     $radius = $durchmesser / 2;
     ImageArc($this->img, $xpos, $ypos, $durchmesser, $durchmesser, 0, 360, $black);
     //ImageFillToBorder($this->img, $xpos, $ypos, $black, $black);
     $helpcol = ImageColorAllocate($this->img, 12, 12, 12);
     ImageArc($this->img, $xpos, $ypos, $durchmesser, $durchmesser, 0, 360, $helpcol);
     $i = 0;
     $total = 0;
     foreach ($this->data_values as $row) {
         $colcount = 0;
         $i = 0;
         foreach ($row as $v) {
             if ($v != $row[0]) {
                 // sum up
                 $sumarr[$i] += $v;
                 $total += $v;
             }
             $i++;
         }
     }
     $colcount = 0;
     $kreis_start = $this->arc_start;
     $umfang = $radius * 2 * pi();
     $winkel = $kreis_start;
     foreach ($sumarr as $val) {
         if ($colcount >= count($this->bar_color)) {
             $colcount = 0;
         }
         $prozent = number_format($val / $total * 100, 1, ',', '.') . '%';
         $val = round($val / $total * 360);
         $winkel += $val;
         $farbwinkel = $winkel - $val / 2;
         $val += $kreis_start;
         $barcol = $this->bar_color[$colcount];
         list($r, $g, $b) = ColorSet($barcol);
         $barcol = ImageColorAllocate($this->img, $r, $g, $b);
         //ImageArc($this->img, $xpos, $ypos, $durchmesser, $durchmesser, $kreis_start, $val, $black);
         ImageArc($this->img, $xpos, $ypos, $durchmesser, $durchmesser, 0, 3560, $black);
         $out_x = $radius * cos(deg2rad($winkel));
         $out_y = -$radius * sin(deg2rad($winkel));
         $halbradius = $radius / 2;
         $farb_x = $xpos + $halbradius * cos(deg2rad($farbwinkel));
         $farb_y = $ypos + -$halbradius * sin(deg2rad($farbwinkel));
         $out_x = $xpos + $out_x;
         $out_y = $ypos + $out_y;
         ImageLine($this->img, $xpos, $ypos, $out_x, $out_y, $black);
         //ImageLine($this->img, $xpos, $ypos, $farb_x, $farb_y, $black);
         ImageFillToBorder($this->img, $farb_x, $farb_y, $black, $barcol);
         ImageTTFText($this->img, $this->axis_font_size, 0, $farb_x, $farb_y, $black, $this->font, $prozent);
         $kreis_start = $val;
         $colcount++;
     }
     //ImageArc($this->img, $xpos, $ypos, $durchmesser, $durchmesser, 0, 360, $black);
 }
示例#4
0
 function draw_brush($x, $y, $size, $type, $colour)
 {
     $x = round($x);
     $y = round($y);
     $half = round($size / 2);
     switch ($type) {
         case 'circle':
             ImageArc($this->image, $x, $y, $size, $size, 0, 360, $this->colour[$colour]);
             ImageFillToBorder($this->image, $x, $y, $this->colour[$colour], $this->colour[$colour]);
             break;
         case 'square':
             ImageFilledRectangle($this->image, $x - $half, $y - $half, $x + $half, $y + $half, $this->colour[$colour]);
             break;
         case 'vertical':
             ImageFilledRectangle($this->image, $x, $y - $half, $x + 1, $y + $half, $this->colour[$colour]);
             break;
         case 'horizontal':
             ImageFilledRectangle($this->image, $x - $half, $y, $x + $half, $y + 1, $this->colour[$colour]);
             break;
         case 'slash':
             ImageFilledPolygon($this->image, array($x + $half, $y - $half, $x + $half + 1, $y - $half, $x - $half + 1, $y + $half, $x - $half, $y + $half), 4, $this->colour[$colour]);
             break;
         case 'backslash':
             ImageFilledPolygon($this->image, array($x - $half, $y - $half, $x - $half + 1, $y - $half, $x + $half + 1, $y + $half, $x + $half, $y + $half), 4, $this->colour[$colour]);
             break;
         default:
             @eval($type);
             // user can create own brush script.
     }
 }
示例#5
0
    $end_y = round(150 + $radius * sin($last_angle * pi() / 180));
    ImageLine($im, 150, 150, $end_x, $end_y, $black);
}
$prev_angle = 0;
$pointer = 0;
for ($z = 0; $z < $countqw; $z++) {
    $pointer = $prev_angle + $degrees[$z];
    $this_angle = ($prev_angle + $pointer) / 2;
    $prev_angle = $pointer;
    $end_x = round(150 + $radius * cos($this_angle * pi() / 180));
    $end_y = round(150 + $radius * sin($this_angle * pi() / 180));
    $mid_x = round((150 + $end_x) / 2);
    $mid_y = round((150 + $end_y) / 2);
    $hexCodeSplit = explode(',', $hexCode[$z]);
    $WedgeColor = ImageColorAllocate($im, $hexCodeSplit[0], $hexCodeSplit[1], $hexCodeSplit[2]);
    ImageFillToBorder($im, $mid_x, $mid_y, $black, $WedgeColor);
}
ImageString($im, 3, 10, 10, "{$title}", $black);
$red = ImageColorAllocate($im, 255, 153, 153);
$blue = ImageColorAllocate($im, 0, 0, 255);
$adjPosition = 20;
for ($z = 0; $z < $degCount; $z++) {
    $percent = $degrees[$z] / 360 * 100;
    $percent = round($percent, 2);
    $adjPosition = $adjPosition + 15;
    $hexCodeSplit = explode(',', $hexCode[$z]);
    $percentLen = strlen($percent);
    if ($percentLen == '4') {
        $percent = " " . "{$percent}";
    }
    if ($percentLen == '3') {
示例#6
0
 function draw_slice($x, $y, $from, $to, $color)
 {
     # Awful Kludge!!!
     if ($to > 360) {
         $to = 360;
     }
     ImageArc($this->im, $this->center_x, $this->center_y, $this->diameter, $this->diameter, $from, $to, $color);
     /* First line */
     $axy2 = $this->get_xy_factors($from);
     $ax2 = floor($this->center_x + $axy2[0] * ($this->diameter / 2));
     $ay2 = floor($this->center_y + $axy2[1] * ($this->diameter / 2));
     ImageLine($this->im, $this->center_x, $this->center_y, $ax2, $ay2, $color);
     /* Second line */
     $bxy2 = $this->get_xy_factors($to);
     $bx2 = ceil($this->center_x + $bxy2[0] * ($this->diameter / 2));
     $by2 = ceil($this->center_y + $bxy2[1] * ($this->diameter / 2));
     ImageLine($this->im, $this->center_x, $this->center_y, $bx2, $by2, $color);
     /* decide where to start filling, then fill */
     $xy2 = $this->get_xy_factors(($to - $from) / 2 + $from);
     $x2 = floor($this->center_x + $xy2[0] * ($this->diameter / 3));
     $y2 = floor($this->center_y + $xy2[1] * ($this->diameter / 3));
     ImageFillToBorder($this->im, $x2, $y2, $color, $color);
 }
 function RoundedImageCorners()
 {
     if (phpthumb_functions::gd_version() < 2) {
         return false;
     }
     if (!empty($this->brx) && !empty($this->bry) && $this->bw == 0) {
         $gdimg_cornermask = $this->ImageCreateFunction($this->thumbnail_width, $this->thumbnail_height);
         $background_color_cornermask = phpthumb_functions::ImageHexColorAllocate($gdimg_cornermask, $this->config_background_hexcolor);
         $border_color_cornermask = phpthumb_functions::ImageHexColorAllocate($gdimg_cornermask, $this->config_border_hexcolor);
         // Top Left
         ImageArc($gdimg_cornermask, $this->brx - 1, $this->bry - 1, $this->brx * 2, $this->bry * 2, 180, 270, $background_color_cornermask);
         ImageFillToBorder($gdimg_cornermask, 0, 0, $background_color_cornermask, $background_color_cornermask);
         // Top Right
         ImageArc($gdimg_cornermask, $this->thumbnail_width - $this->brx, $this->bry - 1, $this->brx * 2, $this->bry * 2, 270, 360, $background_color_cornermask);
         ImageFillToBorder($gdimg_cornermask, $this->thumbnail_width, 0, $background_color_cornermask, $background_color_cornermask);
         // Bottom Right
         ImageArc($gdimg_cornermask, $this->thumbnail_width - $this->brx, $this->thumbnail_height - $this->bry, $this->brx * 2, $this->bry * 2, 0, 90, $background_color_cornermask);
         ImageFillToBorder($gdimg_cornermask, $this->thumbnail_width, $this->thumbnail_height, $background_color_cornermask, $background_color_cornermask);
         // Bottom Left
         ImageArc($gdimg_cornermask, $this->brx - 1, $this->thumbnail_height - $this->bry, $this->brx * 2, $this->bry * 2, 90, 180, $background_color_cornermask);
         ImageFillToBorder($gdimg_cornermask, 0, $this->thumbnail_height, $background_color_cornermask, $background_color_cornermask);
         $transparent_color_cornermask = ImageColorTransparent($gdimg_cornermask, ImageColorAt($gdimg_cornermask, round($this->thumbnail_width / 2), round($this->thumbnail_height / 2)));
         ImageArc($gdimg_cornermask, $this->brx, $this->bry, $this->brx * 2, $this->bry * 2, 180, 270, $transparent_color_cornermask);
         ImageArc($gdimg_cornermask, $this->thumbnail_width - $this->brx, $this->bry, $this->brx * 2, $this->bry * 2, 270, 360, $transparent_color_cornermask);
         ImageArc($gdimg_cornermask, $this->thumbnail_width - $this->brx, $this->thumbnail_height - $this->bry, $this->brx * 2, $this->bry * 2, 0, 90, $transparent_color_cornermask);
         ImageArc($gdimg_cornermask, $this->brx, $this->thumbnail_height - $this->bry, $this->brx * 2, $this->bry * 2, 90, 180, $transparent_color_cornermask);
         ImageCopyMerge($this->gdimg_output, $gdimg_cornermask, 0, 0, 0, 0, $this->thumbnail_width, $this->thumbnail_height, 100);
         // Make rounded corners transparent (optional)
         if (!empty($this->bct)) {
             if ($this->bct == 256) {
                 ImageTrueColorToPalette($this->gdimg_output, true, 256);
             }
             ImageColorTransparent($this->gdimg_output, ImageColorAt($this->gdimg_output, 0, 0));
         }
     }
     return true;
 }
$weekday[2] = 'Tuesday';
$weekday[3] = 'Wednesday';
$weekday[4] = 'Thursday';
$weekday[5] = 'Friday';
$weekday[6] = 'Saturday';
for ($day = 0; $day < count($weekday); $day++) {
    ImageString($im, 2, $x, $y, $weekday[$day], $black);
    for ($i = 0; $i < 24 * 6; $i++) {
        ImageRectangle($im, $x1 + $i * 4, $y, $x1 + ($i + 1) * 4, $y + 12, $plomo);
        if ($i >= $initPeriod1 * 6 && $i < $endPeriod2 * 6 && ($i < $endPeriod1 * 6 || $i >= $initPeriod2 * 6)) {
            $color = $orange;
        } else {
            $color = $white;
        }
        if (isset($noWorkingDays[$day]) && $noWorkingDays[$day]) {
            $color = $white;
        }
        ImageFillToBorder($im, $x1 + $i * 4 + 1, $y + 1, $plomo, $color);
    }
    $y += 18;
}
$y = 20;
for ($i = 0; $i <= 24; $i++) {
    ImageLine($im, $x1 + $i * 4 * 6, $y - 5, $x1 + $i * 4 * 6, $y - 5 + 18 * $cant, $gris);
    if ($i < 24) {
        ImageLine($im, $x2 + $i * 4 * 6, $y - 5, $x2 + $i * 4 * 6, $y - 5 + 18 * $cant, $plomo);
        ImageString($im, 1, $x1 + $i * 4 * 6, $y - 10, $i, $black);
    }
}
//ImageString($im, 2, 5, 5, $initPeriod1*6 . ", $endPeriod1, $initPeriod2, $endPeriod2 ", $black);
ImageJpeg($im);
示例#9
0
 function popupimage($pf, $uid, $popupgoalname)
 {
     /*****************start********************/
     $imageWidth = 78;
     //image width
     $imageHeight = 78;
     //image height
     $diameter = 78;
     //pie diameter
     $centerX = 39;
     //pie center pixels x
     $centerY = 39;
     //pie center pixels y
     $labelWidth = 5;
     //label width, no need to change
     /*************************End****************************/
     $data = array($pf, 100 - $pf);
     for ($i = 0; $i < count($data); $i++) {
         $dataTotal += $data[$i];
     }
     $im = ImageCreate($imageWidth, $imageHeight);
     $color[] = ImageColorAllocate($im, 39, 166, 194);
     //red
     $color[] = ImageColorAllocate($im, 255, 115, 30);
     //yellow
     $white = ImageColorAllocate($im, 255, 255, 255);
     $black = ImageColorAllocate($im, 0, 0, 0);
     $grey = ImageColorAllocate($im, 215, 215, 215);
     ImageFill($im, 0, 0, $white);
     $degree = 0;
     for ($i = 0; $i < count($data); $i++) {
         $startDegree = round($degree);
         $degree += $data[$i] / $dataTotal * 360;
         $endDegree = round($degree);
         $currentColor = $color[$i % count($color)];
         ImageArc($im, $centerX, $centerY, $diameter, $diameter, $startDegree, $endDegree, $currentColor);
         list($arcX, $arcY) = $this->circlePoint($startDegree, $diameter);
         ImageLine($im, $centerX, $centerY, floor($centerX + $arcX), floor($centerY + $arcY), $currentColor);
         list($arcX, $arcY) = $this->circlePoint($endDegree, $diameter);
         ImageLine($im, $centerX, $centerY, ceil($centerX + $arcX), ceil($centerY + $arcY), $currentColor);
         $midPoint = round(($endDegree - $startDegree) / 2 + $startDegree);
         list($arcX, $arcY) = $this->circlePoint($midPoint, $diameter / 1.5);
         ImageFillToBorder($im, floor($centerX + $arcX), floor($centerY + $arcY), $currentColor, $currentColor);
         if ($i == 0) {
             ImageString($im, 5, floor($centerX + $arcX), floor($centerY + $arcY), intval(round($data[$i] / $dataTotal * 100)) . "%", $white);
         }
     }
     $filename = $popupgoalname . $uid . ".png";
     Header("Content-type: image/PNG");
     ImagePNG($im, "htdocs/popupgoal/" . $filename);
     return $filename;
 }
示例#10
0
function FilledArc(&$im, $CenterX, $CenterY, $DiameterX, $DiameterY, $Start, $End, $line_color, $fill_color = 'none')
{
    if (gd_version() >= 2.0) {
        if ($fill_color != 'none') {
            // fill
            ImageFilledArc($im, $CenterX, $CenterY, $DiameterX, $DiameterY, $Start, $End, $fill_color, IMG_ARC_PIE);
        }
        // outline
        ImageFilledArc($im, $CenterX, $CenterY, $DiameterX, $DiameterY, $Start, $End, $line_color, IMG_ARC_EDGED | IMG_ARC_NOFILL | IMG_ARC_PIE);
    } else {
        // cbriou@orange-art.fr
        // To draw the arc
        ImageArc($im, $CenterX, $CenterY, $DiameterX, $DiameterY, $Start, $End, $line_color);
        // To close the arc with 2 lines between the center and the 2 limits of the arc
        $x = $CenterX + cos(deg2rad($Start)) * ($DiameterX / 2);
        $y = $CenterY + sin(deg2rad($Start)) * ($DiameterY / 2);
        ImageLine($im, $x, $y, $CenterX, $CenterY, $line_color);
        $x = $CenterX + cos(deg2rad($End)) * ($DiameterX / 2);
        $y = $CenterY + sin(deg2rad($End)) * ($DiameterY / 2);
        ImageLine($im, $x, $y, $CenterX, $CenterY, $line_color);
        if ($fill_color != 'none') {
            if ($End - $Start > 0.5) {
                // ImageFillToBorder() will flood the wrong parts of the image if the slice is too small
                // thanks Jami Lowery <*****@*****.**> for pointing out the problem
                // To fill the arc, the starting point is a point in the middle of the closed space
                $x = $CenterX + cos(deg2rad(($Start + $End) / 2)) * ($DiameterX / 4);
                $y = $CenterY + sin(deg2rad(($Start + $End) / 2)) * ($DiameterY / 4);
                ImageFillToBorder($im, $x, $y, $line_color, $fill_color);
            }
        }
    }
}
//white bkgrnd
$blue = ImageColorAllocate($im, 0, 127, 255);
$purple = ImageColorAllocate($im, 186, 124, 237);
$light_violet = ImageColorAllocate($im, 243, 241, 254);
$black = ImageColorAllocate($im, 00, 00, 00);
$pink = ImageColorAllocate($im, 255, 206, 206);
$light_pink = ImageColorAllocate($im, 255, 243, 243);
$dark_pink = ImageColorAllocate($im, 238, 102, 102);
$red = ImageColorAllocate($im, 255, 0, 0);
$green = ImageColorAllocate($im, 0, 255, 0);
$yellow = ImageColorAllocate($im, 255, 255, 0);
/*calculate the divisions */
$hdiv = (int) $w / 42;
$vdiv = (int) $h / 81;
/* fill the form with color */
ImageFillToBorder($im, 2, 2, $blue, $light_pink);
$lab_x1 = (int) ($w - $label_w) / 2;
$lab_y1 = (int) ($label_h + 1);
ImageFilledRectangle($im, $lab_x1 - 7, 1, $lab_x1 + $label_w + 14, $lab_y1 + 14, $dark_pink);
/* Copy the patient label into the form */
ImageCopy($im, $label, $lab_x1 + 4, 8, 0, 0, $label_w, $label_h);
/* Write the info part */
ImageString($im, 5, $left_border, 15, $LDHospitalName, $dark_pink);
ImageString($im, 4, $left_border, 30, $LDCentralLab, $dark_pink);
/* Create the synchronizing blocks on the right edge of the form */
doSyncBlocks();
/* Create Room nr box */
ImageRectangle($im, 15, 80, 150, 115, $dark_pink);
ImageFilledRectangle($im, 16, 81, 149, 114, $ewhite);
ImageString($im, 1, 19, 83, $LDRoomNr, $purple);
ImageString($im, 4, 22, 90, $stored_request['room_nr'], $dark_pink);
示例#12
0
文件: image.php 项目: svn2github/ybtx
function pie($var)
{
    $val = explode(",", $var["values"]);
    $desc = explode(",", $var["labels"]);
    $sum = array_sum($val);
    $count = count($val);
    $width = 200;
    $padding = 15;
    $max_width = 400;
    $height = $width * 0.5;
    $text_height = $count * 20;
    if ($height < $text_height) {
        $height = $text_height;
        if ($height > $max_width) {
            $center_y = $height / 2 + $padding;
            $height = $max_width;
        }
        $width = $height * (1 + (1 - ($height - $width / 2) / ($max_width - $width / 2)));
    } else {
        $text_height = $height;
    }
    $think = ($width - $height) * 30 / $width;
    $center_x = $width / 2 + $padding + 0.5;
    $center_y = $text_height / 2 + $padding + 0.5;
    $img = imagecreate($width + $padding * 2 + 300, $text_height + $think + $padding * 2);
    $bg = ImageColorAllocate($img, 255, 255, 255);
    ImageColorTransparent($img, $bg);
    $white = ImageColorAllocate($img, 255, 255, 255);
    $black = ImageColorAllocate($img, 0, 0, 0);
    $blue = ImageColorAllocate($img, 0, 255, 0);
    ImageArc($img, $center_x, $center_y, $width, $height, 180, 360, $white);
    ImageArc($img, $center_x, $center_y + $think, $width, $height, 0, 180, $white);
    ImageLine($img, $center_x - $width / 2, $center_y, $center_x - $width / 2, $center_y + $think, $white);
    ImageLine($img, $center_x + $width / 2, $center_y, $center_x + $width / 2, $center_y + $think, $white);
    $i = 0;
    $c = 0;
    ImageLine($img, $center_x, $center_y, $center_x + $width / 2, $center_y, $black);
    $p_c = array();
    $p_x = array();
    $p_y = array();
    $p_a = array();
    foreach ($val as $v) {
        $p = $v / $sum;
        $t = $p * pi() + $c;
        $c += $p * pi() * 2;
        $y1 = sin($c) * $height / 2 + $center_y;
        $x1 = cos($c) * $width / 2 + $center_x;
        $r = 255;
        $g = 80;
        $b = 80;
        $a = ++$i / $count;
        getColor($a, $r, $g, $b);
        $x = cos($t) * $width / 3.5 + $center_x;
        $y = sin($t) * $height / 3.5 + $center_y;
        $item = array();
        $item["r"] = $r;
        $item["g"] = $g;
        $item["b"] = $b;
        $item["x"] = $x1;
        $item["y"] = $y1;
        array_push($p_c, $item);
        array_push($p_x, $x);
        array_push($p_y, $y);
        array_push($p_a, round($p * 100, 2));
        if ($p > 0.01) {
            $color = ImageColorAllocate($img, round($r * 0.7), round($g * 0.7), round($b * 0.7));
            //if($aaaaa<10)
            ImageFill($img, $x, $y, $white);
            //if($aaaaa<10)
            ImageFill($img, $x, $y, $color);
            if ($i != $count) {
                ImageSetPixel($img, $center_x + 1, $center_y, $white);
                ImageLine($img, $center_x, $center_y, $x1, $y1, $white);
                if ($y1 > $center_y) {
                    ImageLine($img, $x1, $y1, $x1, $y1 + $think - 1, $white);
                }
            } else {
                ImageLine($img, $center_x, $center_y, $x1, $y1, $color);
            }
        }
    }
    ImageArc($img, $center_x, $center_y, $width, $height, 180, 360, $white);
    ImageArc($img, $center_x, $center_y, $width, $height, 0, 180, $white);
    ImageFillToBorder($img, $center_x, $center_y, $white, $white);
    ImageLine($img, $center_x, $center_y, $center_x + $width / 2, $center_y, $black);
    foreach ($p_c as $key => $item) {
        $x = $p_x[$key];
        $y = $p_y[$key];
        if ($p_a[$key] > 1) {
            $color = ImageColorAllocate($img, $item['r'], $item['g'], $item['b']);
            ImageFill($img, $x, $y, $white);
            ImageFill($img, $x, $y, $color);
            if ($key != $count - 1) {
                ImageSetPixel($img, $center_x + 1, $center_y, $white);
                ImageLine($img, $center_x, $center_y, $item['x'], $item['y'], $white);
            } else {
                ImageLine($img, $center_x, $center_y, $item['x'], $item['y'], $color);
            }
        }
    }
    array_multisort($p_y, $p_x, $p_c, $p_a, $val, $desc);
    $i = 0;
    foreach ($p_y as $k => $y) {
        $x = $p_x[$k];
        $y2 = $i++ * 20 + $padding + $think / 2;
        $x2 = abs($y - $y2) + $x;
        $x3 = $center_x + $width / 2 + $padding;
        $a = $p_a[$k];
        if ($a < 10) {
            $a = " " . $a;
        }
        if (strlen($a) < 3) {
            $a .= ".";
        }
        if (strlen($a) < 4) {
            $a .= "0";
        }
        if (strlen($a) < 5) {
            $a .= "0";
        }
        $a = $a . "%";
        ImageLine($img, $x, $y, $x2, $y2, $black);
        ImageLine($img, $x2, $y2, $x3, $y2, $black);
        ImageTtfText($img, 10, 0, $x3 + $padding, $y2 + 5, $black, "cour.ttf", $a);
        ImageTtfText($img, 10, 0, $x3 + $padding + 60, $y2 + 5, $black, "simsun.ttc", $desc[$k]);
    }
    ImagePNG($img);
    ImageDestroy($img);
}
示例#13
0
 function render($imgType)
 {
     $data = $this->data;
     $chartType = $this->chartType;
     $graphCfg = $this->graphCfg;
     // standard threshold.
     $chartOptions['threshold'] = 3;
     if ($chartType == 'barchart') {
         $chartOptions['striped'] = FALSE;
         $chartOptions['12oclock'] = FALSE;
     } else {
         $chartOptions['12oclock'] = FALSE;
         $chartOptions['striped'] = TRUE;
     }
     $itemCount = fetch_item_instance_cnt();
     // size of pie-chart (not counting text borders)
     $imgsize = ifempty($graphCfg['size'], $this->width / 3);
     $fontsize = $graphCfg['font-size'];
     $fontheight = imagefontheight($fontsize);
     // Create a new image
     $side_margin = round($imgsize * 2 / 3);
     $top_margin = $fontheight + 1;
     $xsize = $imgsize + 2 * $side_margin;
     $ysize = $imgsize + 2 * $top_margin;
     $im = ImageCreate($xsize, $ysize);
     $bgcolor = ImageHexColorAllocate($im, $graphCfg['background-color']);
     $text_color = ImageHexColorAllocate($im, $graphCfg['text-color']);
     $captions_color = ImageHexColorAllocate($im, $graphCfg['caption-color']);
     $lt_color = ImageHexColorAllocate($im, $graphCfg['light-color']);
     $dk_color = ImageHexColorAllocate($im, $graphCfg['dark-color']);
     $lt_border = ImageHexColorAllocate($im, $graphCfg['light-border-color']);
     $dk_border = ImageHexColorAllocate($im, $graphCfg['dark-border-color']);
     // Do this if you want your background image to show through:
     if ($graphCfg['background'] == 'transparent') {
         imagecolortransparent($im, $bgcolor);
     }
     // color background
     ImageFilledRectangle($im, 0, 0, $xsize, $ysize, $bgcolor);
     if (is_array($data)) {
         // process data
         $dataCount = @count($data);
         if ($dataCount > 0 && !empty($sortorder)) {
             if ($sortorder == 'asc') {
                 asort($data);
             } else {
                 arsort($data);
             }
         }
         $TotalArrayValues = @array_sum($data);
         if ($TotalArrayValues > 0 && $itemCount > 0) {
             $maxdata = 0;
             foreach ($data as $key => $value) {
                 $value = number_format(@($value / $itemCount) * 100, 1);
                 $data[$key] = $value;
                 if ($maxdata < $value) {
                     $maxdata = $value + 1;
                 }
             }
         }
         if ($chartType == 'barchart') {
             if ($TotalArrayValues > 0) {
                 $sidegap = 10;
                 // pixels.
                 $topgap = $sidegap;
                 // An iterative process to determine the best box width.
                 // It will perform only one loop, unless you have so many items that
                 // the box width is smaller than the font height.  Then it will
                 // recompute with fewer items.
                 $dataCount++;
                 // We undo this on the next line.
                 do {
                     $dataCount--;
                     $boxwidth = round(($xsize - $sidegap * 2) / ($dataCount + 1));
                     $gapwidth = round($boxwidth / 10);
                     if ($gapwidth < 1) {
                         $gapwidth = 1;
                     }
                     $boxwidth = floor(($xsize - $sidegap * 2 - $gapwidth * ($dataCount - 1)) / $dataCount);
                     $totalwidth = $boxwidth * $dataCount + $gapwidth * ($dataCount - 1);
                 } while ($dataCount > 0 && $boxwidth < $fontheight + 2);
                 // centre it:
                 $sidegap = ($xsize - $totalwidth) / 2;
                 $ix = 0;
                 foreach ($data as $key => $value) {
                     //$height = $data[$ix][1] * ($ysize - $topgap*2) / 100;
                     $height = $value * ($ysize - $topgap * 2) / $maxdata;
                     $x1 = $sidegap + $ix * $boxwidth + $ix * $gapwidth;
                     // ImageLine($im, $x1, $ysize - $top_margin, $x1, $ysize - $top_margin - $height, $dk_border );
                     ImageFilledRectangle($im, $x1, $ysize - $topgap - $height, $x1 + $boxwidth, $ysize - $topgap, $lt_color);
                     // Highlight it from the top left, shadow on bottom and right.
                     ImageLine($im, $x1, $ysize - $topgap - $height, $x1, $ysize - $topgap, $lt_border);
                     ImageLine($im, $x1, $ysize - $topgap - $height, $x1 + $boxwidth, $ysize - $topgap - $height, $lt_border);
                     ImageLine($im, $x1 + $boxwidth, $ysize - $topgap - $height, $x1 + $boxwidth, $ysize - $topgap, $dk_border);
                     ImageLine($im, $x1, $ysize - $topgap, $x1 + $boxwidth, $ysize - $topgap, $dk_border);
                     $text = $key . " " . round($value) . "%";
                     // show percent
                     ImageStringUp($im, $fontsize, $x1 + $boxwidth / 2 - $fontheight / 2, $ysize - $topgap - 3, $text, $text_color);
                     $ix++;
                 }
             }
         } else {
             //if($chartType == 'piechart')
             // A pie chart.
             if (is_numeric($chartOptions['threshold'])) {
                 // minimum wedge percent to omit from caption
                 $threshold = $chartOptions['threshold'];
             } else {
                 $threshold = 3;
             }
             $radius = round($imgsize / 2);
             $originx = $radius + $side_margin;
             $originy = $radius + $top_margin;
             // draw a circle
             ImageArc($im, $originx, $originy, $radius * 2, $radius * 2, 0, 360, $dk_border);
             // fill circle with color
             ImageFill($im, $originx, $originy, $lt_color);
             // GD-2 version of the above two calls.	 Damn PHP.
             // ImageFilledArc($im, $originx, $originy, $radius*2, $radius*2, 0, 360, $dk_border, IMG_ARC_PIE);
             if ($chartOptions['12oclock'] !== FALSE) {
                 // draw a wedge
                 $last_angle = deg2rad(-90);
                 // Draw line at 0 degrees if we have more than one item.
                 if ($TotalArrayValues > 1) {
                     ImageLine($im, $originx, $originy, $originx, $originy - $radius + 1, $dk_border);
                 }
             } else {
                 $last_angle = deg2rad(0);
                 if ($TotalArrayValues > 1) {
                     ImageLine($im, $originx, $originy, $originx + $radius - 1, $originy, $dk_border);
                 }
             }
             if ($chartOptions['striped'] !== FALSE) {
                 // Draw every other pie wedge a different colour.
                 $striped = TRUE;
             }
             $ix = 0;
             foreach ($data as $key => $value) {
                 $angle = deg2rad($value * 3.6) + $last_angle;
                 $x2 = ($radius - 1) * cos($angle) + $originx;
                 $y2 = ($radius - 1) * sin($angle) + $originy;
                 if ($ix != $TotalArrayValues - 1) {
                     // don't draw wedge-line for 100%
                     ImageLine($im, $originx, $originy, $x2, $y2, $dk_border);
                 }
                 $mid_angle = ($angle - $last_angle) / 2;
                 if ($value > $threshold) {
                     // caption if over $threshold
                     // Fill every other wedge with a different colour:
                     if ($ix % 2 && $striped) {
                         ImageFillToBorder($im, $radius * 0.9 * cos($mid_angle + $last_angle) + $originx, $radius * 0.9 * sin($mid_angle + $last_angle) + $originy, $dk_border, $dk_color);
                     }
                     $x1 = $radius / 2 * cos($mid_angle + $last_angle) + $originx;
                     $y1 = $radius / 2 * sin($mid_angle + $last_angle) + $originy;
                     $x2 = $radius * cos($mid_angle + $last_angle) + $originx;
                     $y2 = $radius * sin($mid_angle + $last_angle) + $originy;
                     ImageArc($im, $x1, $y1, $imgsize / 25, $imgsize / 25, 0, 360, $captions_color);
                     // display caption
                     ImageLine($im, $x1, $y1, $x2, $y2, $captions_color);
                     $text = $key . " " . round($value) . "%";
                     // show percent
                     if ($x1 > $originx) {
                         ImageLine($im, $x2, $y2, $x2 + $side_margin, $y2, $captions_color);
                         // caption on right side
                         if ($y2 > $originy) {
                             // Bottom half
                             ImageString($im, $fontsize, $x2, $y2, $text, $text_color);
                         } else {
                             // Should use font height here:
                             ImageString($im, $fontsize, $x2, $y2 - 15, $text, $text_color);
                         }
                     } else {
                         ImageLine($im, $x2, $y2, $x2 - $side_margin, $y2, $captions_color);
                         // caption on left side
                         if ($y2 > $originy) {
                             // Bottom half
                             ImageString($im, $fontsize, $x2 - $side_margin, $y2, $text, $text_color);
                         } else {
                             // Should use font height here:
                             ImageString($im, $fontsize, $x2 - $side_margin, $y2 - 15, $text, $text_color);
                         }
                     }
                 }
                 $last_angle = $angle;
                 $ix++;
             }
         }
     }
     header("Pragma: no-cache");
     header("Expires: 0");
     switch ($imgType) {
         case 'jpeg':
         case 'jpg':
             Header("Content-Type: image/jpeg");
             ImageJPEG($im);
             break;
         case 'gif':
             //not all sites support GIF!
             Header("Content-Type: image/gif");
             ImageGIF($im);
             break;
         case 'png':
         default:
             Header("Content-Type: image/png");
             ImagePNG($im);
             // send image as PNG to browser
     }
     // destroy image when done
     ImageDestroy($im);
 }
 function DrawDot($x_world, $y_world, $dot_type, $color)
 {
     $half_point = $this->point_size / 2;
     $x1 = $this->xtr($x_world) - $half_point;
     $x2 = $this->xtr($x_world) + $half_point;
     $y1 = $this->ytr($y_world) - $half_point;
     $y2 = $this->ytr($y_world) + $half_point;
     switch ($dot_type) {
         case "halfline":
             ImageFilledRectangle($this->img, $x1, $this->ytr($y_world), $this->xtr($x_world), $this->ytr($y_world), $color);
             break;
         case "line":
             ImageFilledRectangle($this->img, $x1, $this->ytr($y_world), $x2, $this->ytr($y_world), $color);
             break;
         case "rect":
             ImageFilledRectangle($this->img, $x1, $y1, $x2, $y2, $color);
             break;
         case "circle":
             ImageArc($this->img, $x1 + $half_point, $y1 + $half_point, $this->point_size, $this->point_size, 0, 360, $color);
             break;
         case "dot":
             ImageArc($this->img, $x1 + $half_point, $y1 + $half_point, $this->point_size, $this->point_size, 0, 360, $color);
             ImageFillToBorder($this->img, $x1 + $half_point, $y1 + $half_point, $color, $color);
             break;
         case "diamond":
             $arrpoints = array($x1, $y1 + $half_point, $x1 + $half_point, $y1, $x2, $y1 + $half_point, $x1 + $half_point, $y2);
             ImageFilledPolygon($this->img, $arrpoints, 4, $color);
             break;
         case "triangle":
             $arrpoints = array($x1, $y1 + $half_point, $x2, $y1 + $half_point, $x1 + $half_point, $y2);
             ImageFilledPolygon($this->img, $arrpoints, 3, $color);
             break;
         default:
             ImageFilledRectangle($this->img, $x1, $y1, $x2, $y2, $color);
             break;
     }
     return true;
 }
        return;
    }
}
$data = array();
global $t;
$count = 0;
$link = baselink();
$result = $coddb->sql_query($query);
// Do not show the graph on an empty result
if (mysql_num_rows($result) == 0) {
    header("Content-type: image/png");
    $width = 20;
    $height = 20;
    $im = ImageCreateTrueColor($width, $height);
    $grey = ImageColorAllocate($im, 204, 204, 204);
    ImageFillToBorder($im, 0, 0, $grey, $grey);
    ImagePNG($im);
    ImageDestroy($im);
    return;
}
$d = array();
$max = 31;
$idx = 1;
$suma = 0;
while ($row = $coddb->sql_fetchrow($result)) {
    $start = $row['came'];
    $end = $row['gone'];
    $d1 = date("Y-m-d", $start);
    $d2 = date("Y-m-d", $end);
    if (count($data) and $data[count($data) - 1][1] > $d1) {
        $diff = floor(($data[count($data) - 1][4] - $start) / (60 * 60 * 24));
示例#16
0
    } else {
        if ($min % 5 == 0) {
            $len = $radius / 10;
        } else {
            $len = $radius / 25;
        }
    }
    $ang = 2 * M_PI * $min / 60;
    $x1 = sin($ang) * ($radius - $len) + $radius;
    $y1 = cos($ang) * ($radius - $len) + $radius;
    $x2 = 1 * sin($ang) * $radius;
    $y2 = 1 * cos($ang) * $radius;
    ImageLine($img, $x1, $y1, $x2, $y2, $color_black);
}
list($hour, $min, $sec) = preg_split("/-/", Date("h-i-s", time() - 3600));
$hour = $hour % 12;
$xs = intval(cos($sec * M_PI / 30 - M_PI / 2) * 0.75 * $radius + $radius);
$ys = intval(sin($sec * M_PI / 30 - M_PI / 2) * 0.75 * $radius + $radius);
$xm = intval(cos($min * M_PI / 30 - M_PI / 2) * 0.65 * $radius + $radius);
$ym = intval(sin($min * M_PI / 30 - M_PI / 2) * 0.65 * $radius + $radius);
$xh = intval(cos($hour * 5 * M_PI / 30 - M_PI / 2) * 0.5 * $radius + $radius);
$yh = intval(sin($hour * 5 * M_PI / 30 - M_PI / 2) * 0.5 * $radius + $radius);
ImageLine($img, $radius, $radius, $xs, $ys, $color_grey);
ImageLine($img, $radius, $radius - 1, $xm, $ym, $color_blue);
ImageLine($img, $radius - 1, $radius, $xm, $ym, $color_blue);
ImageLine($img, $radius, $radius - 1, $xh, $yh, $color_blue);
ImageLine($img, $radius - 1, $radius, $xh, $yh, $color_blue);
ImageArc($img, $radius, $radius, $radius / 8, $radius / 8, 0, 360, $color_red);
ImageFillToBorder($img, $radius, $radius, $color_red, $color_red);
ImageGif($img);
ImageDestroy($img);
示例#17
0
<?php

/* $id$ */
$dest = dirname(realpath(__FILE__)) . '/bug27582.png';
@unlink($dest);
$im = ImageCreateTrueColor(10, 10);
imagealphablending($im, true);
imagesavealpha($im, true);
$bordercolor = ImageColorAllocateAlpha($im, 0, 0, 0, 2);
$color = ImageColorAllocateAlpha($im, 0, 0, 0, 1);
ImageFillToBorder($im, 5, 5, $bordercolor, $color);
imagepng($im, $dest);
$im2 = imagecreatefrompng($dest);
$col = imagecolorat($im2, 5, 5);
$color = imagecolorsforindex($im2, $col);
echo $color['alpha'];
@unlink($dest);