Ejemplo n.º 1
0
 /**
  * Draw circle 
  * 
  * @param ezcGraphCoordinate $center Center of ellipse
  * @param mixed $width Width of ellipse
  * @param mixed $height height of ellipse
  * @param ezcGraphColor $color Color
  * @param mixed $filled Filled
  * @return void
  */
 public function drawCircle(ezcGraphCoordinate $center, $width, $height, ezcGraphColor $color, $filled = true)
 {
     $this->initiliazeSurface();
     $this->context->save();
     // Draw circular arc path
     $this->context->newPath();
     $this->context->translate($center->x, $center->y);
     $this->context->scale(1, $height / $width);
     $this->context->arc(0.0, 0.0, $width / 2, 0, 2 * M_PI);
     $this->context->restore();
     $this->getStyle($color, $filled);
     $this->context->stroke();
     // Create polygon array to return
     $polygonArray = array();
     for ($angle = 0; $angle < 2 * M_PI; $angle += deg2rad($this->options->imageMapResolution)) {
         $polygonArray[] = new ezcGraphCoordinate($center->x + cos($angle) * $width / 2, $center->y + sin($angle) * $height / 2);
     }
     return $polygonArray;
 }
<?php

$sur = new CairoImageSurface(CairoFormat::ARGB32, 100, 100);
$con = new CairoContext($sur);
$s = new CairoImageSurface(CairoFormat::ARGB32, 1, 1);
$s->createFromPng(dirname(__FILE__) . "/romedalen.png");
$con->setSourceRgb(0, 0, 0);
$con->rectangle(0, 0, 100, 100);
$con->fill();
$con->translate(10, 10);
$con->setOperator(CairoOperator::OVER);
$con->setSourceSurface($s, 0, 0);
$con->rectangle(0, 0, 90, 90);
$con->fill();
$sur->writeToPng(dirname(__FILE__) . "/composite-integer-translate-over-php.png");
?>

