<?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"); ?>
<?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");
$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);
$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);
<?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"); ?>
<?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');
<?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');