1. 产品
  2.   图片
  3.   GO
  4.   SVGo
 
  

用于 SVG 创建和操作的开源 Go 库

一个非常稳定的 Go API,支持生成 SVG 绘图。您可以添加形状、线条、文本、图像、路径并应用颜色、渐变、动画等。  

SVGo 是一个开源的 Go 语言库,使软件开发人员能够使用 Scalable Vector Graphics 1.1 规范在他们自己的应用程序中创建 SVG。该库支持圆形、椭圆、多边形、矩形等 SVG 形状。它还支持平移、旋转、缩放、倾斜等 SVG 转换功能。

SVGo 库可以在 Go 语言可用的任何地方运行,并且可以在 Linux、Mac OS X、Windows 等流行的操作系统上完全移植。该库包含与形状、线条、文本、绘图路径、图像和渐变、图像变换、滤镜效果、应用动画、元数据元素等。

该库旨在生成标准、干净、可读的代码,这些代码接近于调整过的、充分利用各种 SVG 元素的手工编写的代码。为了方便用户,该库提供了对内置过滤器的支持,例如标准偏差模糊功能、图像灰度过滤器、旋转色调、反转图像颜色、应用棕褐色调等等。

Previous Next

成像入门

安装 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()
}
 中国人