旋转式验证码
随机生成不同角度的图像,并要求拖动滑块让图像重合验证。
安装
shell
$ go get -u github.com/wenlng/go-captcha/v2@latest
$ go get -u github.com/wenlng/go-captcha/v2@latest
安装预置内嵌素材资源
shell
$ go get -u github.com/wenlng/go-captcha-assets@latest
$ go get -u github.com/wenlng/go-captcha-assets@latest
实例
go
package main
import (
"encoding/json"
"fmt"
"log"
"github.com/golang/freetype/truetype"
"github.com/wenlng/go-captcha-assets/resources/images_v2"
"github.com/wenlng/go-captcha-assets/resources/tiles"
"github.com/wenlng/go-captcha/v2/base/option"
"github.com/wenlng/go-captcha/v2/rotate"
)
var rotateCapt slide.Captcha
func init() {
builder := rotate.NewBuilder(rotate.WithRangeAnglePos([]option.RangeVal{
// {Min: 20, Max: 330},
}))
// background images
imgs, err := images.GetImages()
if err != nil {
log.Fatalln(err)
}
// set resources
builder.SetResources(
rotate.WithImages(imgs),
)
rotateCapt = builder.Make()
}
func main() {
captData, err := rotateCapt.Generate()
if err != nil {
log.Fatalln(err)
}
dotData := captData.GetData()
if dotData == nil {
log.Fatalln(">>>>> generate err")
}
dots, _ := json.Marshal(dotData)
fmt.Println(">>>>> ", string(dots))
var mBase64, tBase64 string
mBase64, err = captData.GetMasterImage().ToBase64()
if err != nil {
fmt.Println(err)
}
tBase64, err = captData.GetThumbImage().ToBase64()
if err != nil {
fmt.Println(err)
}
fmt.Println(">>>>> ", mBase64)
fmt.Println(">>>>> ", tBase64)
// err = captData.GetMasterImage().SaveToFile("./.caches/master.jpg", option.QualityNone)
// if err != nil {
// fmt.Println(err)
// }
// err = captData.GetThumbImage().SaveToFile("./.caches/thumb.png")
// if err != nil {
// fmt.Println(err)
// }
}
package main
import (
"encoding/json"
"fmt"
"log"
"github.com/golang/freetype/truetype"
"github.com/wenlng/go-captcha-assets/resources/images_v2"
"github.com/wenlng/go-captcha-assets/resources/tiles"
"github.com/wenlng/go-captcha/v2/base/option"
"github.com/wenlng/go-captcha/v2/rotate"
)
var rotateCapt slide.Captcha
func init() {
builder := rotate.NewBuilder(rotate.WithRangeAnglePos([]option.RangeVal{
// {Min: 20, Max: 330},
}))
// background images
imgs, err := images.GetImages()
if err != nil {
log.Fatalln(err)
}
// set resources
builder.SetResources(
rotate.WithImages(imgs),
)
rotateCapt = builder.Make()
}
func main() {
captData, err := rotateCapt.Generate()
if err != nil {
log.Fatalln(err)
}
dotData := captData.GetData()
if dotData == nil {
log.Fatalln(">>>>> generate err")
}
dots, _ := json.Marshal(dotData)
fmt.Println(">>>>> ", string(dots))
var mBase64, tBase64 string
mBase64, err = captData.GetMasterImage().ToBase64()
if err != nil {
fmt.Println(err)
}
tBase64, err = captData.GetThumbImage().ToBase64()
if err != nil {
fmt.Println(err)
}
fmt.Println(">>>>> ", mBase64)
fmt.Println(">>>>> ", tBase64)
// err = captData.GetMasterImage().SaveToFile("./.caches/master.jpg", option.QualityNone)
// if err != nil {
// fmt.Println(err)
// }
// err = captData.GetThumbImage().SaveToFile("./.caches/thumb.png")
// if err != nil {
// fmt.Println(err)
// }
}
使用
创建实例
- builder.Make() 旋转式
配置
TIP
配置举例:rotate.NewBuilder(rotate.WithXxxx(), rotate.WithXxxx(), ....) 或 builder.SetOptions(rotate.WithXxxx(), rotate.WithXxxx(), ....)
Options | Desc |
---|---|
rotate.WithImageSquareSize(val int) | 设置主图大小,默认 220x220 |
rotate.WithRangeAnglePos(vals []option.RangeVal) | 设置校验随机角度范围 |
rotate.WithRangeThumbImageSquareSize(val []int) | 设置缩略图大小 |
rotate.WithThumbImageAlpha(val float32) | 设置缩略图透明度 |
设置资源
TIP
配置举例:builder.SetResources(rotate.WithXxxx(), ....)
Options | Desc |
---|---|
rotate.WithBackgrounds([]image.Image) | 设置主图图片 |
验证码数据
TIP
captData, err := capt.Generate()
Method | Desc |
---|---|
GetData() *Block | 获取当前校验的信息 |
GetMasterImage() imagedata.JPEGImageData | 获取主图 |
GetTileImage() imagedata.PNGImageData | 获取缩略图 |
图像实例
TIP
通过 Generate() 生成的数据,有图像实例 JPEG、PNG 两种格式,分别为 JPEGImageData 和 PNGImageData
JPEGImageData
- Get() image.Image 获取原图像
- ToBytes() ([]byte, error) 转为字节数组
- ToBytesWithQuality(imageQuality int) ([]byte, error) 指定清晰度转为字节数组
- ToBase64() (string, error) 转为 Base64 字符串,带 "data:image/jpeg;base64," 前缀
- ToBase64Data() (string, error) 转为 Base64 字符串
- ToBase64WithQuality(imageQuality int) (string, error) 指定清晰度转为 Base64 字符串,带 "data:image/jpeg;base64," 前缀
- ToBase64DataWithQuality(imageQuality int) (string, error) 指定清晰度转为 Base64 字符串
- SaveToFile(filepath string, quality int) error 保存 JPEG 到文件
PNGImageData
- Get() image.Image 获取原图像
- ToBytes() ([]byte, error) 转为字节数组
- ToBase64() (string, error) 转为 Base64 字符串,带 "data:image/png;base64," 前缀
- ToBase64Data() (string, error) 转为 Base64 字符串
- SaveToFile(filepath string) error 保存 到文件
验证码校验
TIP
ok := rotate.CheckAngle(srcAngle, angle, paddingValue)
Params | Desc |
---|---|
srcAngle | 用户交互的角度 |
angle | 验证码校验的角度 |
paddingValue | 控制误差值 |