/** * Draw an image * * The image will be inlined in the SVG document using data URL scheme. For * this the mime type and base64 encoded file content will be merged to * URL. * * @param mixed $file Image file * @param ezcGraphCoordinate $position Top left position * @param mixed $width Width of image in destination image * @param mixed $height Height of image in destination image * @return void */ public function drawImage($file, ezcGraphCoordinate $position, $width, $height) { $this->initiliazeSurface(); // Ensure given bitmap is a PNG image $data = getimagesize($file); if ($data[2] !== IMAGETYPE_PNG) { throw new Exception('Cairo only has support for PNGs.'); } // Create new surface from given bitmap $imageSurface = CairoImageSurface::createFromPng($file); // Create pattern from source image to be able to transform it $pattern = new CairoSurfacePattern($imageSurface); // Scale pattern to defined dimensions and move it to its destination position $matrix = CairoMatrix::multiply($move = CairoMatrix::initTranslate(-$position->x, -$position->y), $scale = CairoMatrix::initScale($data[0] / $width, $data[1] / $height)); $pattern->setMatrix($matrix); // Merge surfaces $this->context->setSource($pattern); $this->context->rectangle($position->x, $position->y, $width, $height); $this->context->fill(); }
$cr2->lineTo(0, 5 * $patheight / 6.0); $cr2->setSourceRgb(0, 1, 0); $cr2->stroke(); $cr2->moveTo(5 * $patwidth / 6.0, 0); $cr2->lineTo($patwidth, 0); $cr2->lineTo($patwidth, $patheight / 6.0); $cr2->setSourceRgb(0, 0, 1); $cr2->stroke(); $cr2->moveTo(5 * $patwidth / 6.0, $patheight); $cr2->lineTo($patwidth, $patheight); $cr2->lineTo($patwidth, 5 * $patheight / 6.0); $cr2->setSourceRgb(1, 1, 0); $cr2->stroke(); $cr2->setSourceRgb(0.5, 0.5, 0.5); $cr2->setLineWidth($patwidth / 10.0); $cr2->moveTo(0, $patheight / 4.0); $cr2->lineTo($patwidth, $patheight / 4.0); $cr2->stroke(); $cr2->moveTo($patwidth / 4.0, 0); $cr2->lineTo($patwidth / 4.0, $patwidth); $cr2->stroke(); $pattern = new CairoSurfacePattern($pat_surface); $mat = new CairoMatrix(); $mat->scale(2, 1.5); $mat->rotate(1); $mat->translate(-$patwidth / 4.0, -$patwidth / 2.0); $pattern->setMatrix($mat); $pattern->setExtend(CairoExtend::NONE); $con->setSource($pattern); $con->paint(); $sur->writeToPng(dirname(__FILE__) . "/meta-surface-pattern-php.png");
<?php $Surface = new CairoImageSurface(0, 256, 256); $ctx = new CairoContext($Surface); $ctx->setAntialias(0); $ctx->setFillRule(0); $ctx->scale(256 / 1.0, 256 / 1.0); $pat = new CairoLinearGradient(0.0, 0.0, 0.0, 1.0); $pat->addColorStopRgba(1, 0, 0, 0, 1); $pat->addColorStopRgba(0, 1, 1, 1, 1); $ctx->rectangle(0, 0, 1, 1); $ctx->setSource($pat); $ctx->fill(); $pat = new CairoRadialGradient(0.45, 0.4, 0.1, 0.4, 0.4, 0.5); $pat->addColorStopRgba(0, 1, 1, 1, 1); $pat->addColorStopRgba(1, 0, 0, 0, 1); $ctx->setSource($pat); $ctx->arc(0.5, 0.5, 0.3, 0, 2 * 3.14); $ctx->fill(); $check = $ctx->getTarget(); $check->writeToPng(dirname(__FILE__) . '/sphere.png');
<?php $sur = new CairoImageSurface(CairoFormat::ARGB32, 256 + 32 * 2, 192 + 32 * 2); $con = new CairoContext($sur); $s = new CairoImageSurface(CairoFormat::ARGB32, 100, 100); $s->createFromPng(dirname(__FILE__) . "/romedalen.png"); $con->setSourceSurface($s, 32, 32); $pat = $con->getSource(); $pat->setExtend(CairoExtend::REPEAT); $con->setSource($pat); $con->paint(); $sur->writeToPng(dirname(__FILE__) . "/extend-repeat-php.png"); ?>