Ejemplo n.º 3
0
$sur = new CairoImageSurface(CairoFormat::ARGB32, 3 * (3 + 6 + 3), 8 * (6 + 3) + 3);
$con = new CairoContext($sur);
$cap = array(CairoLineCap::ROUND, CairoLineCap::SQUARE, CairoLineCap::BUTT);
$dash = array(2.0, 2.0);
$dash_long = array(6.0, 6.0);
$con->setSourceRgb(1, 0, 0);
for ($i = 0; $i < 3; $i++) {
    $con->save();
    $con->setLineCap($cap[$i]);
    /* simple degenerate paths */
    $con->setLineWidth(6);
    $con->moveTo(6, 6);
    $con->lineTo(6, 6);
    $con->stroke();
    $con->translate(0, 3 * 3);
    $con->moveTo(6, 6);
    $con->closePath();
    $con->stroke();
    /* degenerate paths starting with dash on */
    $con->setDash($dash, 0.0);
    $con->translate(0, 3 * 3);
    $con->moveTo(6, 6);
    $con->lineTo(6, 6);
    $con->stroke();
    $con->translate(0, 3 * 3);
    $con->moveTo(6, 6);
    $con->closePath();
    $con->stroke();
    /* degenerate paths starting with dash off */
    /* these should not draw anything */
Ejemplo n.º 4
0
function render_svg($filepath, $w, $h, DOMElement $node)
{
    static $svgRenderCache = array();
    if (!isset($svgRenderCache[$filepath . $w . $h])) {
        $filename = tempnam(dirname($filepath), "ca_dompdf_img_");
        $svg = file_get_contents($filepath);
        $renderSupersample = DOMPDF_SVG_SUPERSAMPLE;
        $rsvg = rsvg_create($svg);
        $dim = $rsvg->getDimensions();
        if ($node) {
            $viewBox = explode(' ', $node->getAttribute('viewbox'));
            if (count($viewBox) == 4) {
                list($innerx, $innery, $innerwidth, $innerheight) = $viewBox;
            } else {
                list($innerx, $innery, $innerwidth, $innerheight) = [0, 0, $dim['width'], $dim['height']];
            }
        } else {
            list($innerx, $innery, $innerwidth, $innerheight) = [0, 0, $dim['width'], $dim['height']];
        }
        $scaleW = $w / $innerwidth;
        $scaleH = $h / $innerheight;
        $matrixScale = min($scaleW, $scaleH);
        $csf = cairo_image_surface_create(CairoFormat::ARGB32, floor($w * $renderSupersample), floor($h * $renderSupersample));
        $cctx = new CairoContext($csf);
        $cctx->setMatrix(CairoMatrix::initScale($renderSupersample * $matrixScale, $renderSupersample * $matrixScale));
        $cctx->translate(-$innerx, $innery);
        $rsvg->render($cctx);
        $csf->writeToPng($filename);
        return $svgRenderCache[$filepath . $w . $h] = $filename;
    } else {
        return $svgRenderCache[$filepath . $w . $h];
    }
}
Ejemplo n.º 5
0
<?php

$sur = new CairoImageSurface(CairoFormat::ARGB32, 120, 100);
$con = new CairoContext($sur);
$con->setSourceRgb(1, 1, 1);
$con->paint();
$con->setSourceRgb(0, 0, 0);
$con->setMiterLimit(100000);
for ($xscale = 1; $xscale <= 1000; $xscale += 999) {
    for ($yscale = 1; $yscale <= 1000; $yscale += 999) {
        //$max_scale = ($xscale > $yscale) ? $xscale : $yscale;
        $max_scale = max($xscale, $yscale);
        $con->save();
        if ($xscale > 1) {
            $con->translate(50, 0);
        }
        if ($yscale > 1) {
            $con->translate(0, 50);
        }
        $con->scale($xscale, $yscale);
        $con->setLineWidth(10.0 / $max_scale);
        $con->moveTo(10.0 / $xscale, 10.0 / $yscale);
        $con->lineTo(40.0 / $xscale, 10.0 / $yscale);
        $con->lineTo(10.0 / $xscale, 30.0 / $yscale);
        $con->stroke();
        $con->restore();
    }
}
$sur->writeToPng(dirname(__FILE__) . "/miter-precision-php.png");
Ejemplo n.º 6
0
<?php

$sur = new CairoImageSurface(CairoFormat::ARGB32, 36, 36);
$con = new CairoContext($sur);
$s = new CairoImageSurface(CairoFormat::ARGB32, 2, 2);
$con2 = new CairoContext($s);
$con2->setSourceRgb(1, 0, 0);
$con2->paint();
$con2->setSourceRgb(0, 0, 1);
$con2->rectangle(0, 1, 1, 1);
$con2->rectangle(1, 0, 1, 1);
$con2->fill();
$con->setSourceRgb(0, 0, 0);
$con->paint();
$con->save();
$con->translate(3, 3);
$con->scale(10, 10);
$con->translate(0.5, 0.5);
$con->setSourceSurface($s, 0, 0);
$con->paint();
$con->restore();
$sur->writeToPng(dirname(__FILE__) . "/filter-bilinear-extents-php.png");
?>


Ejemplo n.º 7
0
<?php

$sur = new CairoImageSurface(CairoFormat::ARGB32, 10, 10);
$con = new CairoContext($sur);
$con->setSourceRgb(0, 0, 1);
$con->paint();
$con->resetClip();
$con->clip();
$con->translate(0.5, 0.5);
$con->setSourceRgb(0, 1, 0);
$con->rectangle(0, 0, 10, 10);
$con->fillPreserve();
$con->setSourceRgb(1, 0, 0);
$con->stroke();
$con->selectFontFace("Bitstream Vera Sans", CairoFontSlant::NORMAL, CairoFontWeight::NORMAL);
$con->moveTo(0, 10);
$con->showText("cairo");
$sur->writeToPng(dirname(__FILE__) . "/clip-empty-php.png");
Ejemplo n.º 8
0
<?php

$starsize = 20;
$sur = new CairoImageSurface(CairoFormat::ARGB32, $starsize * 2 + 2, $starsize + 2);
$con = new CairoContext($sur);
$con->setSourceRgb(1, 0, 0);
$con->translate(1, 1);
$con->save();
$con->moveTo(10, 0);
$con->relLineTo(6, 20);
$con->relLineTo(-16, -12);
$con->relLineTo(20, 0);
$con->relLineTo(-16, 12);
$con->setFillRule(CairoFillRule::WINDING);
$con->clip();
$con->paint();
$con->restore();
$con->translate($starsize + 1, 0);
$con->save();
$con->moveTo(10, 0);
$con->relLineTo(6, 20);
$con->relLineTo(-16, -12);
$con->relLineTo(20, 0);
$con->relLineTo(-16, 12);
$con->setFillRule(CairoFillRule::EVEN_ODD);
$con->clip();
$con->paint();
$con->restore();
$sur->writeToPng(dirname(__FILE__) . "/clip-fill-rule-php.png");
?>
Ejemplo n.º 9
0
<?php

$size = 25;
$sur = new CairoImageSurface(CairoFormat::ARGB32, $size, $size);
$con = new CairoContext($sur);
/* Paint background white, then draw in black. */
$con->setSourceRgb(1.0, 1.0, 1.0);
/* white */
$con->paint();
$con->setSourceRgb(0.0, 0.0, 0.0);
/* black */
$con->setLineWidth(1.0);
$con->translate(1, 1);
/* Draw everything first with square caps. */
$con->setLineCap(CairoLineCap::SQUARE);
/* Draw horizontal and vertical segments, each in both
 * directions. */
$con->moveTo(4.5, 0.5);
$con->relLineTo(2.0, 0.0);
$con->moveTo(10.5, 4.5);
$con->relLineTo(0.0, 2.0);
$con->moveTo(6.5, 10.5);
$con->relLineTo(-2.0, 0.0);
$con->moveTo(0.5, 6.5);
$con->relLineTo(0.0, -2.0);
/* Draw right angle turns in four directions. */
$con->moveTo(0.5, 2.5);
$con->relLineTo(0.0, -2.0);
$con->relLineTo(2.0, 0.0);
$con->moveTo(8.5, 0.5);
$con->relLineTo(2.0, 0.0);
Ejemplo n.º 10
0
$con->setSourceRgb(0, 0, 1);
$fo->setHintStyle(Cairo::HINT_STYLE_NONE);
$con->setFontOptions($fo);
$con->showText("the ");
$fo->setHintStyle(Cairo::HINT_STYLE_SLIGHT);
$con->setFontOptions($fo);
$con->showText("quick ");
$fo->setHintStyle(Cairo::HINT_STYLE_MEDIUM);
$con->setFontOptions($fo);
$con->showText("brown");
$fo->setHintStyle(Cairo::HINT_STYLE_FULL);
$con->setFontOptions($fo);
$con->showText(" fox");
$con->textPath(" jumps over a lazy dog");
$con->fill();
$con->translate($width, $height);
$con->rotate(M_PI);
$con->moveTo(1, $fe["height"] - $fe["descent"] - 1);
$fo->setHintMetrics(CairoHintMetrics::METRICS_OFF);
$fo->setHintStyle(Cairo::HINT_STYLE_NONE);
$con->setFontOptions($fo);
$con->showText("the ");
$fo->setHintStyle(Cairo::HINT_STYLE_SLIGHT);
$con->setFontOptions($fo);
$con->showText("quick");
$fo->setHintStyle(Cairo::HINT_STYLE_MEDIUM);
$con->setFontOptions($fo);
$con->showText(" brown");
$fo->setHintStyle(Cairo::HINT_STYLE_FULL);
$con->setFontOptions($fo);
$con->showText(" fox");
Ejemplo n.º 11
0
    $con->arc(0, 0, $cisize / 2, 0, 2 * M_PI);
    $con->fill();
    $con->restore();
}
function draw_circles()
{
    global $con, $cisize;
    draw_circle(0, $cisize * -0.1);
    draw_circle($cisize * 0.4, $cisize * 0.25);
    draw_circle($cisize * 2, 0);
    draw_circle($cisize * 4, 0);
    draw_circle($cisize * 6, 0);
}
$sur = new CairoImageSurface(CairoFormat::ARGB32, $width, $height);
$con = new CairoContext($sur);
$con->translate($pad, $pad);
$con->setSourceRgb(0, 1, 0);
$con->setOperator(CairoOperator::OVER);
draw_circle($cisize * 0.5, $cisize * 1.5);
$con->setSourceRgb(1, 0, 0);
$con->setOperator(CairoOperator::ADD);
draw_circle($cisize * 0.75, $cisize * 1.75);
$con->setSourceRgb(0, 1, 0);
$con->setOperator(CairoOperator::OVER);
$con->translate($cisize * 2.5, $cisize * 0.6);
draw_circles();
$con->setSourceRgb(1, 0, 0);
$con->setOperator(CairoOperator::ADD);
$con->translate(0, $cisize * 2);
draw_circles();
$sur->writeToPng(dirname(__FILE__) . "/finer-grained-fallbacks-php.png");
Ejemplo n.º 12
0
<?php

