Slide Captcha
Randomly generate a sticker slider and ask to drag the slider to verify the sticker overlap.
Install Module
shell
$ go get -u github.com/wenlng/go-captcha/v2@latest
$ go get -u github.com/wenlng/go-captcha/v2@latest
Install assets
shell
$ go get -u github.com/wenlng/go-captcha-assets@latest
$ go get -u github.com/wenlng/go-captcha-assets@latest
Example
go
package main
import (
"encoding/json"
"fmt"
"log"
"github.com/golang/freetype/truetype"
"github.com/wenlng/go-captcha-assets/resources/images"
"github.com/wenlng/go-captcha-assets/resources/tiles"
"github.com/wenlng/go-captcha/v2/base/option"
"github.com/wenlng/go-captcha/v2/slide"
)
var slideCapt slide.Captcha
func init() {
builder := slide.NewBuilder(
//slide.WithGenGraphNumber(2),
slide.WithEnableGraphVerticalRandom(true),
)
// background images
imgs, err := images.GetImages()
if err != nil {
log.Fatalln(err)
}
graphs, err := tiles.GetTiles()
if err != nil {
log.Fatalln(err)
}
var newGraphs = make([]*slide.GraphImage, 0, len(graphs))
for i := 0; i < len(graphs); i++ {
graph := graphs[i]
newGraphs = append(newGraphs, &slide.GraphImage{
OverlayImage: graph.OverlayImage,
MaskImage: graph.MaskImage,
ShadowImage: graph.ShadowImage,
})
}
// set resources
builder.SetResources(
slide.WithGraphImages(newGraphs),
slide.WithBackgrounds(imgs),
)
slideCapt = builder.Make()
}
func main() {
captData, err := slideCapt.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))
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"
"github.com/wenlng/go-captcha-assets/resources/tiles"
"github.com/wenlng/go-captcha/v2/base/option"
"github.com/wenlng/go-captcha/v2/slide"
)
var slideCapt slide.Captcha
func init() {
builder := slide.NewBuilder(
//slide.WithGenGraphNumber(2),
slide.WithEnableGraphVerticalRandom(true),
)
// background images
imgs, err := images.GetImages()
if err != nil {
log.Fatalln(err)
}
graphs, err := tiles.GetTiles()
if err != nil {
log.Fatalln(err)
}
var newGraphs = make([]*slide.GraphImage, 0, len(graphs))
for i := 0; i < len(graphs); i++ {
graph := graphs[i]
newGraphs = append(newGraphs, &slide.GraphImage{
OverlayImage: graph.OverlayImage,
MaskImage: graph.MaskImage,
ShadowImage: graph.ShadowImage,
})
}
// set resources
builder.SetResources(
slide.WithGraphImages(newGraphs),
slide.WithBackgrounds(imgs),
)
slideCapt = builder.Make()
}
func main() {
captData, err := slideCapt.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))
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)
}
}
Reference
Create an instance
- builder.Make()
- builder.MakeWithRegion()
Configure
TIP
slide.NewBuilder(slide.WithXxxx(), slide.WithXxxx(), ....) OR bilder.SetOptions(slide.WithXxxx(), slide.WithXxxx(), ....)
slide.WithImageSize(*option.Size)
slide.WithImageAlpha(float32)
slide.WithRangeGraphSize(val option.RangeVal)
slide.WithEnableGraphVerticalRandom(val bool)
slide.WithGenGraphNumber(val int)
slide.WithRangeDeadZoneDirections(val []DeadZoneDirectionType)
slide.WithRangeGraphAnglePos([]option.RangeVal)
Resources
TIP
builder.SetResources(slide.WithXxxx(), slide.WithXxxx(), ....)
- slide.WithBackgrounds([]image.Image)
- slide.WithGraphImages(images []*GraphImage)
Captcha Data
- GetData() *Block
- GetMasterImage() imagedata.JPEGImageData
- GetTitleImage() imagedata.PNGImageData
Refer to the image data API Captcha Image.