Go는 그 목적이 시스템 및 서버 프로그래밍에 있음으로 그리기(Draw) API는 지원하지 않는다. 그러나 Go 언어에는 이러한 부족한 부분을 채워줄 매우 많은 그래픽 라이브러리 존재하는데, 그 중에 하나가 fogleman이 개발한 Go Graphic 라이브러(https://github.com/fogleman/gg)이다.
아래의 코드는 이 라이브러리를 이용해 필자가 작성한 테스트 코드이다. (사실 이글은 Go 마스터하기 라는 책을 다 보고, 다시 한번 더 볼 요량으로 파일을 정리하던 중에 코드를 이 블로그에 저장하기 위한 목적을 갖는다.)
package main import "github.com/fogleman/gg" func main() { const S = 256 dc := gg.NewContext(S, S) dc.SetRGB(1, 1, 1) dc.Clear() if err := dc.LoadFontFace("font.ttf", 36); err != nil { panic(err) } dc.SetRGB(0, 0, 0) s := "한글ABC" n := 3 // "stroke" size for dy := -n; dy <= n; dy++ { for dx := -n; dx <= n; dx++ { if dx*dx+dy*dy >= n*n { // give it rounded corners continue } x := S/2 + float64(dx) y := S/2 + float64(dy) dc.DrawStringAnchored(s, x, y, 0.5, 0.5) } } dc.SetRGB(1, 1, 0) dc.DrawStringAnchored(s, S/2, S/2, 0.5, 0.5) dc.SavePNG("out.png") }
결과는 아래와 같은 out.png 파일을 생성한다는 것이다. 파일로 생성하는 것은 필자의 목적에 맞기 때문인데, 이렇게 생성한 이미지를 네트워크를 타고 클라이언트에 전송되는 것이 목적이다. 또는 캐쉬 되거나…
위의 결과 외에도 이 라이브러리의 개발자가 언급한, 표현 가능한 결과물은 아래와 같으니 참고 바란다.
내용 정리 끝냈으니, 관련 소스 파일은 삭제 .. !