$sur = new CairoImageSurface(CairoFormat::RGB24, 165, 30);
$con = new CairoContext($sur);
$con->moveTo(0, 0);
$con->setSourceRgb(1, 1, 1);
$con->paint();
$con->setSourceRgb(0, 0, 0);
$con->moveTo(0, 0);
$con->translate(5, 5);
/* First compress the pen to a vertical line. */
$con->rectangle(0, 0, 20, 20);
$con->curveTo(20 / 2, 0, 20, 20 / 2, 20, 20);
$con->save();
$con->scale(1.0E-5, 1.0);
$con->stroke();
$con->restore();
$con->translate(5 + 20, 0);
/* Then compress the pen to a horizontal line. */
$con->rectangle(0, 0, 20, 20);
$con->curveTo(20 / 2, 0, 20, 20 / 2, 20, 20);
$con->save();
$con->scale(1.0, 1.0E-5);
$con->stroke();
$con->restore();
$con->translate(5 + 20, 0);
/* Finally a line at an angle. */
$con->rectangle(0, 0, 20, 20);
$con->curveTo(20 / 2, 0, 20, 20 / 2, 20, 20);
$con->save();
$con->rotate(M_PI / 4.0);
Ejemplo n.º 13
0
    $con->stroke();
    $con->save();
    $con->setDash($dash, 0.0);
    $con->moveTo(0, 0);
    $con->arc(0, 0, 12.5, 0, 3 * M_PI / 2);
    $con->closePath();
    $con->stroke();
    $con->restore();
}
$sur = new CairoImageSurface(CairoFormat::ARGB32, 200, 200);
$con = new CairoContext($sur);
$con->setSourceRgb(1, 1, 1);
$con->paint();
$con->setSourceRgb(0, 0, 0);
$con->save();
$con->translate(50, 50);
$con->scale(1, 1);
draw_symbol($con);
$con->restore();
$con->save();
$con->translate(150, 50);
$con->scale(-1, 1);
draw_symbol($con);
$con->restore();
$con->save();
$con->translate(150, 150);
$con->scale(-1, -1);
draw_symbol($con);
$con->restore();
$con->save();
$con->translate(50, 150);
Ejemplo n.º 14
0
<?php

