用于 SVG 创建和操作的开源 Go 库
一个非常稳定的 Go API,支持生成 SVG 绘图。您可以添加形状、线条、文本、图像、路径并应用颜色、渐变、动画等。
SVGo 是一个开源的 Go 语言库,使软件开发人员能够使用 Scalable Vector Graphics 1.1 规范在他们自己的应用程序中创建 SVG。该库支持圆形、椭圆、多边形、矩形等 SVG 形状。它还支持平移、旋转、缩放、倾斜等 SVG 转换功能。
SVGo 库可以在 Go 语言可用的任何地方运行,并且可以在 Linux、Mac OS X、Windows 等流行的操作系统上完全移植。该库包含与形状、线条、文本、绘图路径、图像和渐变、图像变换、滤镜效果、应用动画、元数据元素等。
该库旨在生成标准、干净、可读的代码,这些代码接近于调整过的、充分利用各种 SVG 元素的手工编写的代码。为了方便用户,该库提供了对内置过滤器的支持,例如标准偏差模糊功能、图像灰度过滤器、旋转色调、反转图像颜色、应用棕褐色调等等。
成像入门
安装 SVGo 的最简单和推荐的方法是通过 GitHub。请使用以下命令进行简单流畅的安装。
通过 GitHub 安装 SVGo
go get -u github.com/ajstarks/svgo
通过 GO 库生成 SVG
开源 SVGo 库使软件开发人员能够使用 Go 命令在他们自己的应用程序中以编程方式生成 SVG 绘图。开发人员需要定义 SVG 画布的宽度和高度以及 SVG 的目的地。开发人员可以轻松绘制圆形、椭圆、多边形等形状,也可以轻松输入他们选择的文本。
通过Gt创建SVG图像
package main
import (
"github.com/ajstarks/svgo"
"os"
)
func main() {
width := 500
height := 500
canvas := svg.New(os.Stdout)
canvas.Start(width, height)
canvas.Circle(width/2, height/2, 100)
canvas.Text(width/2, height/2, "Hello, SVG", "text-anchor:middle;font-size:30px;fill:white")
canvas.End()
}
绘制形状和路径
SVGo 库提供了在他们自己的应用程序中创建不同类型形状的功能。它支持绘制圆、椭圆、多边形、矩形或圆角矩形、正方形、一系列线段等。您还可以轻松地绘制线条和路径。可以画椭圆弧、曲线、三次贝塞尔曲线、二次贝塞尔曲线等。
通过Gt在线绘制圆圈
package main
import (
"log"
"github.com/ajstarks/svgo"
"net/http"
)
func main() {
http.Handle("/circle", http.HandlerFunc(circle))
err := http.ListenAndServe(":2003", nil)
if err != nil {
log.Fatal("ListenAndServe:", err)
}
}
func circle(w http.ResponseWriter, req *http.Request) {
w.Header().Set("Content-Type", "image/svg+xml")
s := svg.New(w)
s.Start(500, 500)
s.Circle(250, 250, 125, "fill:none;stroke:black")
s.End()
}
图像和文本支持
开源 SVGo 库为在使用 Go 命令创建 SVG 绘图时插入图像和文本提供了完整的支持。在放置图像或文本时,您需要指定要放置的位置,还可以定义图像的宽度和高度。您还可以插入多行文本并定义大小、填充、对齐方式和间距。它还支持将样式文本与路径一起放置。您还可以使用 RGB 方案定义您选择的颜色。
在Gt应用程序中添加图像和文本
import (
"os"
svg "github.com/ajstarks/svgo"
)
func main() {
width := 500
height := 500
canvas := svg.New(os.Stdout)
canvas.Start(width, height)
canvas.Circle(width/2, height/2, 100)
canvas.Gstyle("text-anchor:middle;font-family:sans;fill:white")
canvas.Textspan(width/2, height/2, "Hello ", "font-size:30px")
canvas.Span("SVG", "font-family:serif;font-size:50px;fill:yellow")
canvas.TextEnd()
canvas.Gend()
canvas.End()
}
将动画应用于 SVG
SVG 动画元素是与万维网联盟 (W3C) 同步多媒体工作组合作开发的。 SVGo 使开发人员能够制作令人惊叹的动画并轻松导出单个动画 SVG 文件。 该库允许动画链接引用的项目、沿指定路径动画引用对象、动画平移变换、动画旋转变换、动画缩放或 skewX 变换等。
通过Gt库向SVG增加动画
func main() {
width, height := 500, 500
rsize := 100
csize := rsize / 2
duration := 5.0
repeat := 5
imw, imh := 100, 144
canvas := svg.New(os.Stdout)
canvas.Start(width, height)
canvas.Circle(csize, csize, csize, `fill="red"`, `id="circle"`)
canvas.Image((width/2)-(imw/2), 0, imw, imh, "gopher.jpg", `id="gopher"`)
canvas.Square(width-rsize, 0, rsize, `fill="blue"`, `id="square"`)
canvas.Animate("#circle", "cx", 0, width, duration, repeat)
canvas.Animate("#circle", "cy", 0, height, duration, repeat)
canvas.Animate("#square", "x", width, 0, duration, repeat)
canvas.Animate("#square", "y", height, 0, duration, repeat)
canvas.Animate("#gopher", "y", 0, height, duration, repeat)
canvas.End()
}