lib16/graphics

适用于与lib16 SVG Builder一起使用。

v2.0 2020-05-17 16:27 UTC

This package is auto-updated.

Last update: 2024-09-14 21:09:35 UTC


README

适用于与lib16 SVG Builder一起使用。

Build Status

使用Composer安装

此包可在 packagist 上找到,因此您可以使用 Composer 安装它。在您的shell中运行以下命令

composer require lib16/graphics

基本用法

<?php
require_once 'vendor/autoload.php';

use Lib16\Utils\NumberFormatter;
use Lib16\Graphics\Geometry\VectorGraphics as G;

$center1 = G::point(100, 150);
$center2 = G::point(80, 290);
$center3 = G::point(210, 290);

$star = G::star($center3, -7, 40, 40 * G::STAR_RADIUS_7_3);
$rect = G::rectangle($center3->copy()->translate(-50, -52), 100, 100);
G::skewX($center3, G::deg(-30), $star, $rect);

$path = G::path()
    ->star(G::point(50, 50), 5, 40, 40 * G::STAR_RADIUS_5_2)
    ->star(G::point(150, 50), 8, 40 * G::STAR_RADIUS_8_3, 40)
    ->star(G::point(250, 50), 6, 30, 40, 40)
    ->star($center1, 6, 70)
    ->ellipse($center1, 60, 20, G::deg(30), true)
    ->ellipse($center1, 60, 20, G::deg(90), true)
    ->ellipse($center1, 60, 20, G::deg(150), true)
    ->rectangle(G::point(170, 95), 110, 110)
    ->roundedRectangle(G::point(175, 100), 100, 100, 20, true)
    ->circle(G::point(225, 150), 45)
    ->sector($center2, G::deg(30), G::deg(175), 50)
    ->sector($center2, G::deg(290), G::deg(325), 50)
    ->ringSector($center2, G::deg(175), G::deg(275), 60, 50)
    ->polygon($rect)
    ->polygon($star)
    ->toSvg(new NumberFormatter(4), new NumberFormatter(2));

header('Content-type: image/svg+xml');
print '<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 300 360">';
print '<rect x="0" y="0" width="300" height="360" fill="#2266aa" fill-opacity="0.5" />';
print '<path d="' . $path . '" fill="#2266aa" fill-opacity="0.5" stroke="#ffffff"/>';
print '</svg>';

生成的SVG

<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 300 360"><rect x="0" y="0" width="300" height="360" fill="#2266aa" fill-opacity="0.5" /><path d="M 50,10 L 58.9806,37.6393 L 88.0423,37.6393 L 64.5309,54.7214 L 73.5114,82.3607 L 50,65.2786 L 26.4886,82.3607 L 35.4691,54.7214 L 11.9577,37.6393 L 41.0194,37.6393 Z M 150,28.3522 L 165.3073,13.0448 L 165.3073,34.6927 L 186.9552,34.6927 L 171.6478,50 L 186.9552,65.3073 L 165.3073,65.3073 L 165.3073,86.9552 L 150,71.6478 L 134.6927,86.9552 L 134.6927,65.3073 L 113.0448,65.3073 L 128.3522,50 L 113.0448,34.6927 L 134.6927,34.6927 L 134.6927,13.0448 Z M 250,20 L 263.6808,12.4123 L 275.7115,19.3582 L 275.9808,35 L 289.3923,43.0541 L 289.3923,56.9459 L 275.9808,65 L 275.7115,80.6418 L 263.6808,87.5877 L 250,80 L 236.3192,87.5877 L 224.2885,80.6418 L 224.0192,65 L 210.6077,56.9459 L 210.6077,43.0541 L 224.0192,35 L 224.2885,19.3582 L 236.3192,12.4123 Z M 100,80 L 160.6218,115 L 160.6218,185 L 100,220 L 39.3782,185 L 39.3782,115 Z M 151.9615,180 A 60 20 30 0 0 48.0385,120 A 60 20 30 0 0 151.9615,180 M 100,210 A 60 20 90 0 0 100,90 A 60 20 90 0 0 100,210 M 48.0385,180 A 60 20 150 0 0 151.9615,120 A 60 20 150 0 0 48.0385,180 M 170,95 H 280 V 205 H 170 Z M 195,100 A 20 20 0 0 0 175,120 V 180 A 20 20 0 0 0 195,200 H 255 A 20 20 0 0 0 275,180 V 120 A 20 20 0 0 0 255,100 Z M 270,150 A 45 45 0 0 1 180,150 A 45 45 0 0 1 270,150 M 80,290 L 123.3013,315 A 50 50 0 0 1 30.1903,294.3578 Z M 80,290 L 97.101,243.0154 A 50 50 0 0 1 120.9576,261.3212 Z M 20.2283,295.2293 A 60 60 0 0 1 85.2293,230.2283 L 84.3578,240.1903 A 50 50 0 0 0 30.1903,294.3578 Z M 190.0222,238 L 290.0222,238 L 232.2872,338 L 132.2872,338 Z M 211.2319,277.1379 L 193.1256,265.0604 L 197.9161,286.8233 L 165.864,298.9008 L 193.6998,298.9008 L 171.8377,326.0388 L 201.7578,304.2758 L 206.5484,326.0388 L 216.0224,298.9008 L 243.8582,298.9008 L 225.752,286.8233 L 255.6721,265.0604 L 223.62,277.1379 L 233.094,250 Z" fill="#2266aa" fill-opacity="0.5" stroke="#ffffff"/></svg>