$sur = new CairoImageSurface(CairoFormat::ARGB32, 10, 20);
$con = new CairoContext($sur);
$con->translate(1.0, 1.0);
$con->setSourceRgb(1, 0, 0);
/* red */
/* First draw the desired shape with a fill */
$con->rectangle(0.5, 0.5, 4.0, 4.0);
$con->rectangle(3.5, 3.5, 4.0, 4.0);
$con->rectangle(3.5, 1.5, -2.0, 2.0);
$con->rectangle(6.5, 4.5, -2.0, 2.0);
$con->fill();
/* Then try the same thing with a stroke */
$con->translate(0, 10);
$con->moveTo(1.0, 1.0);
$con->relLineTo(3.0, 0.0);
$con->relLineTo(0.0, 6.0);
$con->relLineTo(3.0, 0.0);
$con->relLineTo(0.0, -3.0);
$con->relLineTo(-6.0, 0.0);
$con->closePath();
$con->setLineWidth(1.0);
$con->stroke();
$sur->writeToPng(dirname(__FILE__) . '/self-intersecting.png');
Ejemplo n.º 15
0
<?php

$sur = new CairoImageSurface(CairoFormat::ARGB32, 76, 76);
$con = new CairoContext($sur);
$con->setSourceRgb(1, 1, 1);
$con->paint();
$con->setAntialias(CairoAntialias::MODE_NONE);
$con->setSourceRgb(0, 0, 0);
$con->translate(-300, -300);
$con->scale(677.0 / 26, 677.0 / 26);
$con->translate(1, 1);
$con->rectangle(11, 11, 1, 1);
$con->rectangle(11, 12, 1, 1);
$con->rectangle(12, 11, 1, 1);
$con->rectangle(12, 12, 1, 1);
$con->setSourceRgb(0, 0, 0);
$con->fill();
$sur->writeToPng(dirname(__FILE__) . "/rectangle-rounding-error-php.png");
?>

