opnmind/php-svg

使用 PHP 生成 SVG 文件

v0.5.0 2016-11-12 12:34 UTC

This package is not auto-updated.

Last update: 2024-09-19 01:03:56 UTC


README

Build Status Code Climate

本项目是从 JangoBrick/php-svg 分支出来的,并将根据我的工作需要随机扩展功能。

这是一个针对 PHP 的矢量图形库,其功能范围非常广泛。这主要是因为本项目旨在在三个不同的、大的领域提供功能

  • 从 PHP 代码生成 SVG 图像并将其输出,可以是 XML 字符串或文件。
  • 加载并解析 XML 字符串到文档树,可以轻松修改,然后也可以将其转换回字符串。
  • 将解析或生成的文档树转换为位图,如 PNG。

贡献

这些任务将花费很多时间和精力,所以如果您对这个项目感兴趣,欢迎您贡献。
如果您决定贡献,请遵守以下事项

  1. 不允许使用外部库。
  2. 请将您的编辑器设置为使用 4 个空格进行缩进。一般来说,遵循现有的代码风格以保持一致性会更好。
  3. 源文件必须以换行符结尾。
  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。