如何在golang

时间:2017-03-24 07:06:26

标签: canvas go imagemagick

我有以下代码段,例如

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的东西。请有人帮我这个。

2 个答案:

答案 0 :(得分:3)

如果您更喜欢使用纯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)
  }
}

答案 1 :(得分: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)