Ejemplo n.º 16
0
<?php

$sur = new CairoImageSurface(CairoFormat::ARGB32, 32, 16);
$con = new CairoContext($sur);
$con->save();
$con->setSourceRgb(1, 1, 1);
$con->paint();
$con->restore();
$con->arc(8, 8, 4, 0, M_PI);
$con->closePath();
$con->arc(8, 8, 4, M_PI, 2 * M_PI);
$con->fill();
$con->translate(16, 0);
$con->moveTo(8, 4);
$con->arcNegative(8, 8, 4, 3 * M_PI / 2, M_PI / 2);
$con->closePath();
$con->curveTo(12, 4, 12, 12, 8, 12);
$path = $con->copyPathFlat();
$con->newPath();
$con->appendPath($path);
$con->fill();
$sur->writeToPng(dirname(__FILE__) . "/close-path-php.png");
?>

Ejemplo n.º 17
0
$surface_size = sqrt(($size - 2 * $pad) * ($size - 2 * $pad) / 2);
$sur = new CairoImageSurface(CairoFormat::ARGB32, $size, $size);
$con = new CairoContext($sur);
$s = new CairoImageSurface(CairoFormat::RGB24, $surface_size, $surface_size);
$con2 = new CairoContext($s);
$con2->setSourceRgb(1, 1, 1);
$con2->rectangle(0, 0, $surface_size / 2, $surface_size / 2);
$con2->fill();
$con2->setSourceRgb(1, 0, 0);
$con2->rectangle($surface_size / 2, 0, $surface_size / 2, $surface_size / 2);
$con2->fill();
$con2->setSourceRgb(0, 1, 0);
$con2->rectangle(0, $surface_size / 2, $surface_size / 2, $surface_size / 2);
$con2->fill();
$con2->setSourceRgb(0, 0, 1);
$con2->rectangle($surface_size / 2, $surface_size / 2, $surface_size / 2, $surface_size / 2);
$con2->fill();
/* First paint opaque background (black) so we don't need separate
 * ARGB32 and RGB24 reference images. */
$con->setSourceRgb(0, 0, 0);
/* black */
$con->paint();
$con->translate($size / 2, $size / 2);
$con->rotate(M_PI / 4.0);
$con->translate(-$surface_size / 2, -$surface_size / 2);
$con->setSourceSurface($s, 0, 0);
$pat = $con->getSource();
$pat->setFilter(CairoFilter::NEAREST);
$con->setSource($pat);
$con->paint();
$sur->writeToPng(dirname(__FILE__) . "/rotate-image-surface-paint-php.png");
Ejemplo n.º 18
0
    $con->relLineTo(-16, 12);
}
function big_star_path()
{
    global $con;
    $con->moveTo(40, 0);
    $con->relLineTo(25, 80);
    $con->relLineTo(-65, -50);
    $con->relLineTo(80, 0);
    $con->relLineTo(-65, 50);
    $con->closePath();
}
$sur = new CairoImageSurface(CairoFormat::ARGB32, 163, 103);
$con = new CairoContext($sur);
$con->setSourceRgb(1, 0, 0);
$con->translate(1, 1);
little_star_path();
$con->setFillRule(CairoFillRule::WINDING);
$con->fill();
$con->translate(21, 0);
little_star_path();
$con->setFillRule(CairoFillRule::EVEN_ODD);
$con->fill();
$con->translate(-21, 21);
big_star_path();
$con->setFillRule(CairoFillRule::WINDING);
$con->fill();
$con->translate(81, 0);
big_star_path();
$con->setFillRule(CairoFillRule::EVEN_ODD);
$con->fill();
Ejemplo n.º 19
0
<?php

