function Create() { if ($this->ready) { return; } $this->graph = new CanvasGraph($this->width, $this->height, 'auto'); $this->graph->SetMargin(5, 11, 6, 11); /* $this->graph->SetShadow(); $this->graph->SetMarginColor( "teal"); $this->graph->InitFrame(); */ $hpos = 15; $text = new Text("ADEI", $this->width / 2, $hpos); $text->SetFont(FF_ARIAL, FS_BOLD, 24); $text->Align('center', 'top'); $text->Stroke($this->graph->img); $hpos += $text->GetTextHeight($this->graph->img) + 10; // $msg = "Welcome to the Advanced Data Extraction Infrastructure! Please"; $msg = preg_replace(array("/\n([^\n])/"), array(' \\1'), file_get_contents("docs/welcome.txt")); $text_width = $this->width - 50; if ($text_width < 100) { return; } $text = new Text($msg, $this->width / 2, $hpos); $text->SetFont(FF_ARIAL, FS_NORMAL, 18); $text->Align('center', 'top'); $width = $text->GetWidth($this->graph->img); if ($width > $text_width) { $char_width = ceil($width / strlen($msg)); $cpl = $text_width / $char_width; $wmsg = wordwrap($msg, $cpl, "\n", true); $text->Set($wmsg); $width = $text->GetWidth($this->graph->img); while ($width > $text_width && $cpl > 10) { $cpl -= $cpl / 10; $wmsg = wordwrap($msg, $cpl, "\n", true); $text->Set($wmsg); $width = $text->GetWidth($this->graph->img); } } $text->Stroke($this->graph->img); // $text->ParagraphAlign('center'); // $text->SetBox( "white", "black","gray"); /* // $text->Align('left', 'top'); // $text->ParagraphAlign('left'); // $text->SetBox( "white", "black","gray"); $width = $text->GetWidth($this->graph->img); */ // $text->Stroke( $this->graph->img); }
function generate_image($lang, $idx) { global $LANGUAGES; $up_to_date = get_stats($idx, $lang, 'uptodate'); $up_to_date = $up_to_date[0]; // $outdated = @get_stats($idx, $lang, 'outdated'); $outdated = $outdated[0]; // $missing = get_stats($idx, $lang, 'notrans'); $missing = $missing[0]; // $no_tag = @get_stats($idx, $lang, 'norev'); $no_tag = $no_tag[0]; $data = array($up_to_date, $outdated, $missing, $no_tag); $percent = array(); $total = array_sum($data); // Total ammount in EN manual (to calculate percentage values) $total_files_lang = $total - $missing; // Total ammount of files in translation foreach ($data as $value) { $percent[] = round($value * 100 / $total); } $legend = array($percent[0] . '%% up to date (' . $up_to_date . ')', $percent[1] . '%% outdated (' . $outdated . ')', $percent[2] . '%% missing (' . $missing . ')', $percent[3] . '%% without EN-Revision (' . $no_tag . ')'); $title = 'Details for ' . $LANGUAGES[$lang] . ' PHP Manual'; $graph = new PieGraph(530, 300); $graph->SetShadow(); $graph->title->Set($title); $graph->title->Align('left'); $graph->title->SetFont(FF_FONT1, FS_BOLD); $graph->legend->Pos(0.02, 0.18, "right", "center"); $graph->subtitle->Set('(Total: ' . $total_files_lang . ' files)'); $graph->subtitle->Align('left'); $graph->subtitle->SetColor('darkred'); $t1 = new Text(date('m/d/Y')); $t1->SetPos(522, 294); $t1->SetFont(FF_FONT1, FS_NORMAL); $t1->Align("right", 'bottom'); $t1->SetColor("black"); $graph->AddText($t1); $p1 = new PiePlot3D($data); $p1->SetSliceColors(array("#68d888", "#ff6347", "#dcdcdc", "#f4a460")); if ($total_files_lang != $up_to_date) { $p1->ExplodeAll(); } $p1->SetCenter(0.35, 0.55); $p1->value->Show(false); $p1->SetLegends($legend); $graph->Add($p1); $graph->Stroke("../www/images/revcheck/info_revcheck_php_{$lang}.png"); }
function Stroke($img, $aVal, $x, $y) { if ($this->show) { if ($this->negformat == "") { $this->negformat = $this->format; } if ($this->negcolor == "") { $this->negcolor = $this->color; } if ($aVal === NULL || is_string($aVal) && ($aVal == "" || $aVal == "-" || $aVal == "x")) { return; } if (is_numeric($aVal) && $aVal == 0 && $this->iHideZero) { return; } // Since the value is used in different cirumstances we need to check what // kind of formatting we shall use. For example, to display values in a line // graph we simply display the formatted value, but in the case where the user // has already specified a text string we don't fo anything. if ($this->iFormCallback != '') { $f = $this->iFormCallback; $sval = call_user_func($f, $aVal); } elseif (is_numeric($aVal)) { if ($aVal >= 0) { $sval = sprintf($this->format, $aVal); } else { $sval = sprintf($this->negformat, $aVal); } } else { $sval = $aVal; } $y = $y - sign($aVal) * $this->margin; $txt = new Text($sval, $x, $y); $txt->SetFont($this->ff, $this->fs, $this->fsize); if ($this->valign == "") { if ($aVal >= 0) { $valign = "bottom"; } else { $valign = "top"; } } else { $valign = $this->valign; } $txt->Align($this->halign, $valign); $txt->SetOrientation($this->angle); if ($aVal > 0) { $txt->SetColor($this->color); } else { $txt->SetColor($this->negcolor); } $txt->Stroke($img); } }
function StrokeAngleLabels($pos, $type) { if (!$this->show_angle_label) { return; } $x0 = round($this->img->left_margin + $this->img->plotwidth / 2) + 1; $d = max($this->img->plotwidth, $this->img->plotheight) * 1.42; $a = $this->angle_step; $t = new Text(); $t->SetColor($this->angle_fontcolor); $t->SetFont($this->angle_fontfam, $this->angle_fontstyle, $this->angle_fontsize); $xright = $this->img->width - $this->img->right_margin; $ytop = $this->img->top_margin; $xleft = $this->img->left_margin; $ybottom = $this->img->height - $this->img->bottom_margin; $ha = 'left'; $va = 'center'; $w = $this->img->plotwidth / 2; $h = $this->img->plotheight / 2; $xt = $x0; $yt = $pos; $margin = 5; $tl = $this->angle_tick_len; // Outer len $tl2 = $this->angle_tick_len2; // Interior len $this->img->SetColor($this->angle_tick_color); $rot90 = $this->img->a == 90; if ($type == POLAR_360) { $ca1 = atan($h / $w) / M_PI * 180; $ca2 = 180 - $ca1; $ca3 = $ca1 + 180; $ca4 = 360 - $ca1; $end = 360; while ($a < $end) { $ca = cos($a / 180 * M_PI); $sa = sin($a / 180 * M_PI); $x = $d * $ca; $y = $d * $sa; $xt = 1000; $yt = 1000; if ($a <= $ca1 || $a >= $ca4) { $yt = $pos - $w * $y / $x; $xt = $xright + $margin; if ($rot90) { $ha = 'center'; $va = 'top'; } else { $ha = 'left'; $va = 'center'; } $x1 = $xright - $tl2; $x2 = $xright + $tl; $y1 = $y2 = $yt; } elseif ($a > $ca1 && $a < $ca2) { $xt = $x0 + $h * $x / $y; $yt = $ytop - $margin; if ($rot90) { $ha = 'left'; $va = 'center'; } else { $ha = 'center'; $va = 'bottom'; } $y1 = $ytop + $tl2; $y2 = $ytop - $tl; $x1 = $x2 = $xt; } elseif ($a >= $ca2 && $a <= $ca3) { $yt = $pos + $w * $y / $x; $xt = $xleft - $margin; if ($rot90) { $ha = 'center'; $va = 'bottom'; } else { $ha = 'right'; $va = 'center'; } $x1 = $xleft + $tl2; $x2 = $xleft - $tl; $y1 = $y2 = $yt; } else { $xt = $x0 - $h * $x / $y; $yt = $ybottom + $margin; if ($rot90) { $ha = 'right'; $va = 'center'; } else { $ha = 'center'; $va = 'top'; } $y1 = $ybottom - $tl2; $y2 = $ybottom + $tl; $x1 = $x2 = $xt; } if ($a != 0 && $a != 180) { $t->Align($ha, $va); if ($this->show_angle_mark) { $a .= '°'; } $t->Set($a); $t->Stroke($this->img, $xt, $yt); if ($this->show_angle_tick) { $this->img->Line($x1, $y1, $x2, $y2); } } $a += $this->angle_step; } } else { // POLAR_HALF $ca1 = atan($h / $w * 2) / M_PI * 180; $ca2 = 180 - $ca1; $end = 180; while ($a < $end) { $ca = cos($a / 180 * M_PI); $sa = sin($a / 180 * M_PI); $x = $d * $ca; $y = $d * $sa; if ($a <= $ca1) { $yt = $pos - $w * $y / $x; $xt = $xright + $margin; if ($rot90) { $ha = 'center'; $va = 'top'; } else { $ha = 'left'; $va = 'center'; } $x1 = $xright - $tl2; $x2 = $xright + $tl; $y1 = $y2 = $yt; } elseif ($a > $ca1 && $a < $ca2) { $xt = $x0 + 2 * $h * $x / $y; $yt = $ytop - $margin; if ($rot90) { $ha = 'left'; $va = 'center'; } else { $ha = 'center'; $va = 'bottom'; } $y1 = $ytop + $tl2; $y2 = $ytop - $tl; $x1 = $x2 = $xt; } elseif ($a >= $ca2) { $yt = $pos + $w * $y / $x; $xt = $xleft - $margin; if ($rot90) { $ha = 'center'; $va = 'bottom'; } else { $ha = 'right'; $va = 'center'; } $x1 = $xleft + $tl2; $x2 = $xleft - $tl; $y1 = $y2 = $yt; } $t->Align($ha, $va); if ($this->show_angle_mark) { $a .= '°'; } $t->Set($a); $t->Stroke($this->img, $xt, $yt); if ($this->show_angle_tick) { $this->img->Line($x1, $y1, $x2, $y2); } $a += $this->angle_step; } } }
function Stroke($aData, $aFile = '', $aShowDetails = false, $aShowEncodingDetails = false) { $textmargin = 5; $this->iEncoder->AddChecksum($this->iUseChecksum); $spec = $this->iEncoder->Enc($aData); $this->AdjustSpec($spec); if ($this->iFontFam == -1) { if ($this->iModuleWidth > 1) { $this->iFontFam = FF_FONT2; $this->iFontStyle = FS_BOLD; } else { $this->iFontFam = FF_FONT1; $this->iFontStyle = FS_BOLD; } } $s = ''; $n = count($spec->iBar); $g = new CanvasGraph(0, 0); $g->img->SetImgFormat($this->iImgFormat); if ($aShowDetails) { $s = $spec->iEncoding . "\n"; $s .= 'Data: ' . $spec->iData . "\n"; if ($spec->iInfo != '') { $s .= 'Info: ' . $spec->iInfo . "\n"; } } $w = round($spec->iModuleWidth); $totwidth = $spec->iLeftMargin * $w; $n = count($spec->iBar); for ($i = 0; $i < $n; ++$i) { $b = $spec->iBar[$i]; $bn = strlen($b[3]); for ($j = 0; $j < $bn; ++$j) { $wb = substr($b[3], $j, 1) * $w; $totwidth += $wb; } } if ($spec->iInterCharModuleSpace) { $totwidth += ($n - 2) * $w; } $totwidth += $spec->iRightMargin * $w + 1; $height = $this->iHeight; if ($aShowDetails) { $g->img->SetFont(FF_FONT2); $height += $g->img->GetTextHeight($s); } $g->img->SetFont($this->iFontFam, $this->iFontStyle, $this->iFontSize); $th = $g->img->GetTextHeight($spec->iData); if ($spec->iStrokeDataBelow) { $height += $th + $this->iDataBelowMargin; } if ($height < round(0.15 * ($totwidth - $spec->iRightMargin * $w - $spec->iLeftMargin * $w))) { $height = round(0.15 * $totwidth); } $g->img->SetFont(FF_FONT2); $tw = 2 * $textmargin + $g->img->GetTextWidth($s); $width = $totwidth; if ($width < $tw) { $width = $tw; } if ($aShowEncodingDetails) { $g->img->SetFont(FF_FONT2); $height += $n * $g->img->GetTextHeight('0'); $width = max(300, $totwidth); } $g = new CanvasGraph($width, $height); $g->img->SetImgFormat($this->iImgFormat); $g->SetMarginColor('white'); if ($this->iShowFrame) { $g->frame_color = $this->iFrameColor; $g->InitFrame(); } $g->img->SetColor('black'); $x = $w * $spec->iLeftMargin; $ystart = $this->iTopMargin; $yend = $height - $this->iBottomMargin - 1; if ($aShowDetails) { $ystart += $g->img->GetTextHeight($s); } if ($aShowEncodingDetails) { $g->img->SetFont(FF_FONT2); $ystart += $n * $g->img->GetTextHeight('0'); } if ($spec->iStrokeDataBelow) { $yend -= $th + $this->iDataBelowMargin; } $inunder = false; $under_s = ''; $under_x = 0; for ($i = 0; $i < $n; ++$i) { $b = $spec->iBar[$i]; if ($aShowEncodingDetails) { $s .= sprintf("%02d", $i) . " : {$b['0']}, {$b['1']}, {$b['2']}, {$b['3']}\n"; } $bn = strlen($b[3]); if ($b[2] == 0 && !$this->iNoHumanText) { if (!$inunder) { $inunder = true; $under_x = $x; $under_s = $b[0]; } else { $under_s .= $b[0]; } } else { if ($inunder) { $inunder = false; if ($under_s != '') { $t = new Text($under_s, ($under_x + $x - 1) / 2, $yend - $th / 1.3); $t->SetFont($this->iFontFam, $this->iFontStyle, $this->iFontSize); $t->Align('center', 'top'); $t->Stroke($g->img); } } } $startx = $x; for ($j = 0; $j < $bn; ++$j) { $wb = substr($b[3], $j, 1) * $w; if ($j % 2 == $b[1]) { $g->img->SetColor($this->iBkgColor); } else { $g->img->SetColor($this->iColor); } if ($b[2] == 1 || $this->iNoHumanText) { $g->img->FilledRectangle($x, $ystart, $x + $wb - 1, $yend); } else { $g->img->FilledRectangle($x, $ystart, $x + $wb - 1, $yend - $th); } $x += $wb; } if ($this->iDebugBackground) { $g->SetAlphaBlending(); if (($i & 1) == 0) { $g->img->SetColor('lightblue@0.5'); } else { $g->img->SetColor('yellow@0.5'); } $g->img->FilledRectangle($startx, $ystart - 2, $x, $yend); } if ($spec->iInterCharModuleSpace) { $x += $w; } } $g->img->SetColor($this->iColor); if (!($spec->iLeftData === '')) { $g->img->SetTextAlign('right', 'top'); $g->img->SetFont($this->iSmallFontFam, $this->iSmallFontStyle, $this->iSmallFontSize); $g->img->StrokeText($w * $spec->iLeftMargin - 3, $yend - $th, $spec->iLeftData); } if (!($spec->iRightData === '')) { $g->img->SetTextAlign('left', 'top'); $g->img->SetFont($this->iSmallFontFam, $this->iSmallFontStyle, $this->iSmallFontSize); $g->img->StrokeText($x + 3, $yend - $th, $spec->iRightData); } if ($spec->iStrokeDataBelow) { $y = $yend + $this->iDataBelowMargin; $bw = $totwidth - $spec->iLeftMargin * $w - $spec->iRightMargin * $w; $x = $spec->iLeftMargin * $w + floor($bw / 2); $g->img->SetTextAlign('center', 'top'); $g->img->SetFont($this->iFontFam, $this->iFontStyle, $this->iFontSize); if ($this->iHumanTxt !== '') { $g->img->StrokeText($x, $y, $this->iHumanTxt); } else { $g->img->StrokeText($x, $y, $spec->iData); } } if ($aShowDetails) { $g->img->SetColor('navy'); $g->img->SetTextAlign('left', 'top'); $g->img->SetFont(FF_FONT2); $g->img->StrokeText($textmargin, $this->iTopMargin, $s); } if (ADD_DEMOTXT === true) { $t = new Text("<<DEMO>>", $totwidth / 2, $ystart); if ($this->iModuleWidth > 1) { if ($this->iModuleWidth > 4) { $t->SetFont(FF_ARIAL, FS_BOLD, 32); $step = 140; $yadj = 50; } else { $t->SetFont(FF_ARIAL, FS_BOLD, 24); $step = 110; $yadj = 40; } } else { $t->SetFont(FF_ARIAL, FS_BOLD, 18); $step = 80; $yadj = 30; } $t->SetColor('red@0.4'); $t->Align('center', 'center'); $t->SetAngle(-25); $n = ceil($totwidth / $step); for ($i = 0; $i < $n; ++$i) { $t->SetPos(-30 + $i * $step, ($yend - $ystart) / 2 - $yadj); $t->Stroke($g->img); } } if ($this->iVertical) { $g->img->img = $this->Rotate($g->img->img, 90); } if ($this->iScale != 1) { $nwidth = round($width * $this->iScale); $nheight = round($height * $this->iScale); if ($this->iVertical) { $tmp = $height; $height = $width; $width = $tmp; $tmp = $nheight; $nheight = $nwidth; $nwidth = $tmp; } $img = @imagecreatetruecolor($nwidth, $nheight); if ($img) { imagealphablending($img, true); imagecopyresampled($img, $g->img->img, 0, 0, 0, 0, $nwidth, $nheight, $width, $height); $g->img->CreateImgCanvas($nwidth, $nheight); $g->img->img = $img; } else { return false; } } return $g->Stroke($aFile); }
function Raise($aMsg, $aHalt = true) { $img_iconerror = 'iVBORw0KGgoAAAANSUhEUgAAACgAAAAoCAMAAAC7IEhfAAAAaV' . 'BMVEX//////2Xy8mLl5V/Z2VvMzFi/v1WyslKlpU+ZmUyMjEh/' . 'f0VyckJlZT9YWDxMTDjAwMDy8sLl5bnY2K/MzKW/v5yyspKlpY' . 'iYmH+MjHY/PzV/f2xycmJlZVlZWU9MTEXY2Ms/PzwyMjLFTjea' . 'AAAAAXRSTlMAQObYZgAAAAFiS0dEAIgFHUgAAAAJcEhZcwAACx' . 'IAAAsSAdLdfvwAAAAHdElNRQfTBgISOCqusfs5AAABLUlEQVR4' . '2tWV3XKCMBBGWfkranCIVClKLd/7P2Q3QsgCxjDTq+6FE2cPH+' . 'xJ0Ogn2lQbsT+Wrs+buAZAV4W5T6Bs0YXBBwpKgEuIu+JERAX6' . 'wM2rHjmDdEITmsQEEmWADgZm6rAjhXsoMGY9B/NZBwJzBvn+e3' . 'wHntCAJdGu9SviwIwoZVDxPB9+Rc0TSEbQr0j3SA1gwdSn6Db0' . '6Tm1KfV6yzWGQO7zdpvyKLKBDmRFjzeB3LYgK7r6A/noDAfjtS' . 'IXaIzbJSv6WgUebTMV4EoRB8a2mQiQjgtF91HdKDKZ1gtFtQjk' . 'YcWaR5OKOhkYt+ZsTFdJRfPAApOpQYJTNHvCRSJR6SJngQadfc' . 'vd69OLMddVOPCGVnmrFD8bVYd3JXfxXPtLR/+mtv59/ALWiiMx' . 'qL72fwAAAABJRU5ErkJggg=='; if (function_exists('imagetypes')) { $supported = imagetypes(); } else { $supported = 0; } if (!function_exists('imagecreatefromstring')) { $supported = 0; } if (ob_get_length() || headers_sent() || !($supported & IMG_PNG)) { // Special case for headers already sent or that the installation doesn't support // the PNG format (which the error icon is encoded in). // Dont return an image since it can't be displayed echo $this->iTitle . ' ' . $aMsg . '\\n'; return; } $aMsg = wordwrap($aMsg, 55); $lines = substr_count($aMsg, '\\n'); // Create the error icon GD $erricon = imagecreatefromstring(base64_decode($img_iconerror)); // Create an image that contains the error text. $w = 400; $h = 100 + 15 * max(0, $lines - 3); $img = new Image($w, $h); // Drop shadow $img->SetColor('gray'); $img->FilledRectangle(5, 5, $w - 1, $h - 1, 10); $img->SetColor('gray:0.7'); $img->FilledRectangle(5, 5, $w - 3, $h - 3, 10); // Window background $img->SetColor(array(188, 209, 193)); $img->FilledRectangle(1, 1, $w - 5, $h - 5); $img->CopyCanvasH($img->img, $erricon, 5, 30, 0, 0, 40, 40); // Window border $img->SetColor('black'); $img->Rectangle(1, 1, $w - 5, $h - 5); $img->Rectangle(0, 0, $w - 4, $h - 4); // Window top row $img->SetColor('darkred'); for ($y = 3; $y < 18; $y += 2) { $img->Line(1, $y, $w - 6, $y); } // 'White shadow' $img->SetColor('white'); // Left window edge $img->Line(2, 2, 2, $h - 5); $img->Line(2, 2, $w - 6, 2); // 'Gray button shadow' $img->SetColor('darkgray'); // Gray window shadow $img->Line(2, $h - 6, $w - 5, $h - 6); $img->Line(3, $h - 7, $w - 5, $h - 7); // Window title $m = floor($w / 2 - 5); $l = 100; $img->SetColor('lightgray:1.3'); $img->FilledRectangle($m - $l, 2, $m + $l, 16); // Stroke text $img->SetColor('darkred:0.9'); $img->SetFont(FF_FONT2, FS_BOLD); $img->StrokeText($m - 70, 15, $this->iTitle); $img->SetColor('black'); $img->SetFont(FF_FONT1, FS_NORMAL); $txt = new Text($aMsg, 52, 25); $txt->Align('left', 'top'); $txt->Stroke($img); if ($this->iDest) { $img->Stream($this->iDest); } else { $img->Headers(); $img->Stream(); } }
function error_text($title, $text) { if (OFF == plugin_config_get('eczlibrary')) { $graph = new CanvasGraph(300, 380); $txt = new Text($text, 150, 100); $txt->Align("center", "center", "center"); $txt->SetFont($t_graph_font, FS_BOLD); $graph->title->Set($title); $graph->title->SetFont($t_graph_font, FS_BOLD); $graph->AddText($txt); $graph->Stroke(); } else { $im = imagecreate(300, 300); /* @todo check: error graphs dont support utf8 */ $bg = imagecolorallocate($im, 255, 255, 255); $textcolor = imagecolorallocate($im, 0, 0, 0); imagestring($im, 5, 0, 0, $text, $textcolor); header('Content-type: image/png'); imagepng($im); imagedestroy($im); } die; }
function error_check($bug_count, $title) { if (0 == $bug_count) { $t_graph_font = graph_get_font(); $graph = new CanvasGraph(300, 380); $txt = new Text(lang_get('not_enough_data'), 150, 100); $txt->Align("center", "center", "center"); $txt->SetFont($t_graph_font, FS_BOLD); $graph->title->Set($title); $graph->title->SetFont($t_graph_font, FS_BOLD); $graph->AddText($txt); $graph->Stroke(); die; } }
<?php // content="text/plain; charset=utf-8" // $Id: canvasex01.php,v 1.3 2002/10/23 08:17:23 aditus Exp $ require_once 'jpgraph/jpgraph.php'; require_once 'jpgraph/jpgraph_canvas.php'; // Setup a basic canvas we can work $g = new CanvasGraph(400, 300, 'auto'); $g->SetMargin(5, 11, 6, 11); $g->SetShadow(); $g->SetMarginColor("teal"); // We need to stroke the plotarea and margin before we add the // text since we otherwise would overwrite the text. $g->InitFrame(); // Draw a text box in the middle $txt = "This\nis\na TEXT!!!"; $t = new Text($txt, 200, 10); $t->SetFont(FF_ARIAL, FS_BOLD, 40); // How should the text box interpret the coordinates? $t->Align('center', 'top'); // How should the paragraph be aligned? $t->ParagraphAlign('center'); // Add a box around the text, white fill, black border and gray shadow $t->SetBox("white", "black", "gray"); // Stroke the text $t->Stroke($g->img); // Stroke the graph $g->Stroke(); ?>
function Stroke($aData, $aFile = '', $aOnlyDebug = false) { $topmargin = 10; $bottommargin = 10; $textmargin = 5; $txtmargin = 4; $this->iHeight *= $this->iModuleWidth; $spec = $this->iEncoder->Enc($aData); if ($aOnlyDebug) { return $spec->toString(); } $this->AdjustSpec($spec); $data = ''; if (is_array($aData)) { $n = count($aData); for ($i = 0; $i < $n; ++$i) { $data .= $aData[$i][1]; } } elseif (is_string($aData)) { $data = $aData; } if (!$this->iFontSpecified) { if ($this->iModuleWidth > 1) { $this->iFontFam = FF_ARIAL; $this->iFontStyle = FS_BOLD; $this->iFontSize = 10; } else { $this->iFontFam = FF_ARIAL; $this->iFontStyle = FS_NORMAL; $this->iFontSize = 7; } } $s = ''; $g = new CanvasGraph(0, 0); // Dummy graph context $g->img->SetImgFormat($this->iImgFormat); $w = round($spec->iModuleWidth); // Calculate total width $totwidth = $spec->iLeftMargin * $w; $n = count($spec->iBar[0]); for ($i = 0; $i < $n; ++$i) { $b = $spec->iBar[0][$i]; $bn = strlen($b[3]); for ($j = 0; $j < $bn; ++$j) { $wb = substr($b[3], $j, 1) * $w; $totwidth += $wb; } } $totwidth += $spec->iRightMargin * $w; // Calculate total height $height = $this->iHeight * count($spec->iBar) + $topmargin + $bottommargin; $g->img->SetFont($this->iFontFam, $this->iFontStyle, $this->iFontSize); $th = $g->img->GetTextHeight($data) + $txtmargin; if ($spec->iStrokeDataBelow) { $height += $th; } $width = $totwidth; $g->img->SetFont(FF_FONT2); $tw = 2 * $textmargin + $g->img->GetTextWidth($s); if ($width < $tw) { $width = $tw; } $g = new CanvasGraph($width, $height); $g->img->SetImgFormat($this->iImgFormat); $g->SetMarginColor($this->iBkgColor); $g->SetColor($this->iBkgColor); if ($this->iShowFrame) { $g->InitFrame(); } else { $g->frame_weight = 0; $g->InitFrame(); } $g->img->SetLineWeight(1); $g->img->SetColor('black'); $x = $w * $spec->iLeftMargin; $ystart = $topmargin; $inunder = false; $under_s = ''; $startx = $x; for ($r = 0; $r < count($spec->iBar); ++$r) { $yend = $ystart + $this->iHeight - 1; $x = $startx; for ($i = 0; $i < $n; ++$i) { $b = $spec->iBar[$r][$i]; $bn = strlen($b[3]); for ($j = 0; $j < $bn; ++$j) { $wb = substr($b[3], $j, 1) * $w; if (!($j % 2)) { $g->img->SetColor($this->iColor); $g->img->FilledRectangle($x, $ystart, $x + $wb - 1, $yend); } $x += $wb; } } $ystart += $this->iHeight; } // row $g->img->SetColor($this->iColor); if ($spec->iStrokeDataBelow) { // Center data underneath $y = $yend + $txtmargin; $bw = $totwidth - $spec->iLeftMargin * $w - $spec->iRightMargin * $w; $x = $spec->iLeftMargin * $w + floor($bw / 2); $g->img->SetTextAlign('center', 'top'); $g->img->SetFont($this->iFontFam, $this->iFontStyle, $this->iFontSize); $g->img->StrokeText($x, $y, $data); } if (ADD_DEMOTXT) { $ystart = 0; $t = new Text(" DEMO ", $totwidth / 2, $ystart); if ($this->iModuleWidth > 1) { if ($this->iModuleWidth > 2) { $t->SetFont(FF_ARIAL, FS_BOLD, 24); $step = 120; } else { $t->SetFont(FF_ARIAL, FS_BOLD, 16); $step = 100; } } else { $t->SetFont(FF_ARIAL, FS_BOLD, 12); $step = 80; } $t->SetColor('red@0.5'); $t->Align('center', 'top'); $t->SetAngle(-15); $n = ceil($totwidth / $step); for ($y = $ystart; $y < $yend; $y += 50) { for ($i = 0; $i < $n; ++$i) { $t->SetPos(-30 + $i * $step, $y); $t->Stroke($g->img); } } } if ($this->iVertical) { $g->img->img = $this->Rotate($g->img->img, 90); } if ($this->iScale != 1) { $nwidth = round($width * $this->iScale); $nheight = round($height * $this->iScale); if ($this->iVertical) { $tmp = $height; $height = $width; $width = $tmp; $tmp = $nheight; $nheight = $nwidth; $nwidth = $tmp; } $img = @imagecreatetruecolor($nwidth, $nheight); if ($img) { imagealphablending($img, true); imagecopyresampled($img, $g->img->img, 0, 0, 0, 0, $nwidth, $nheight, $width, $height); $g->img->CreateImgCanvas($nwidth, $nheight); $g->img->img = $img; } else { return false; } } $g->Stroke($aFile); return true; }
function Stroke(&$img, &$xscale, &$yscale) { $img->SetLineWeight($this->weight); for ($i = 0; $i < $this->numpoints - 1; $i++) { $accy = 0; $accy_neg = 0; for ($j = 0; $j < $this->nbrplots; ++$j) { $img->SetColor($this->plots[$j]->color); if ($this->plots[$j]->coords[0][$i] > 0) { $yt = $yscale->Translate($this->plots[$j]->coords[0][$i] + $accy); $accyt = $yscale->Translate($accy); $accy += $this->plots[$j]->coords[0][$i]; } else { $yt = $yscale->Translate($this->plots[$j]->coords[0][$i] + $accy_neg); $accyt = $yscale->Translate($accy_neg); $accy_neg += $this->plots[$j]->coords[0][$i]; } $xt = $xscale->Translate($i); $abswidth = round($this->width * $xscale->scale_factor, 0); $pts = array($xt, $accyt, $xt, $yt, $xt + $abswidth, $yt, $xt + $abswidth, $accyt); if ($this->plots[$j]->grad) { $grad = new Gradient($img); $grad->FilledRectangle($pts[2], $pts[3], $pts[6], $pts[7], $this->plots[$j]->grad_fromcolor, $this->plots[$j]->grad_tocolor, $this->plots[$j]->grad_style); } elseif ($this->plots[$j]->fill_color) { $img->SetColor($this->plots[$j]->fill_color); $img->FilledPolygon($pts, 4); $img->SetColor($this->plots[$j]->color); } if ($this->bar_shadow) { $ssh = $this->bar_shadow_hsize; $ssv = $this->bar_shadow_vsize; // Create points to create a "upper-right" shadow $sp[0] = $pts[6]; $sp[1] = $pts[7]; $sp[2] = $pts[4]; $sp[3] = $pts[5]; $sp[4] = $pts[2]; $sp[5] = $pts[3]; $sp[6] = $pts[2] + $ssh; $sp[7] = $pts[3] - $ssv; $sp[8] = $pts[4] + $ssh; $sp[9] = $pts[5] - $ssv; $sp[10] = $pts[6] + $ssh; $sp[11] = $pts[7] - $ssv; $img->SetColor($this->bar_shadow_color); $img->FilledPolygon($sp, 4); } if ($i < count($this->plots[$j]->csimtargets)) { $this->csimareas .= "<area shape=\"rect\" coords=\""; // Hmmm, this is fishy. Fixes a bug in Opera whereby if Y2<Y1 or X2<X1 the csim doesn't work // This means that the area MUST specify top left and bottom right corners if ($pts[3] < $pts[7]) { if ($pts[2] < $pts[6]) { $this->csimareas .= "{$pts['2']}, {$pts['3']}, {$pts['6']}, {$pts['7']}\""; } else { $this->csimareas .= "{$pts['6']}, {$pts['3']}, {$pts['2']}, {$pts['7']}\""; } } else { if ($pts[2] < $pts[6]) { $this->csimareas .= "{$pts['2']}, {$pts['7']}, {$pts['6']}, {$pts['3']}\""; } else { $this->csimareas .= "{$pts['6']}, {$pts['7']}, {$pts['2']}, {$pts['3']}\""; } } $this->csimareas .= " href=\"" . $this->plots[$j]->csimtargets[$i] . "\""; if (!empty($this->plots[$j]->csimalts[$i])) { $sval = sprintf($this->plots[$j]->csimalts[$i], $this->plots[$j]->coords[0][$i]); $this->csimareas .= " alt=\"{$sval}\""; } $this->csimareas .= ">\r\n"; } $img->Polygon($pts, 4); } $yt = $yscale->Translate($accy); if ($this->show_value) { $sval = sprintf($this->show_value_format, $accy); $txt = new Text($sval); $txt->SetFont($this->show_value_ff, $this->show_value_fs, $this->show_value_fsize); $txt->SetColor($this->show_value_color); $x = $pts[2] + ($pts[4] - $pts[2]) / 2; if ($this->bar_shadow) { $x += $ssh; } $txt->Pos($x, $yt - $this->show_value_margin); $txt->Align("center", "bottom"); $txt->SetOrientation($this->show_value_angle); $txt->Stroke($img); } } return true; }
function Stroke(&$img, &$xscale, &$yscale) { $numpoints = count($this->coords[0]); if (isset($this->coords[1])) { if (count($this->coords[1]) != $numpoints) { JpGraphError::Raise("JpGraph Error: Number of X and Y points are not equal.<br>\r\n\t\t\t\t\tNumber of X-points:" . count($this->coords[1]) . "<br>\r\n\t\t\t\t\tNumber of Y-points:{$numpoints}"); } else { $exist_x = true; } } else { $exist_x = false; } if ($exist_x) { $xs = $this->coords[1][0]; } else { $xs = 0; } $img->SetStartPoint($xscale->Translate($xs), $yscale->Translate($this->coords[0][0])); if ($this->filled) { $cord[] = $xscale->Translate($xs); $cord[] = $yscale->Translate($yscale->GetMinVal()); } $cord[] = $xscale->Translate($xs); $cord[] = $yscale->Translate($this->coords[0][0]); $yt_old = $yscale->Translate($this->coords[0][0]); $img->SetColor($this->color); $img->SetLineWeight($this->weight); $img->SetLineStyle($this->line_style); for ($pnts = 1; $pnts < $numpoints; ++$pnts) { if ($exist_x) { $x = $this->coords[1][$pnts]; } else { $x = $pnts; } $xt = $xscale->Translate($x); $yt = $yscale->Translate($this->coords[0][$pnts]); $cord[] = $xt; $cord[] = $yt; if ($this->step_style) { $img->StyleLineTo($xt, $yt_old); $img->StyleLineTo($xt, $yt); } else { $y = $this->coords[0][$pnts]; if (is_numeric($y) || is_string($y) && $y != "-") { $tmp1 = $this->coords[0][$pnts]; $tmp2 = $this->coords[0][$pnts - 1]; if (is_numeric($tmp1) && (is_numeric($tmp2) || $tmp2 == "-")) { $img->StyleLineTo($xt, $yt); } else { $img->SetStartPoint($xt, $yt); } } } $yt_old = $yt; if ($this->value->show) { $sval = sprintf($this->value->format, $this->coords[0][$pnts]); $txt = new Text($sval, $xt, $yt - $this->value->margin); $txt->SetFont($this->value->ff, $this->value->fs, $this->value->fsize); $txt->Align("center", "bottom"); $txt->SetOrientation($this->value->angle); $txt->SetColor($this->value->color); $txt->Stroke($img); } } if ($this->filled) { $cord[] = $xt; $cord[] = $yscale->Translate($yscale->GetMinVal()); $img->SetColor($this->fill_color); $img->FilledPolygon($cord); $img->SetColor($this->color); $img->Polygon($cord); } $adjust = 0; if ($this->filled) { $adjust = 2; } for ($i = $adjust; $i < count($cord) - $adjust; $i += 2) { if (is_numeric($this->coords[0][($i - $adjust) / 2])) { $this->mark->Stroke($img, $cord[$i], $cord[$i + 1]); } } }
function Stroke($img, $aVal, $x, $y) { if ($this->show) { if ($this->negformat == "") { $this->negformat = $this->format; } if ($this->negcolor == "") { $this->negcolor = $this->color; } if ($aVal == NULL || is_string($aVal) && ($aVal == "" || $aVal == "-" || $aVal == "x")) { return; } if ($aVal >= 0) { $sval = sprintf($this->format, $aVal); } else { $sval = sprintf($this->negformat, $aVal); } $txt = new Text($sval, $x, $y - sign($aVal) * $this->margin); $txt->SetFont($this->ff, $this->fs, $this->fsize); if ($this->valign == "") { if ($aVal >= 0) { $valign = "bottom"; } else { $valign = "top"; } } else { $valign = $this->valign; } $txt->Align($this->halign, $valign); $txt->SetOrientation($this->angle); if ($aVal > 0) { $txt->SetColor($this->color); } else { $txt->SetColor($this->negcolor); } $txt->Stroke($img); } }
function Raise($aMsg, $aHalt = true) { $img_iconerror = 'iVBORw0KGgoAAAANSUhEUgAAACgAAAAoCAMAAAC7IEhfAAAAaV' . 'BMVEX//////2Xy8mLl5V/Z2VvMzFi/v1WyslKlpU+ZmUyMjEh/' . 'f0VyckJlZT9YWDxMTDjAwMDy8sLl5bnY2K/MzKW/v5yyspKlpY' . 'iYmH+MjHY/PzV/f2xycmJlZVlZWU9MTEXY2Ms/PzwyMjLFTjea' . 'AAAAAXRSTlMAQObYZgAAAAFiS0dEAIgFHUgAAAAJcEhZcwAACx' . 'IAAAsSAdLdfvwAAAAHdElNRQfTBgISOCqusfs5AAABLUlEQVR4' . '2tWV3XKCMBBGWfkranCIVClKLd/7P2Q3QsgCxjDTq+6FE2cPH+' . 'xJ0Ogn2lQbsT+Wrs+buAZAV4W5T6Bs0YXBBwpKgEuIu+JERAX6' . 'wM2rHjmDdEITmsQEEmWADgZm6rAjhXsoMGY9B/NZBwJzBvn+e3' . 'wHntCAJdGu9SviwIwoZVDxPB9+Rc0TSEbQr0j3SA1gwdSn6Db0' . '6Tm1KfV6yzWGQO7zdpvyKLKBDmRFjzeB3LYgK7r6A/noDAfjtS' . 'IXaIzbJSv6WgUebTMV4EoRB8a2mQiQjgtF91HdKDKZ1gtFtQjk' . 'YcWaR5OKOhkYt+ZsTFdJRfPAApOpQYJTNHvCRSJR6SJngQadfc' . 'vd69OLMddVOPCGVnmrFD8bVYd3JXfxXPtLR/+mtv59/ALWiiMx' . 'qL72fwAAAABJRU5ErkJggg=='; if (function_exists("imagetypes")) { $supported = imagetypes(); } else { $supported = 0; } if (!function_exists('imagecreatefromstring')) { $supported = 0; } if (ob_get_length() || headers_sent() || !($supported & IMG_PNG)) { die($this->iTitle . ' ' . $aMsg); } $aMsg = wordwrap($aMsg, 55); $lines = substr_count($aMsg, "\n"); $erricon = Image::CreateFromString(base64_decode($img_iconerror)); $w = 400; $h = 100 + 15 * max(0, $lines - 3); $img = new Image($w, $h); $img->SetColor("gray"); $img->FilledRectangle(5, 5, $w - 1, $h - 1, 10); $img->SetColor("gray:0.7"); $img->FilledRectangle(5, 5, $w - 3, $h - 3, 10); $img->SetColor("lightblue"); $img->FilledRectangle(1, 1, $w - 5, $h - 5); $img->CopyCanvasH($img->img, $erricon, 5, 30, 0, 0, 40, 40); $img->SetColor("black"); $img->Rectangle(1, 1, $w - 5, $h - 5); $img->Rectangle(0, 0, $w - 4, $h - 4); $img->SetColor("darkred"); for ($y = 3; $y < 18; $y += 2) { $img->Line(1, $y, $w - 6, $y); } $img->SetColor("white"); $img->Line(2, 2, 2, $h - 5); $img->Line(2, 2, $w - 6, 2); $img->SetColor("darkgray"); $img->Line(2, $h - 6, $w - 5, $h - 6); $img->Line(3, $h - 7, $w - 5, $h - 7); $m = floor($w / 2 - 5); $l = 100; $img->SetColor("lightgray:1.3"); $img->FilledRectangle($m - $l, 2, $m + $l, 16); $img->SetColor("darkred"); $img->SetFont(FF_FONT2, FS_BOLD); $img->StrokeText($m - 50, 15, $this->iTitle); $img->SetColor("black"); $img->SetFont(FF_FONT1, FS_NORMAL); $txt = new Text($aMsg, 52, 25); $txt->Align("left", "top"); $txt->Stroke($img); if ($this->iDest) { $img->Stream($this->iDest); } else { $img->Headers(); $img->Stream(); } if ($aHalt) { die; } }
/** * Display Error 'graph' * * @param string $p_title Error title. * @param string $p_text Error text. * @todo check error graphs do not support utf8 * @return void */ function error_text($p_title, $p_text) { if (OFF == plugin_config_get('eczlibrary')) { $t_graph = new CanvasGraph(300, 380); $t_graph_font = graph_get_font(); $t_text = new Text($p_text, 150, 100); $t_text->Align('center', 'center', 'center'); $t_text->SetFont($t_graph_font, FS_BOLD); $t_graph->title->Set($p_title); $t_graph->title->SetFont($t_graph_font, FS_BOLD); $t_graph->AddText($t_text); $t_graph->Stroke(); } else { $t_image = imagecreate(300, 300); $t_text_color = imagecolorallocate($t_image, 0, 0, 0); imagestring($t_image, 5, 0, 0, $p_text, $t_text_color); header('Content-type: image/png'); imagepng($t_image); imagedestroy($t_image); } die; }
function Stroke(&$img, $aVal, $x, $y) { if ($this->show) { if ($this->negformat == "") { $this->negformat = $this->format; } if ($this->negcolor == "") { $this->negcolor = $this->color; } if ($aVal === NULL || is_string($aVal) && ($aVal == "" || $aVal == "-" || $aVal == "x")) { return; } if (is_numeric($aVal) && $aVal == 0 && $this->iHideZero) { return; } if ($this->iFormCallback != '') { $f = $this->iFormCallback; $sval = call_user_func($f, $aVal); } elseif (is_numeric($aVal)) { if ($aVal >= 0) { $sval = sprintf($this->format, $aVal); } else { $sval = sprintf($this->negformat, $aVal); } } else { $sval = $aVal; } $y = $y - sign($aVal) * $this->margin; $txt = new Text($sval, $x, $y); $txt->SetFont($this->ff, $this->fs, $this->fsize); if ($this->valign == "") { if ($aVal >= 0) { $valign = "bottom"; } else { $valign = "top"; } } else { $valign = $this->valign; } $txt->Align($this->halign, $valign); $txt->SetOrientation($this->angle); if ($aVal > 0) { $txt->SetColor($this->color); } else { $txt->SetColor($this->negcolor); } $txt->Stroke($img); } }