예제 #1
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");
?>
예제 #2
0
파일: dashes.php 프로젝트: jamesan/cairo
<?php

$dashes = array(50.0, 10.0, 10.0, 10.0);
$ndash = count($dashes);
$offset = -50.0;
$sur = new CairoImageSurface(0, 500, 500);
$con = new CairoContext($sur);
$con->setDash($dashes, $offset);
$con->setLineWidth(10.0);
$con->moveTo(128.0, 25.6);
$con->lineTo(230.4, 230.4);
$con->relLineTo(-102.4, 0.0);
$con->curveTo(51.2, 230.4, 51.2, 128.0, 128.0, 128.0);
$con->stroke();
$sur->writeToPng(dirname(__FILE__) . "/image_dash.png");
예제 #3
0
$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();
    $con->moveTo(2 * $linewidth, 0);
    $con->relLineTo(3 * $linewidth, 0);
예제 #4
0
$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);
$con->relLineTo(0.0, 2.0);
$con->moveTo(10.5, 8.5);
$con->relLineTo(0.0, 2.0);
예제 #5
0
<?php

$size = 40;
$pad = 2;
$width = $pad + $size + $pad;
$height = $width;
$sur = new CairoImageSurface(CairoFormat::ARGB32, $width, $height);
$con = new CairoContext($sur);
$con->translate($pad, $pad);
$con->moveTo($size / 2, $size / 2);
$con->relLineTo($size / 2, 0);
$con->relLineTo($size / -2, $size / 2);
$con->closePath();
$con->setOperator(CairoOperator::SOURCE);
$con->setSourceRgba(1, 0, 0, 0.5);
$con->fill();
$con->arc($size / 2, $size / 2, $size / 4, 0, 2 * M_PI);
$con->setOperator(CairoOperator::OVER);
$con->setSourceRgba(0, 1, 0, 0.5);
$con->fill();
$sur->writeToPng(dirname(__FILE__) . "/over-above-source-php.png");
?>

예제 #6
0
<?php

$char = 'Cairo';
$sur = new CairoImageSurface(0, 500, 500);
$con = new CairoContext($sur);
$con->selectFontFace('Sans');
$con->setFontSize(100);
$ext = $con->textExtents($char);
$x = 25.0;
$y = 150.0;
$con->moveTo($x, $y);
$con->showText($char);
$con->setSourceRgba(1, 0.2, 0.2, 0.6);
$con->setLineWidth(6.0);
$con->arc($x, $y, 10, 0, 2 * 3.14);
$con->fill();
$con->moveTo($x, $y);
$con->relLineTo(0, -1 * $ext['height']);
$con->relLineTo($ext['width'], 0);
$con->relLineTo($ext['x_bearing'], -1 * $ext['y_bearing']);
$con->stroke();
$sur->writeToPng(dirname(__FILE__) . '/text-extents.png');
예제 #7
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');