golang简单的函数生成验证码图片

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!")
}

  • 10
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值