$sur = new CairoImageSurface(CairoFormat::ARGB32, 10, 10);
$con = new CairoContext($sur);
$data = "";
for ($i = 0; $i < 4; $i++) {
    $data = $data . chr(0x80);
    $data = $data . chr(0x0);
    $data = $data . chr(0x0);
    $data = $data . chr(0x0);
}
$s = new CairoImageSurface(CairoFormat::ARGB32, 1, 1);
$s->createForData(data, CairoFormat::ARGB32, 2, 2, 8);
$pat = new CairoSurfacePattern($s);
$con->setSourceRgb(1, 0, 0);
$con->save();
$con->translate(2, 2);
$con->mask($pat);
$con->restore();
$mat = new CairoMatrix();
$mat->translate(-4, -4);
$pat->setMatrix($mat);
$con->mask($pat);
$con->translate(2, 2);
$con->mask($pat);
$sur->writeToPng(dirname(__FILE__) . "/mask-ctm-php.png");
?>



Ejemplo n.º 20
0
<?php

$sur = new CairoImageSurface(CairoFormat::ARGB32, 28, 14);
$con = new CairoContext($sur);
$con->rectangle(2, 2, 10, 10);
$con->setSourceRgb(0, 0, 1);
$con->fillPreserve();
$con->setSourceRgb(1, 0, 0);
$con->stroke();
$con->translate(14, 0);
$con->arc(7, 7, 5, 0, 2 * M_PI);
$con->fillPreserve();
$con->setSourceRgb(0, 0, 1);
$con->stroke();
$sur->writeToPng(dirname(__FILE__) . "/fill-and-stroke-php.png");
?>

Ejemplo n.º 21
0
<?php

$patwidth = 120;
$patheight = 120;
$size = $patwidth * 2;
$pad = 2;
$width = $pad + $size + $pad;
$height = $width;
$sur = new CairoImageSurface(CairoFormat::ARGB32, $width, $height);
$con = new CairoContext($sur);
//$s = new CairoImageSurface(FORMATARGB32, $width, $height);
$con->translate($pad, $pad);
$pat_surface = $sur->createSimilar(CairoContent::COLOR_ALPHA, $patwidth, $patheight);
$cr2 = new CairoContext($pat_surface);
$cr2->setSourceRgba(1, 0, 1, 0.5);
$cr2->rectangle($patwidth / 6.0, $patheight / 6.0, $patwidth / 4.0, $patheight / 4.0);
$cr2->fill();
$cr2->setSourceRgba(0, 1, 1, 0.5);
$cr2->rectangle($patwidth / 2.0, $patheight / 2.0, $patwidth / 4.0, $patheight / 4.0);
$cr2->fill();
$cr2->setLineWidth(1);
$cr2->moveTo($patwidth / 6.0, 0);
$cr2->lineTo(0, 0);
$cr2->lineTo(0, $patheight / 6.0);
$cr2->setSourceRgb(1, 0, 0);
$cr2->stroke();
$cr2->moveTo($patwidth / 6.0, $patheight);
$cr2->lineTo(0, $patheight);
$cr2->lineTo(0, 5 * $patheight / 6.0);
$cr2->setSourceRgb(0, 1, 0);
$cr2->stroke();
Ejemplo n.º 22
0
<?php

$sur = new CairoImageSurface(CairoFormat::ARGB32, 8, 8);
$con = new CairoContext($sur);
$con->setSourceRgb(1, 1, 1);
$con->paint();
$con->setSourceRgb(0, 0, 0);
$con->setLineJoin(CairoLineJoin::ROUND);
$con->scale(20.0 / 100.0, 20 / 100.0);
$con->scale(1.0 / 20, 1.0 / 20);
$con->setLineWidth(20);
$con->translate(-18300, -13200);
$con->newPath();
$con->moveTo(18928, 13843);
$con->lineTo(18500, 13843);
$con->lineTo(18500, 13400);
$con->lineTo(18928, 13400);
$con->lineTo(18928, 13843);
$con->stroke();
$sur->writeToPng(dirname(__FILE__) . "/infinite-join-php.png");
?>

Ejemplo n.º 23
0
<?php

$sur = new CairoImageSurface(CairoFormat::ARGB32, 53, 53);
$con = new CairoContext($sur);
$con->setSourceRgb(1, 0, 0);
$con->translate(1, 1);
$con->moveTo(0, 0);
$con->lineTo(25, 50);
$con->lineTo(25, 0);
$con->lineTo(50, 25);
$con->lineTo(0, 25);
$con->closePath();
$con->fill();
$sur->writeToPng(dirname(__FILE__) . "/fill-missed-stop-php.png");
?>

Ejemplo n.º 24
0
$yscale = 2.0;
$width = $xscale * $spline * 6.0;
$height = $yscale * $spline * 2.0;
$sur = new CairoImageSurface(CairoFormat::ARGB32, $width, $height);
$con = new CairoContext($sur);
$con->setSourceRgb(1.0, 1.0, 1.0);
/* white */
$con->paint();
$con->setSourceRgb(0.0, 0.0, 0.0);
/* black */
for ($i = 0; $i < 4; $i++) {
    $con->save();
    //	$con->translate($width/4 + ($i % 2)*$width/2, $height/4 + ($i/2)*$height/2);
    switch ($i) {
        case 0:
            $con->translate($width / 4, $height / 4);
            scale_then_set_line_width_and_stroke();
            break;
        case 1:
            $con->translate($width / 4 + $width / 2, $height / 4);
            scale_path_and_line_width();
            break;
        case 2:
            $con->translate($width / 4, $height / 4 + $height / 2);
            set_line_width_then_scale_and_stroke();
            break;
        case 3:
            $con->translate($width / 4 + $width / 2, $height / 4 + $height / 2);
            scale_path_not_line_width();
            break;
    }
Ejemplo n.º 25
0
$linewidth = 10.0;
$size = 5 * $linewidth;
$pad = 2 * $linewidth;
$sur = new CairoImageSurface(CairoFormat::ARGB32, 3 * ($pad + $size) + $pad, 3 * $pad + 2 * $size);
$con = new CairoContext($sur);
$dash = array($linewidth, 1.5 * $linewidth);
$dashoff = -2 * $linewidth;
$con->save();
$con->setSourceRgb(1, 1, 1);
$con->paint();
$con->restore();
for ($i = 0; $i < 2; $i++) {
    $con->save();
    $con->setLineWidth($linewidth);
    $con->setDash($dash, $dashoff);
    $con->translate($pad, $pad);
    $con->moveTo(0, 0);
    $con->relLineTo(0, $size);
    $con->relLineTo($size, 0);
    $con->closePath();
    $con->moveTo(2 * $linewidth, 0);
    $con->relLineTo(3 * $linewidth, 0);
    $con->relLineTo(0, 3 * $linewidth);
    $con->setLineCap(CairoLineCap::BUTT);
    $con->setLineJoin(CairoLineJoin::BEVEL);
    $con->stroke();
    $con->translate($size + $pad, 0);
    $con->moveTo(0, 0);
    $con->relLineTo(0, $size);
    $con->relLineTo($size, 0);
    $con->closePath();
Ejemplo n.º 26
0
    $ext = $con->textExtents($str);
    $sf = $con->getScaledFont();
    $sext = $sf->textExtents("text");
    $lw = $con->getLineWidth();
    $con->rectangle($x + $ext["x_bearing"] - $lw / 2, $y + $ext["y_bearing"] - $lw / 2, $ext["width"] + $lw, $ext["height"] + $lw);
    $con->stroke();
    $con->moveTo($x, $y);
    $con->showText($str);
    $con->restore();
}
$sur = new CairoImageSurface(CairoFormat::ARGB32, 38, 34);
$con = new CairoContext($sur);
$con->setSourceRgb(1, 1, 1);
$con->paint();
$con->selectFontFace("Bitstream Vera Sans");
$con->setFontSize(12);
$con->translate(4, 4);
$con->setLineWidth(1);
$ext = $con->textExtents("text");
$con->setSourceRgb(0, 0, 0);
box_text("text", 0, -$ext["y_bearing"]);
$mat = new CairoMatrix();
$mat->translate(6, 16);
$mat->scale(12, 12);
$con->setFontMatrix($mat);
$con->setSourceRgb(0, 0, 1);
box_text("text", 0, -$ext["y_bearing"]);
$sur->writeToPng(dirname(__FILE__) . "/font-matrix-translation-php.png");
?>