首先需要下载 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()
}
这样就能绘制一张有文字的图片了