首先需要下载 freetype 包

go get github.com/golang/freetype


需要知道的结构体和方法

type RGBA

type RGBA struct {    // Pix保管图像的像素色彩信息,顺序为R, G, B, A
    // 像素(x, y)起始位置是Pix[(y-Rect.Min.Y)*Stride + (x-Rect.Min.X)*4]
    Pix []uint8
    // Stride是Pix中每行像素占用的字节数
    Stride int
    // Rect是图像的范围
    Rect Rectangle}

RGBA类型代表一幅内存中的图像,其At方法返回color.RGBA类型的值。


func NewRGBA(r Rectangle) *RGBA

NewRGBA函数创建并返回一个具有指定范围的RGBA。


func Rect(x0, y0, x1, y1 int) Rectangle

返回一个矩形Rectangle{Pt(x0, y0), Pt(x1, y1)}。

func (*RGBA) Set

func (p *RGBA) Set(x, y int, c color.Color)

设置每个像素点的颜色



贴上代码

package main

import (
"os"
      "image"
      "image/color"
      "image/png"
      "log"
      "io/ioutil"
      "github.com/golang/freetype"
)

func createImage() {
//图片的宽度
      dx := 200
      //图片的高度
      dy := 200
      imgfile,_ := os.Create("test.png")
defer imgfile.Close()

img := image.NewNRGBA(image.Rect(0,0,dx,dy))

//设置每个点的 RGBA (Red,Green,Blue,Alpha(设置透明度))
      for y:=0;y<dy;y++ {
for x:=0;x<dx;x++ {
//设置一块 白色(255,255,255)不透明的背景
                    img.Set(x,y,color.RGBA{255,255,255,255})
}
}
//读取字体数据
      fontBytes,err := ioutil.ReadFile("微软vista黑体.ttf")
if err != nil {
log.Println(err)
}
//载入字体数据
      font,err := freetype.ParseFont(fontBytes)
if err != nil {
log.Println("load front fail",err)
}
f := freetype.NewContext()
//设置分辨率
      f.SetDPI(72)
//设置字体
      f.SetFont(font)
//设置尺寸
      f.SetFontSize(26)
f.SetClip(img.Bounds())
//设置输出的图片
      f.SetDst(img)
//设置字体颜色(红色)
      f.SetSrc(image.NewUniform(color.RGBA{255,0,0,255}))

//设置字体的位置
      pt := freetype.Pt(40,40 + int(f.PointToFixed(26)) >> 8)

_,err = f.DrawString("hello,世界",pt)
if err != nil {
log.Fatal(err)
}

//以png 格式写入文件
      err = png.Encode(imgfile,img)
if err != nil {
log.Fatal(err)
}
}

func main() {
createImage()
}


这样就能绘制一张有文字的图片了