English | 中文
Go Captcha is a behavior CAPTCHA, which implements click mode, slider mode, drag-drop mode and rotation mode.
⭐️ If it helps you, please give a star.
$ go get -u github.com/wenlng/go-captcha/v2@latest
package main
import "github.com/wenlng/go-captcha/v2"
func main(){
// ...
}
package main
import (
"encoding/json"
"fmt"
"image"
"log"
"io/ioutil"
"github.com/golang/freetype"
"github.com/golang/freetype/truetype"
"github.com/wenlng/go-captcha/v2/base/option"
"github.com/wenlng/go-captcha/v2/click"
"github.com/wenlng/go-captcha/v2/base/codec"
)
var textCapt click.Captcha
func init() {
builder := click.NewBuilder(
click.WithRangeLen(option.RangeVal{Min: 4, Max: 6}),
click.WithRangeVerifyLen(option.RangeVal{Min: 2, Max: 4}),
)
// You can use preset material resources:https://github.com/wenlng/go-captcha-assets
fontN, err := loadFont("../resources/fzshengsksjw_cu.ttf")
if err != nil {
log.Fatalln(err)
}
bgImage, err := loadPng("../resources/bg.png")
if err != nil {
log.Fatalln(err)
}
builder.SetResources(
click.WithChars([]string{
"1A",
"5E",
"3d",
"0p",
"78",
"DL",
"CB",
"9M",
// ...
}),
click.WithFonts([]*truetype.Font{
fontN,
}),
click.WithBackgrounds([]image.Image{
bgImage,
}),
)
textCapt= builder.Make()
}
func loadPng(p string) (image.Image, error) {
imgBytes, err := ioutil.ReadFile(p)
if err != nil {
return nil, err
}
return codec.DecodeByteToPng(imgBytes)
}
func loadFont(p string) (*truetype.Font, error) {
fontBytes, err := ioutil.ReadFile(p)
if err != nil {
panic(err)
}
return freetype.ParseFont(fontBytes)
}
func main() {
captData, err := textCapt.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("../resources/master.jpg", option.QualityNone)
//if err != nil {
// fmt.Println(err)
//}
//err = captData.GetThumbImage().SaveToFile("../resources/thumb.png")
//if err != nil {
// fmt.Println(err)
//}
}
click.NewBuilder(click.WithXxx(), ...) OR builder.SetOptions(click.WithXxx(), ...)
click.WithImageSize(option.Size)
click.WithRangeLen(option.RangeVal)
click.WithRangeAnglePos([]option.RangeVal)
click.WithRangeSize(option.RangeVal)
click.WithRangeColors([]string)
click.WithDisplayShadow(bool)
click.WithShadowColor(string)
click.WithShadowPoint(option.Point)
click.WithImageAlpha(float32)
click.WithUseShapeOriginalColor(bool)
click.WithThumbImageSize(option.Size)
click.WithRangeVerifyLen(option.RangeVal)
click.WithDisabledRangeVerifyLen(bool)
click.WithRangeThumbSize(option.RangeVal)
click.WithRangeThumbColors([]string)
click.WithRangeThumbBgColors([]string)
click.WithIsThumbNonDeformAbility(bool)
click.WithThumbBgDistort(int)
click.WithThumbBgCirclesNum(int)
click.WithThumbBgSlimLineNum(int)
builder.SetResources(click.WithXxx(), ...)
package main
import (
"encoding/json"
"fmt"
"image"
"log"
"io/ioutil"
"github.com/wenlng/go-captcha/v2/base/option"
"github.com/wenlng/go-captcha/v2/slide"
"github.com/wenlng/go-captcha/v2/base/codec"
)
var slideTileCapt slide.Captcha
func init() {
builder := slide.NewBuilder()
// You can use preset material resources:https://github.com/wenlng/go-captcha-assets
bgImage, err := loadPng("../resources/bg.png")
if err != nil {
log.Fatalln(err)
}
bgImage1, err := loadPng("../resources/bg1.png")
if err != nil {
log.Fatalln(err)
}
graphs := getSlideTileGraphArr()
builder.SetResources(
slide.WithGraphImages(graphs),
slide.WithBackgrounds([]image.Image{
bgImage,
bgImage1,
}),
)
slideTileCapt = builder.Make()
}
func getSlideTileGraphArr() []*slide.GraphImage {
tileImage1, err := loadPng("../resources/tile-1.png")
if err != nil {
log.Fatalln(err)
}
tileShadowImage1, err := loadPng("../resources/tile-shadow-1.png")
if err != nil {
log.Fatalln(err)
}
tileMaskImage1, err := loadPng("../resources/tile-mask-1.png")
if err != nil {
log.Fatalln(err)
}
return []*slide.GraphImage{
{
OverlayImage: tileImage1,
ShadowImage: tileShadowImage1,
MaskImage: tileMaskImage1,
},
}
}
func main() {
captData, err := slideTileCapt.Generate()
if err != nil {
log.Fatalln(err)
}
blockData := captData.GetData()
if blockData == nil {
log.Fatalln(">>>>> generate err")
}
block, _ := json.Marshal(blockData)
fmt.Println(">>>>>", string(block))
var mBase64, tBase64 string
mBase64, err = captData.GetMasterImage().ToBase64()
if err != nil {
fmt.Println(err)
}
tBase64, err = captData.GetTileImage().ToBase64()
if err != nil {
fmt.Println(err)
}
fmt.Println(">>>>> ", mBase64)
fmt.Println(">>>>> ", tBase64)
//err = captData.GetMasterImage().SaveToFile("../resources/master.jpg", option.QualityNone)
//if err != nil {
// fmt.Println(err)
//}
//err = captData.GetTileImage().SaveToFile("../resources/thumb.png")
//if err != nil {
// fmt.Println(err)
//}
}
func loadPng(p string) (image.Image, error) {
imgBytes, err := ioutil.ReadFile(p)
if err != nil {
return nil, err
}
return codec.DecodeByteToPng(imgBytes)
}
slide.NewBuilder(slide.WithXxx(), ...) OR builder.SetOptions(slide.WithXxx(), ...)
builder.SetResources(slide.WithXxx(), ...)
package main
import (
"encoding/json"
"fmt"
"image"
"log"
"io/ioutil"
"github.com/wenlng/go-captcha/v2/rotate"
"github.com/wenlng/go-captcha/v2/base/codec"
)
var rotateCapt rotate.Captcha
func init() {
builder := rotate.NewBuilder()
// You can use preset material resources:https://github.com/wenlng/go-captcha-assets
bgImage, err := loadPng("../resources/bg.png")
if err != nil {
log.Fatalln(err)
}
bgImage1, err := loadPng("../resources/bg1.png")
if err != nil {
log.Fatalln(err)
}
builder.SetResources(
rotate.WithImages([]image.Image{
bgImage,
bgImage1,
}),
)
rotateCapt = builder.Make()
}
func main() {
captData, err := rotateCapt.Generate()
if err != nil {
log.Fatalln(err)
}
blockData := captData.GetData()
if blockData == nil {
log.Fatalln(">>>>> generate err")
}
block, _ := json.Marshal(blockData)
fmt.Println(">>>>>", string(block))
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("../resources/master.png")
//if err != nil {
// fmt.Println(err)
//}
//err = captData.GetThumbImage().SaveToFile("../resources/thumb.png")
//if err != nil {
// fmt.Println(err)
//}
}
func loadPng(p string) (image.Image, error) {
imgBytes, err := ioutil.ReadFile(p)
if err != nil {
return nil, err
}
return codec.DecodeByteToPng(imgBytes)
}
rotate.NewBuilder(rotate.WithXxx(), ...) OR builder.SetOptions(rotate.WithXxx(), ...)
builder.SetResources(rotate.WithXxx(), ...)
Go Captcha source code is licensed under the Apache Licence, Version 2.0 http://www.apache.org/licenses/LICENSE-2.0.html
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。