opnmind / php-svg
使用 PHP 生成 SVG 文件
v0.5.0
2016-11-12 12:34 UTC
Requires
- php: >=5.3.3
README
本项目是从 JangoBrick/php-svg 分支出来的,并将根据我的工作需要随机扩展功能。
这是一个针对 PHP 的矢量图形库,其功能范围非常广泛。这主要是因为本项目旨在在三个不同的、大的领域提供功能
- 从 PHP 代码生成 SVG 图像并将其输出,可以是 XML 字符串或文件。
- 加载并解析 XML 字符串到文档树,可以轻松修改,然后也可以将其转换回字符串。
- 将解析或生成的文档树转换为位图,如 PNG。
贡献
这些任务将花费很多时间和精力,所以如果您对这个项目感兴趣,欢迎您贡献。
如果您决定贡献,请遵守以下事项
- 不允许使用外部库。
- 请将您的编辑器设置为使用 4 个空格进行缩进。一般来说,遵循现有的代码风格以保持一致性会更好。
- 源文件必须以换行符结尾。
- 通过贡献代码,您同意将代码许可给本项目,许可协议为 MIT 协议。
安装
Composer(推荐)
此包可通过 Composer/Packagist 获取。
$ composer require opnmind/php-svg
手动
下载 此存储库或最新版本,并将其放置在您的项目中的某个位置。然后执行
<?php require_once __DIR__.'/<path_where_you_put_it>/autoloader.php';
其余步骤与使用 Composer 相同,只是没有诸如良好的版本管理等功能。
入门
创建图像
以下代码生成一个带有蓝色正方形的 SVG 图像,设置 Content-Type 头,并回显它
<?php use Opnmind\SVG\SVGImage; use Opnmind\SVG\Nodes\Shapes\SVGRect; // image with 100x100 viewport $image = new SVGImage(100, 100); $doc = $image->getDocument(); // blue 40x40 square at (0, 0) $square = new SVGRect(0, 0, 40, 40); $square->setStyle('fill', '#0000FF'); $doc->addChild($square); header('Content-Type: image/svg+xml'); echo $image;
光栅化
要将 SVGImage 实例转换为 PHP/GD 图像资源,或者说将其转换为位图,您只需在它上面调用 toRasterImage($width, $height)
。示例
<?php use Opnmind\SVG\SVGImage; use Opnmind\SVG\Nodes\Shapes\SVGCircle; $image = new SVGImage(100, 100); $doc = $image->getDocument(); // circle with radius 20 and green border, center at (50, 50) $doc->addChild( (new SVGCircle(50, 50, 20)) ->setStyle('fill', 'none') ->setStyle('stroke', '#0F0') ->setStyle('stroke-width', '2px') ); // rasterize to a 200x200 image, i.e. the original SVG size scaled by 2 $rasterImage = $image->toRasterImage(200, 200); header('Content-Type: image/png'); imagepng($rasterImage);
加载 SVG
您可以从字符串和文件中加载 SVG 图像。以下示例从一个字符串中加载一个,移动包含的矩形,并回显新的 SVG
<?php use Opnmind\SVG\SVGImage; $svg = '<svg width="100" height="100">'; $svg .= '<rect width="50" height="50" fill="#00F" />'; $svg .= '</svg>'; $image = SVGImage::fromString($svg); $doc = $image->getDocument(); $rect = $doc->getChild(0); $rect->setX(25)->setY(25); header('Content-Type: image/svg+xml'); echo $image;
如果要从文件加载,则调用 SVGImage::fromFile($file)
。该函数支持本地文件路径以及 URL。