mediashowroom/php-svg

使用PHP读取、编辑、写入和渲染SVG文件

v0.7.0 2018-02-05 10:01 UTC

This package is auto-updated.

Last update: 2024-09-29 05:01:47 UTC


README

Build Status Code Climate

这是一个PHP矢量图形库,它无疑具有广泛的特性。这是因为本项目的目标是提供三个不同、大型领域的功能

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

贡献

这些任务将需要大量的时间和精力,如果您对这个项目感兴趣,欢迎您贡献。
如果您决定贡献,请遵守以下事项

  1. 不应使用外部库。
  2. 请设置您的编辑器使用4个空格进行缩进。通常,遵循现有的代码风格以保持一致性会更好。
  3. 源文件必须以换行符结束。
  4. 通过贡献代码,您同意将此代码许可给本项目下的MIT许可。

安装

Composer(推荐)

此软件包可通过Composer/Packagist获取。

$ composer require meyfa/php-svg

手动

下载此仓库或最新版本,并将其放在您的项目中的某个位置。然后执行

<?php
require_once __DIR__.'/<path_where_you_put_it>/autoloader.php';

其余步骤与使用Composer完全相同,只是没有版本管理等功能。

入门

创建图像

以下代码生成一个带有蓝色矩形的SVG,设置Content-Type头并输出它

<?php

use SVG\SVGImage;
use 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 SVG\SVGImage;
use 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 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。