<?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"); ?>
$con->moveTo($x, $y); $con->lineTo($x + $width, $y); $con->lineTo($x, $y + $height); $con->clip(); switch ($i) { case 0: $wi = floor($width * 0.9); $he = floor($height * 0.9); $x += 0.05 * $width; $y += 0.05 * $height; //$stemp = $con->get_group_target(); $msur = $sur->createSimilar(CairoContent::ALPHA, $wi, $he); $c2 = new CairoContext($msur); $c2->save(); $c2->setSourceRgba(0, 0, 0, 0); $c2->setOperator(CairoOperator::SOURCE); $c2->paint(); $c2->restore(); $c2->setSourceRgb(1, 1, 1); $c2->arc(0.5 * $wi, 0.5 * $he, 0.45 * $he, 0, 2 * M_PI); $c2->fill(); //unset($c2); $con->maskSurface($msur, $x, $y); //unset($msur); //unset($stemp); break; case 1: $con->setFontSize(0.9 * $height); $ext = $con->textExtents("FG"); $con->moveTo($x + floor(($width - $ext["width"]) / 2 + 0.5) - $ext["x_bearing"], $y + floor(($height - $ext["height"]) / 2 + 0.5) - $ext["y_bearing"]); $con->showText("FG");
$con->selectFontFace("Bitstream Vera Sans", CairoFontSlant::NORMAL, CairoFontWeight::NORMAL); for ($j = 0; $j < 4; $j++) { for ($i = 0; $i < 2; $i++) { $x = $i * ($width + $pad) + $pad; $y = $j * ($height + $pad) + $pad; $con->save(); $pat = new CairoLinearGradient($x + $width, $y, $x, $y + $height); $pat->addColorStopRgba(0.2, 0.0, 0.0, 1.0, 1.0); /* Solid blue */ $pat->addColorStopRgba(0.8, 0.0, 0.0, 1.0, 0.0); /* Transparent blue */ $con->setSource($pat); $con->rectangle($x, $y, $width, $height); $con->fillPreserve(); $con->clip(); $con->setOperator(CairoOperator::CLEAR); //pattern_funcs[i] ($x, $y); switch ($i) { case 0: set_solid_pattern($x, $y); break; case 1: set_gradient_pattern($x, $y); break; } //draw_funcs[j] (cr, x, y); switch ($j) { case 0: draw_mask($x, $y); break; case 1:
<?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"); ?>