package main
import (
"fmt"
"image"
"image/color"
"image/draw"
"image/png"
"io/ioutil"
"math/rand"
"os"
"time"
"github.com/golang/freetype"
"github.com/golang/freetype/truetype"
)
func main() {
rand.Seed(time.Now().UnixNano())
code := ""
for i := 0; i < 5; i++ {
code += fmt.Sprintf("%d", rand.Intn(10))
}
w := 200
h := 100
bgColor := color.RGBA{220, 220, 220, 255}
img := image.NewRGBA(image.Rect(0, 0, w, h))
draw.Draw(img, img.Bounds(), &image.Uniform{bgColor}, image.ZP, draw.Src)
fontFile, err := ioutil.ReadFile("actionj.ttf")
if err != nil {
fmt.Print("open file failed")
}
font, err := truetype.Parse(fontFile)
if err != nil {
fmt.Println("load font failed")
}
fontSize := 32
fontDPI := 72.0
dc := freetype.NewContext()
dc.SetDPI(fontDPI)
dc.SetFont(font)
dc.SetFontSize(float64(fontSize))
dc.SetClip(img.Bounds())
dc.SetDst(img)
dc.SetSrc(&image.Uniform{color.RGBA{0, 0, 0, 255}})
pt := freetype.Pt(10, 60)
for _, ch := range code {
_, err := dc.DrawString(string(ch), pt)
if err != nil {
fmt.Println("Draw string failed")
}
pt.X += dc.PointToFixed(float64(fontSize * 5 / 7))
}
file, err := os.Create("test.png")
if err != nil {
fmt.Println("create png failed")
}
defer file.Close()
err = png.Encode(file, img)
if err != nil {
fmt.Println("encode png file failed")
}
fmt.Println("Successfully!")
}
golang简单的函数生成验证码图片
最新推荐文章于 2024-04-14 13:23:02 发布