$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"); break; case 2: $wi = floor($width * 9 / 10); $he = floor($height * 9 / 10); $x += 0.05 * $width; $y += 0.05 * $height; $con->newPath();
$con = new CairoContext($sur); $con->setSourceRgb(0, 0, 1); $con->paint(); $s = new CairoImageSurface(CairoFormat::A1, 6400, 20); $stride = $s->getStride(); $height = $s->getHeight(); $width = $s->getWidth(); $data = ""; for ($y = 0; $y < $height; $y++) { for ($x = 0; $x < ($width + 7) / 8; $x++) { $data = $data . chr(5); } } $s->createForData($data, CairoFormat::A1, $width, $height, $stride); $con->setSourceRgb(1, 0, 0); $con->maskSurface($s); $con->fill(); $s = new CairoImageSurface(CairoFormat::A1, 20, 6400); $stride = $s->getStride(); $height = $s->getHeight(); $width = $s->getWidth(); $data = ""; for ($y = 0; $y < $height; $y++) { for ($x = 0; $x < ($width + 7) / 8; $x++) { $data = $data . chr(80); } } $s->createForData($data, CairoFormat::A1, $width, $height, $stride); $con->setSourceRgb(0, 1, 0); $con->maskSurface($s, 0, 0); $sur->writeToPng(dirname(__FILE__) . "/large-source-php.png");
<?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->maskSurface($s, 0, 0); $con->restore(); $con->maskSurface($s, 4, 4); //$mat = new CairoMatrix(); $con->translate(2, 2); //$pat->setMatrix($mat); $con->maskSurface($s, 4, 4); $sur->writeToPng(dirname(__FILE__) . "/mask-surface-ctm-php.png"); ?>