如何创建 svg 并将其导出为 png/jpeg
Posted
技术标签:
【中文标题】如何创建 svg 并将其导出为 png/jpeg【英文标题】:How to create and export svg to png/jpeg 【发布时间】:2021-10-13 05:36:46 【问题描述】:我有以下代码 sn-p 例如
package main
import (
"github.com/ajstarks/svgo"
"os"
_ "image"
_ "fmt"
)
func main()
width := 512
height := 512
canvas := svg.New(os.Stdout)
canvas.Start(width,height)
canvas.Image(0,0,512,512,"src.jpg","0.50")
canvas.End()
我想将此代码创建的 svg 导出为 jpeg 或 png 或 svg 让我们说。如何做到这一点我不明白。我可以使用 imagemagick 或其他东西,但为此我需要 SVG 的东西。请有人帮我解决这个问题。
【问题讨论】:
我可以知道对谁投反对票的原因吗? Golang 很容易与 javascript 结合。您可以考虑使用 Javascript 来执行此操作,如果需要,您仍然可以使用 fetch 发送它以与 Go 进行通信。我构建了一个script,通过Javascript将SVG转换为PNG,你可以做一些修改来实现。 【参考方案1】:如果你更喜欢使用纯 go
package main
import (
"image"
"image/png"
"os"
"github.com/srwiley/oksvg"
"github.com/srwiley/rasterx"
)
func main()
w, h := 512, 512
in, err := os.Open("in.svg")
if err != nil
panic(err)
defer in.Close()
icon, _ := oksvg.ReadIconStream(in)
icon.SetTarget(0, 0, float64(w), float64(h))
rgba := image.NewRGBA(image.Rect(0, 0, w, h))
icon.Draw(rasterx.NewDasher(w, h, rasterx.NewScannerGV(w, h, rgba, rgba.Bounds())), 1)
out, err := os.Create("out.png")
if err != nil
panic(err)
defer out.Close()
err = png.Encode(out, rgba)
if err != nil
panic(err)
【讨论】:
谢谢!如果我在这里使用你的代码可以吗? (代码注释链接到您的用户个人资料和此问题。)github.com/trashhalo/imgcat/pull/16/files 为了让代码更通用,去掉w, h := 512, 512
,在icon, _ := oksvg.ReadIconStream(in)
之后直接添加w := int(icon.ViewBox.W) h := int(icon.ViewBox.H)
【参考方案2】:
要输出 .svg 文件,只需将文件 Writer 传递给 svg.New
f, err := os.Create("my_new_svg.svg")
... handle error
canvas := svg.New(f)
这会将您的输出保存在 my_new_svg.svg 中。完成此操作后,您可以在自己喜欢的网络浏览器等中打开。我猜想获取 .png 或 .jpeg 的最简单方法是使用一些外部工具(如 Image Magick)
【讨论】:
以上是关于如何创建 svg 并将其导出为 png/jpeg的主要内容,如果未能解决你的问题,请参考以下文章
将 SVG 转换为 PNG/JPEG,而不在无服务器函数中使用画布
Fabric.JS 与 Node.JS - 导出为 PNG/JPEG