Some desripton for CaptchaGen module
This commit is contained in:
parent
fe1a4f1f2a
commit
2ca9ac5145
|
@ -25,6 +25,7 @@ type Captcha struct {
|
||||||
|
|
||||||
var Logos []Logo = []Logo{}
|
var Logos []Logo = []Logo{}
|
||||||
|
|
||||||
|
// Создаём пустое изображение с серым градиентом, грузим шрифт из /assets и возвращаем контекст вызвавшей функции
|
||||||
func initImage() *gg.Context {
|
func initImage() *gg.Context {
|
||||||
dc := gg.NewContext(600, 400)
|
dc := gg.NewContext(600, 400)
|
||||||
if err := dc.LoadFontFace("./assets/font.ttf", 24); err != nil {
|
if err := dc.LoadFontFace("./assets/font.ttf", 24); err != nil {
|
||||||
|
@ -40,6 +41,11 @@ func initImage() *gg.Context {
|
||||||
return dc
|
return dc
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Генерация капчи.
|
||||||
|
//
|
||||||
|
// На пустое изображение наносятся логотипы из списка, предварительно перемешанного.
|
||||||
|
// К изображениям также добавляются порядковые номера (начиная с 1 вместо 0),
|
||||||
|
// а правильный вариант возвращается вместе с итоговой картинкой
|
||||||
func GenCaptcha() Captcha {
|
func GenCaptcha() Captcha {
|
||||||
dc := initImage()
|
dc := initImage()
|
||||||
rand.Seed(time.Now().UnixNano())
|
rand.Seed(time.Now().UnixNano())
|
||||||
|
@ -68,8 +74,11 @@ func GenCaptcha() Captcha {
|
||||||
return captcha
|
return captcha
|
||||||
}
|
}
|
||||||
|
|
||||||
func InitImages() error {
|
// Инициализация списка логотипов.
|
||||||
images := []Logo{}
|
//
|
||||||
|
// Логотипы читаются из папки /assets рядом с исполняемым файлом.
|
||||||
|
// Принимается формат .png, логотип, представляющий правильный ответ называется godot.png
|
||||||
|
func Init() error {
|
||||||
files, err := ioutil.ReadDir("./assets")
|
files, err := ioutil.ReadDir("./assets")
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
|
@ -77,21 +86,19 @@ func InitImages() error {
|
||||||
for _, file := range files {
|
for _, file := range files {
|
||||||
|
|
||||||
name := file.Name()
|
name := file.Name()
|
||||||
if !strings.HasSuffix(name, ".png") {
|
if !strings.HasSuffix(name, ".png") { // Грузим только .png
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
log.Printf("%s", name)
|
log.Printf("%s", name) // Для отладки выводим имена файлов с логотипами
|
||||||
path := fmt.Sprintf("./assets/%s", name)
|
path := fmt.Sprintf("./assets/%s", name) // Составляем путь до файла
|
||||||
im, err := gg.LoadPNG(path)
|
im, err := gg.LoadPNG(path) // Грузим png, возвращаем ошибку если что-то идёт не так
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Print(err)
|
log.Print(err)
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
is_correct := strings.HasPrefix(name, "godot")
|
is_correct := strings.HasPrefix(name, "godot") // Если грузимый файл -- godot*.png - помечаем его как правильный
|
||||||
logo := Logo{Image: im, IsCorrect: is_correct}
|
logo := Logo{Image: im, IsCorrect: is_correct} // Создаём в памяти структуру для капчи
|
||||||
images = append(images, logo)
|
Logos = append(Logos, logo) // Заносим логотип в общий список
|
||||||
}
|
}
|
||||||
Logos = images
|
|
||||||
log.Printf("%v", Logos)
|
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue