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); }
/** * @return Text */ private function addTextToGraph($msg, $padding_left, $padding_top, $font_weight, $font_size, $img_width) { $text = new Text($msg, $padding_left, $padding_top); $text->SetFont($this->getFont(), $font_weight, $font_size); $text->SetColor($this->getMainColor()); //word wrap $width = $text->GetWidth($this->jpgraph_instance->img) - $padding_left; $text->SetWordWrap(floor(strlen($msg) * ($this->img_width - 3 * $padding_left) / $width)); $text->Stroke($this->jpgraph_instance->img); return $text; }
function CreateMessage($header, $msg) { $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(); $text_width = $this->width - 50; if ($text_width < 100) { return; } $text = new Text($msg, 25, 25); $text->SetFont(FF_ARIAL, FS_NORMAL, 24); // $text->Align('left', 'top'); // $text->ParagraphAlign('left'); // $text->SetBox( "white", "black","gray"); $width = $text->GetWidth($this->graph->img); if ($width > $text_width) { $char_width = ceil($width / strlen($msg)); $cpl = $text_width / $char_width; /* Does not taken into the account by GetWidth function $text->SetWordWrap($cpl); */ $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); }
function Stroke($aImg, $ax = -1, $ay = -1) { // To position the super script correctly we need different // cases to handle the alignmewnt specified since that will // determine how we can interpret the x,y coordinates $w = parent::GetWidth($aImg); $h = parent::GetTextHeight($aImg); switch ($this->valign) { case 'top': $sy = $this->y; break; case 'center': $sy = $this->y - $h / 2; break; case 'bottom': $sy = $this->y - $h; break; default: JpGraphError::Raise('PANIC: Internal error in SuperScript::Stroke(). Unknown vertical alignment for text'); exit; } switch ($this->halign) { case 'left': $sx = $this->x + $w; break; case 'center': $sx = $this->x + $w / 2; break; case 'right': $sx = $this->x; break; default: JpGraphError::Raise('PANIC: Internal error in SuperScript::Stroke(). Unknown horizontal alignment for text'); exit; } $sx += $this->iSuperMargin; $sy += $this->iVertOverlap; // Should we automatically determine the font or // has the user specified it explicetly? if ($this->sfont_family == "") { if ($this->font_family <= FF_FONT2) { if ($this->font_family == FF_FONT0) { $sff = FF_FONT0; } elseif ($this->font_family == FF_FONT1) { if ($this->font_style == FS_NORMAL) { $sff = FF_FONT0; } else { $sff = FF_FONT1; } } else { $sff = FF_FONT1; } $sfs = $this->font_style; $sfz = $this->font_size; } else { // TTF fonts $sff = $this->font_family; $sfs = $this->font_style; $sfz = floor($this->font_size * $this->iSuperScale); if ($sfz < 8) { $sfz = 8; } } $this->sfont_family = $sff; $this->sfont_style = $sfs; $this->sfont_size = $sfz; } else { $sff = $this->sfont_family; $sfs = $this->sfont_style; $sfz = $this->sfont_size; } parent::Stroke($aImg, $ax, $ay); // For the builtin fonts we need to reduce the margins // since the bounding bx reported for the builtin fonts // are much larger than for the TTF fonts. if ($sff <= FF_FONT2) { $sx -= 2; $sy += 3; } $aImg->SetTextAlign('left', 'bottom'); $aImg->SetFont($sff, $sfs, $sfz); $aImg->PushColor($this->color); $aImg->StrokeText($sx, $sy, $this->iSuper, $this->iSDir, 'left'); $aImg->PopColor(); }
function getWidth($aImg) { $scaling = 1; //$this->iAntiAlias ? 2 : 1 ; if ($this->iSize > 0 && $this->iSize < 1) { $this->iSize *= min($aImg->width, $aImg->height); } $value = new Text(); $value->SetFont($this->iFontFamily, $this->iFontStyle, $this->iFontSize * $scaling); $value->SetColor($this->iFontColor); // Setup extra size around the graph needed so that the labels // doesn't get cut. For this we need to find the largest label. // The code below gives a possible a little to large margin. The // really, really proper way would be to account for what angle // the label are at $n = count($this->iLabels); if ($n > 0) { $maxh = 0; $maxw = 0; foreach ($this->iLabels as $key => $lbl) { $value->Set($lbl); $maxw = max($maxw, $value->GetWidth($aImg)); } } else { $value->Set('888.888'); // Dummy value to get width/height $maxw = $value->GetWidth($aImg); } // Add an extra margin of 50% the font size $maxw += round($this->iFontSize * $scaling * 0.4); $valxmarg = 1.5 * $maxw + 2 * $this->iLabelMargin * $scaling; $w = round($this->iSize * $scaling + $valxmarg); // Make sure that the width of the legend fits $legendwidth = $this->_StrokeLegend($aImg, 0, 0, $scaling, true) + 10 * $scaling; $w = max($w, $legendwidth); return $w; }
function Stroke(&$aImg) { $scaling = $this->iAntiAlias ? 2 : 1; $value = new Text(); $value->SetFont($this->iFontFamily, $this->iFontStyle, $this->iFontSize * $scaling); $value->SetColor($this->iFontColor); $n = count($this->iLabels); if ($n > 0) { $maxh = 0; $maxw = 0; foreach ($this->iLabels as $key => $lbl) { $value->Set($lbl); $maxh = max($maxh, $value->GetHeight($aImg)); $maxw = max($maxw, $value->GetWidth($aImg) / 2); } } else { $value->Set("180.8"); $maxh = $value->GetHeight($aImg); $maxw = $value->GetWidth($aImg); } $maxh += round($this->iFontSize * $scaling * 0.5); $maxw += round($this->iFontSize * $scaling * 0.5); $valxmarg = 2 * $maxw + 2 * $this->iLabelMargin * $scaling; $valymarg = 2 * $maxh + 2 * $this->iLabelMargin * $scaling; $w = round($this->iSize * $scaling + $valxmarg); $legendwidth = $this->_StrokeLegend($aImg, 0, 0, $scaling, true) + 10 * $scaling; $w = max($w, $legendwidth); $legendheight = round($this->legend->iShow ? 1 : 0); $legendheight *= max($this->legend->iCircleRadius * 2, $this->legend->iTxtFontSize * 2) + $this->legend->iMargin + $this->legend->iBottomMargin + 2; $legendheight *= $scaling; $h = round($this->iSize * $scaling + $valymarg) + $legendheight; if ($this->iAntiAlias) { $dblImg = new Image($w, $h); $dblImg->SetColor($this->iColor); $dblImg->FilledRectangle(0, 0, $w, $h); } else { $dblImg =& $aImg; $dblImg->SetTranslation($this->iX - $w / 2, $this->iY - $h / 2); } if (__DEBUG) { $dblImg->SetColor('red'); $dblImg->Rectangle(0, 0, $w - 1, $h - 1); } $dblImg->SetColor('black'); if ($this->iShowBox) { $dblImg->SetColor($this->iBoxColor); $dblImg->SetLineWeight($this->iBoxWeight); $dblImg->Rectangle(0, 0, $w - 1, $h - 1); $dblImg->SetLineWeight(1); } $xc = round($w / 2); $yc = round(($h - $legendheight) / 2); $this->iSize *= $scaling; $ri = $this->iCenterSize / 2; $r = round($this->iSize / 2); $n = $this->scale->GetNumCirc(); $ri *= $scaling; $rr = round(($r - $ri) / $n); for ($i = 1; $i <= $n; ++$i) { $this->_ThickCircle($dblImg, $xc, $yc, $rr * $i + $ri, $this->iCircGridWeight, $this->iGridColor1); } $num = 0; if ($this->iType == WINDROSE_TYPEFREE) { $this->_StrokeFreeRose($dblImg, $value, $scaling, $xc, $yc, $r, $ri); } else { if ($this->iOrdinalEncoding == KEYENCODING_CLOCKWISE) { if ($this->iType == WINDROSE_TYPE16) { $const1 = 19; $const2 = 16; } elseif ($this->iType == WINDROSE_TYPE8) { $const1 = 9; $const2 = 8; } else { $const1 = 4; $const2 = 4; } $tmp = array(); $n = count($this->iData); foreach ($this->iData as $key => $val) { if (is_numeric($key)) { $key = ($const1 - $key) % $const2; } $tmp[$key] = $val; } $this->iData = $tmp; } $this->_StrokeRegularRose($dblImg, $value, $scaling, $xc, $yc, $r, $ri); } $this->scale->iFontSize *= $scaling; $this->scale->iZFontSize *= $scaling; $this->scale->StrokeLabels($dblImg, $xc, $yc, $ri, $rr); $this->_ThickCircle($dblImg, $xc, $yc, $ri, $this->iCircGridWeight, $this->iGridColor1); $ww = $w / $scaling; $hh = $h / $scaling; if ($ww > $aImg->width) { JpgraphError::RaiseL(22020); } $x = $xc; $y = $h; $this->_StrokeLegend($dblImg, $x, $y, $scaling); if ($this->iAntiAlias) { $aImg->Copy($dblImg->img, $this->iX - $ww / 2, $this->iY - $hh / 2, 0, 0, $ww, $hh, $w, $h); } $aImg->SetTranslation(0, 0); }
/** * @param Image $aImg * @return unknown_type */ function getWidth(Image $aImg) { if (!$this->ishow) { return 0; } $this->InitSize($aImg); $t = new Text(); $t->SetFont($this->iFontFamily, $this->iFontStyle, $this->iFontSize); if ($this->ilayout == 0 || $this->ilayout == 2) { $t->Set(sprintf($this->iLabelFormatString, $this->iMin)); $minw = $t->GetWidth($aImg); $t->Set(sprintf($this->iLabelFormatString, $this->iMax)); $maxw = $t->GetWidth($aImg); return $this->imodwidth + $this->ilabelmargin + max($minw, $maxw) + 1; } }
function Stroke(&$aImg, $ax = -1, $ay = -1) { $w = parent::GetWidth($aImg); $h = parent::GetTextHeight($aImg); switch ($this->valign) { case 'top': $sy = $this->y; break; case 'center': $sy = $this->y - $h / 2; break; case 'bottom': $sy = $this->y - $h; break; default: JpGraphError::RaiseL(25052); break; } switch ($this->halign) { case 'left': $sx = $this->x + $w; break; case 'center': $sx = $this->x + $w / 2; break; case 'right': $sx = $this->x; break; default: JpGraphError::RaiseL(25053); break; } $sx += $this->iSuperMargin; $sy += $this->iVertOverlap; if ($this->sfont_family == "") { if ($this->font_family <= FF_FONT2) { if ($this->font_family == FF_FONT0) { $sff = FF_FONT0; } elseif ($this->font_family == FF_FONT1) { if ($this->font_style == FS_NORMAL) { $sff = FF_FONT0; } else { $sff = FF_FONT1; } } else { $sff = FF_FONT1; } $sfs = $this->font_style; $sfz = $this->font_size; } else { $sff = $this->font_family; $sfs = $this->font_style; $sfz = floor($this->font_size * $this->iSuperScale); if ($sfz < 8) { $sfz = 8; } } $this->sfont_family = $sff; $this->sfont_style = $sfs; $this->sfont_size = $sfz; } else { $sff = $this->sfont_family; $sfs = $this->sfont_style; $sfz = $this->sfont_size; } parent::Stroke($aImg, $ax, $ay); if ($sff <= FF_FONT2) { $sx -= 2; $sy += 3; } $aImg->SetTextAlign('left', 'bottom'); $aImg->SetFont($sff, $sfs, $sfz); $aImg->PushColor($this->color); $aImg->StrokeText($sx, $sy, $this->iSuper, $this->iSDir, 'left'); $aImg->PopColor(); }
private function barVPlot($question, $datax, $datay, $width, $height) { include_once BASE . "jpgraph.php"; include_once BASE . "jpgraph_bar.php"; $tFontSize = 11; $xFontSize = 6 + $height / $this->amountOfVariants / 30; $maxX = 0; foreach ($datax as $x) { if (($t = strlen($x)) > $maxX) { $maxX = $t; } } for ($i = 0; $i < $this->amountOfVariants; $i++) { $x =& $datax[$i]; if (($t = strlen($x)) >= MAXCHARSPERLINE) { $index = strrpos(substr($x, 0, MAXCHARSPERLINE - 1), ' '); if ($index === false) { $index = MAXCHARSPERLINE - 3; } $x[$index] = "\n"; if ($t > $index + MAXCHARSPERLINE) { $x = substr($x, 0, $index + MAXCHARSPERLINE - 3) . "..."; } } } unset($x); // Set the basic parame graph $graph = new Graph($width, $height, 'auto'); $graph->SetScale("textlin", 0, 100); //if (amountOfVariants>5) $xFontSize--; $lm = 0; foreach ($datax as $x) { $linia = strtok($x, "\n"); while ($linia != '') { $t = new Text($linia); $t->SetFont(FF_COMIC, FS_NORMAL, $xFontSize); $lineWidth = $t->GetWidth($graph->img); if ($lineWidth > $lm) { $lm = $lineWidth; } //echo $linia.$lineWidth."<BR>"; $linia = strtok("\n"); } } // Rotate graph 90 degrees and set margin $graph->SetMargin(35, 20, 40, $lm + 15); // Set white margin color $graph->SetMarginColor('gray@0.95'); // Setup title //$graph->title->Set($question); //$graph->title->SetMargin(10); //$graph->title->SetFont(FF_VERDANA, FS_BOLD, $tFontSize); $graph->tabtitle->Set($question); $graph->tabtitle->SetFont(FF_ARIAL, FS_BOLD, $tFontSize); $tWidth = $graph->tabtitle->GetWidth($graph->img); //if ($graph->title->GetWidth($graph->img)>$width) $graph->title->SetFont(FF_VERDANA, FS_BOLD, $tFontSize-2); if ($tWidth > $width) { $index = strrpos(substr($question, 0, ($len = strlen($question)) / 2 + 5), ' '); //echo $index; if ($index === false) { $index = $len / 2 - 3; } $question[$index] = "\n"; $graph->tabtitle->Set($question); $graph->tabtitle->SetFont(FF_ARIAL, FS_BOLD, $tFontSize -= 2); } // Setup X-axis $graph->xaxis->SetFont(FF_COMIC, FS_NORMAL, $xFontSize); $graph->xaxis->SetTickLabels($datax); $graph->xaxis->SetColor('black'); $graph->xaxis->SetLabelAngle(80); // Some extra margin looks nicer $graph->xaxis->SetLabelMargin(10); // Label align for X-axis $graph->xaxis->SetLabelAlign('center', 'top'); // Add some grace to y-axis so the bars doesn't go // all the way to the end of the plot area $graph->yaxis->scale->SetGrace(10); //$graph->yaxis->SetPos('max'); //$graph->yaxis->SetLabelAlign('center', 'top'); //$graph->yaxis->SetLabelSide('SIDE_RIGHT'); $graph->yaxis->SetLabelFormat('%2d%%'); // Now create a bar pot $bplot = new BarPlot($datay); $bplot->SetWidth(0.4); // We want to display the value of each bar at the top $bplot->value->Show(); $bplot->value->SetFont(FF_VERDANA, FS_NORMAL, $xFontSize); //$bplot->SetShadow("black@0.1",2,2); //$bplot->value->SetAlign('left','center'); $bplot->value->SetColor("black"); $bplot->value->SetFormat('%d%%'); //$bplot->SetValuePos('max'); //$graph->SetMarginColor('green'); // Box around plotarea $graph->SetBox(); $graph->SetFrame(false); // $graph->SetShadow(); // Setup the X and Y grid $graph->ygrid->SetFill(true, '#DDDDDD@0.5', '#BBBBBB@0.5'); $graph->ygrid->SetLineStyle('dashed'); $graph->ygrid->SetColor('gray'); $graph->xgrid->Show(); $graph->xgrid->SetLineStyle('dashed'); $graph->xgrid->SetColor('gray'); $fcol = '#440000'; $tcol = '#FF9090'; $bplot->SetFillGradient($fcol, $tcol, GRAD_LEFT_REFLECTION); // Set line weigth to 0 so that there are no border // around each bar $bplot->SetWeight(0); $graph->Add($bplot); // .. and stroke the graph return $graph->Stroke("images/raporty/{$this->id_pytanie}V.png"); //header("Content-type: image/png"); //ImagePng($im); }