Maison >développement back-end >Golang >Démarrage rapide : utilisez les fonctions du langage Go pour implémenter une fonction de génération de code de vérification d'image simple

Démarrage rapide : utilisez les fonctions du langage Go pour implémenter une fonction de génération de code de vérification d'image simple

王林
王林original
2023-07-30 21:09:331745parcourir

Titre : Démarrage rapide : Utilisation des fonctions du langage Go pour implémenter une fonction de génération de code de vérification d'image simple

Dans les applications réseau modernes, les codes de vérification sont une mesure de protection de sécurité très importante. Il détermine si l'utilisateur est une personne réelle en lui montrant une image avec des caractères aléatoires et en lui demandant de saisir les caractères qu'il voit. Dans cet article, nous utiliserons les fonctions du langage Go pour implémenter une fonction simple de génération de code de vérification d'image.

Avant de commencer, nous devons d'abord installer l'environnement de développement du langage Go. La version correspondante peut être téléchargée et installée sur le site officiel https://golang.org/dl/.

Tout d'abord, nous devons importer certaines bibliothèques de langage Go. Utilisez l'extrait de code suivant pour importer les bibliothèques que vous devez utiliser.

import (
    "fmt"
    "image"
    "image/color"
    "image/draw"
    "image/png"
    "math/rand"
    "os"
    "time"
)

Ensuite, nous définissons une fonction pour générer des caractères aléatoires. Nous pouvons choisir d'utiliser des caractères tels que des chiffres, des lettres majuscules et minuscules, etc. comme caractères aléatoires générés. Ici, nous prenons les nombres comme exemple. Le code est le suivant :

func generateRandomCode(length int) string {
    rand.Seed(time.Now().UnixNano())
    code := ""
    for i := 0; i < length; i++ {
        code += fmt.Sprintf("%d", rand.Intn(10))
    }
    return code
}

Dans cette fonction, nous utilisons la fonction Intn du package rand pour générer un entier aléatoire entre 0 et 9, le convertir en chaîne et l'ajouter au code , jusqu'à ce que la longueur spécifiée soit atteinte.

Ensuite, nous définissons une fonction pour générer une image de code de vérification. Le code est le suivant :

func generateCaptchaImage(code string) {
    // 创建一个空白图片
    imgWidth := 200
    imgHeight := 100
    bgColor := color.RGBA{220, 220, 220, 255}
    img := image.NewRGBA(image.Rect(0, 0, imgWidth, imgHeight))
    draw.Draw(img, img.Bounds(), &image.Uniform{bgColor}, image.ZP, draw.Src)

    // 设置字体样式
    fontFile, err := os.Open("font.ttf")
    if err != nil {
        fmt.Println("Open font file failed:", err)
        return
    }
    defer fontFile.Close()
    font, err := truetype.Parse(fontFile)
    if err != nil {
        fmt.Println("Load font failed:", err)
        return
    }
    fontSize := 50
    fontDPI := 72.0
    c := freetype.NewContext()
    c.SetDPI(fontDPI)
    c.SetFont(font)
    c.SetFontSize(float64(fontSize))
    c.SetClip(img.Bounds())
    c.SetDst(img)
    c.SetSrc(&image.Uniform{color.RGBA{0, 0, 0, 255}})

    // 在图片上绘制字符
    pt := freetype.Pt(10, 70)
    for _, ch := range code {
        _, err = c.DrawString(string(ch), pt)
        if err != nil {
            fmt.Println("Draw string failed:", err)
            return
        }
        pt.X += c.PointToFixed(float64(fontSize * 5 / 7))
    }

    // 保存图片到本地文件
    file, err := os.Create("captcha.png")
    if err != nil {
        fmt.Println("Create image file failed:", err)
        return
    }
    defer file.Close()
    err = png.Encode(file, img)
    if err != nil {
        fmt.Println("Encode image failed:", err)
        return
    }
    fmt.Println("Captcha image generated successfully.")
}

Dans cette fonction, nous créons d'abord une image RGBA vierge et définissons la couleur d'arrière-plan. Après cela, nous utilisons le package truetype pour lire et charger le fichier de police personnalisé et définir le style de texte. Ensuite, nous utilisons le type Context du package freetype pour effectuer des opérations de dessin sur l'image. Enfin, nous sauvegardons l'image générée localement.

Enfin, nous écrivons une fonction principale et appelons la fonction ci-dessus pour générer l'image du code de vérification. Le code complet est le suivant :

package main

import (
    "fmt"
    "image"
    "image/color"
    "image/draw"
    "image/png"
    "math/rand"
    "os"
    "time"

    "github.com/golang/freetype"
    "golang.org/x/image/font/gofont/goregular"
)

func generateRandomCode(length int) string {
    rand.Seed(time.Now().UnixNano())
    code := ""
    for i := 0; i < length; i++ {
        code += fmt.Sprintf("%d", rand.Intn(10))
    }
    return code
}

func generateCaptchaImage(code string) {
    imgWidth := 200
    imgHeight := 100
    bgColor := color.RGBA{220, 220, 220, 255}
    img := image.NewRGBA(image.Rect(0, 0, imgWidth, imgHeight))
    draw.Draw(img, img.Bounds(), &image.Uniform{bgColor}, image.ZP, draw.Src)

    font, err := freetype.ParseFont(goregular.TTF)
    if err != nil {
        fmt.Println("Load font failed:", err)
        return
    }
    fontSize := 50
    fontDPI := 72.0
    c := freetype.NewContext()
    c.SetDPI(fontDPI)
    c.SetFont(font)
    c.SetFontSize(float64(fontSize))
    c.SetClip(img.Bounds())
    c.SetDst(img)
    c.SetSrc(&image.Uniform{color.RGBA{0, 0, 0, 255}})

    pt := freetype.Pt(10, 70)
    for _, ch := range code {
        _, err = c.DrawString(string(ch), pt)
        if err != nil {
            fmt.Println("Draw string failed:", err)
            return
        }
        pt.X += c.PointToFixed(float64(fontSize * 5 / 7))
    }

    file, err := os.Create("captcha.png")
    if err != nil {
        fmt.Println("Create image file failed:", err)
        return
    }
    defer file.Close()
    err = png.Encode(file, img)
    if err != nil {
        fmt.Println("Encode image failed:", err)
        return
    }
    fmt.Println("Captcha image generated successfully.")
}

func main() {
    code := generateRandomCode(4)
    generateCaptchaImage(code)
}

Dans la fonction principale, nous générons d'abord un code de vérification aléatoire à 4 chiffres et appelons generateCaptchaImage. fonction dans la ligne suivante pour la générer. Image du code de vérification.

Après avoir terminé les étapes ci-dessus, nous pouvons exécuter la commande go run main.go dans le terminal pour exécuter le programme, et cela générera une image de code de vérification nommée captcha.png.

Grâce aux exemples de code de cet article, nous avons appris à utiliser les fonctions du langage Go pour générer un code de vérification d'image simple. Bien sûr, dans les applications réelles, nous devons ajouter plus de fonctions pour implémenter la vérification des entrées utilisateur, actualiser les codes de vérification et d'autres fonctions, mais l'exemple de code présenté dans cet article nous fournit la base d'un démarrage rapide.

J'espère qu'en étudiant cet article, vous pourrez comprendre la fonction de génération de code de vérification d'image à l'aide du langage Go. Bonne programmation !

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn