<?php
use nstdio\svg\container\Defs;
use nstdio\svg\container\G;
use nstdio\svg\container\SVG;
use nstdio\svg\desc\Desc;
use nstdio\svg\desc\Title;
use nstdio\svg\filter\Blend;
use nstdio\svg\filter\Filter;
use nstdio\svg\gradient\UniformGradient;
use nstdio\svg\shape\Rect;
use nstdio\svg\text\Text;
use nstdio\svg\util\KeyValueWriter;
require_once __DIR__ . '/../vendor/autoload.php';
$svg = new SVG('5cm', '5cm');
$svg->getElement()->setAttribute('viewBox', "0 0 500 500");
$title = new Title($svg, 'Example feBlend - Examples of feBlend modes');
$desc = new Desc($svg, 'Five text strings blended into a gradient, with one text string for each of the five feBlend modes.');
$svg->append($title, $desc);
$defs = new Defs($svg);
$linearGradient = UniformGradient::gradient($defs, ['#000000', '#ffffff', '#ff0000', '#808080'], null);
KeyValueWriter::apply($linearGradient->getElement(), ['gradientUnits' => 'userSpaceOnUse', 'x1' => 100, 'y1' => 0, 'x2' => 300, 'y2' => 0,]);
$defs->append($linearGradient);
$types = ['Normal', 'Multiply', 'Screen', 'Darken', 'Lighten'];
foreach ($types as $type) {
$blend = new Blend($defs);
$blend->mode = strtolower($type);
$blend->in2 = 'BackgroundImage';
$blend->in = 'SourceGraphic';
$filter = new Filter($defs, $type, $blend);
$defs->append($filter);
}
$svg->append($defs);
$rect = new Rect($svg, 498, 498, 1, 1);
$rect->fill = "none";
$rect->stroke = "blue";
$g = new G($svg);
$g->enableBackground = "new";
$rect2 = new Rect($g, 460, 300, 100, 20);
$rect2->fill = "url(#$linearGradient->id)";
$g->append($rect2);
$gInner = new G($g);
$gInner->fontFamily = "Verdana";
$gInner->fontSize = 75;
$gInner->fill = "#888888";
$gInner->fillOpacity = 0.6;
$textArray = [90, 180, 270, 360, 450];
foreach ($textArray as $key => $value) {
$text = new Text($gInner, $types[$key]);
$text->x = 50;
$text->y = $value;
$text->filter = "url(#" . $types[$key] . ")";
$gInner->append($text);
}
$g->append($gInner);
$svg->append($g);
$svg->append($rect);
echo $svg->draw();
|