[Golang]SVGを描画する

GolangでSVGを描画できるパッケージsvgoというのを試してみたいと思います。

はじめる!

まずはパッケージをインストール。

$ go get github.com/ajstarks/svgo

それでは、とりあえずGoDocに書かれてあるように円を描画してみます。

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()
}

http://localhost:2003/circleにアクセスしてみると円が表示されていると思います!

正方形

いろんなものを描画していきましょう。

正方形を描画してみましょう。

func square(w http.ResponseWriter, req *http.Request) {
  w.Header().Set("Content-Type", "image/svg+xml")
  s := svg.New(w)
  s.Start(500, 500)
  s.Square(250, 250, 250, "fill:none;stroke:black")
  s.End()
}

blackのところをお好きな色に変えてみましょう。例えばredにすると縁の赤い正方形が描画されます。

テキスト

次にSVGでテキストを表示してみましょう。

func text(w http.ResponseWriter, req *http.Request) {
  w.Header().Set("Content-Type", "image/svg+xml")
  s := svg.New(w)
  s.Start(1000, 500)
  s.Text(250, 250, "I'm YouJ!", "fill:none;stroke:blue;font-size:100")
  s.End()
}

大きく青い字でI'm YouJ!と表示されたと思います。

折れ線

最後に折れ線グラフみたいなのを書いてみましょう。慣れてないので変なのができましたが、こんな感じで書けます。

func polyline(w http.ResponseWriter, req *http.Request) {
  w.Header().Set("Content-Type", "image/svg+xml")
  s := svg.New(w)
  s.Start(1000, 500)
  number1 := []int{50, 150, 150, 550}
  number2 := []int{375, 375, 325, 375}
  s.Polyline(number1, number2, "fill:none;stroke:blue;stroke-width:10;")
  s.End()
}

青い折れ線が表示されたと思います。

さいごに

他にも画像やグラデーションなどSVG描画に必要なのはなんでもあるこのパッケージ!個人開発のとき、活用する機会がありそうかな。