Maison >développement back-end >Golang >Utilisez le framework Gin pour implémenter les fonctions de génération et de numérisation de codes QR
Dans la société moderne, les codes QR sont devenus une méthode courante de transmission d'informations. Il peut fournir des informations rapidement et faciliter la vie des gens. Pour les développeurs, la manière de générer et de scanner des codes QR de manière pratique et rapide est une question à prendre en compte. Dans cet article, nous présenterons comment utiliser le framework Gin pour réaliser les fonctions de génération et de numérisation de codes QR.
Tout d'abord, nous devons installer le framework Gin et les bibliothèques associées. Exécutez la commande suivante pour terminer l'installation :
go get -u github.com/gin-gonic/gin go get -u github.com/skip2/go-qrcode go get -u github.com/fogleman/gg
Parmi eux, gin est le framework Gin, go-qrcode est la bibliothèque pour générer des codes QR et gg est la bibliothèque pour générer des images.
Ensuite, nous devons écrire le code pour générer le code QR. Nous pouvons définir une fonction qui génère un code QR. Le code est le suivant :
func generateQRCode(c *gin.Context) { // 获取传递的参数 content := c.Query("content") size := c.DefaultQuery("size", "256") // 生成二维码图片 qr, err := qrcode.New(content, qrcode.Medium) if err != nil { c.JSON(http.StatusInternalServerError, gin.H{ "error": err.Error(), }) return } qr.DisableBorder = true img := qr.Image(int(size)) // 将图片存储为PNG格式 buffer := new(bytes.Buffer) err = png.Encode(buffer, img) if err != nil { c.JSON(http.StatusInternalServerError, gin.H{ "error": err.Error(), }) return } // 将图片作为响应输出给客户端 c.Data(http.StatusOK, "image/png", buffer.Bytes()) }
Dans le code ci-dessus, nous lisons le paramètre content
passé comme le contenu du code QR. , on peut également passer size est utilisé pour définir la taille du code QR. La valeur par défaut est 256. Nous utilisons la fonction qrcode.New
dans la bibliothèque go-qrcode
pour générer des images de code QR. Nous pouvons également supprimer la bordure de l'image via l'attribut DisableBorder
. Enfin, nous utilisons la fonction png.Encode
dans la bibliothèque gg
pour stocker l'image au format PNG, et utilisons la méthode c.Data
de le framework Gin Affiche l'image en réponse au client. content
参数作为二维码的内容,同时也可以通过size
参数来设置二维码的大小,默认值为256。我们使用go-qrcode
库中的qrcode.New
函数来生成二维码图片。我们还可以通过DisableBorder
属性来去掉图片边框。最后,我们使用gg
库中的png.Encode
函数将图片以PNG格式进行存储,并通过Gin框架的c.Data
方法将图片作为响应输出给客户端。
在生成完二维码之后,我们需要编写扫描二维码的代码。我们可以在路由中添加一个扫描二维码的路由,其代码如下:
func scanQRCode(c *gin.Context) { // 读取上传的图片文件 file, err := c.FormFile("file") if err != nil { c.JSON(http.StatusInternalServerError, gin.H{ "error": err.Error(), }) return } // 打开上传的文件 f, err := file.Open() if err != nil { c.JSON(http.StatusInternalServerError, gin.H{ "error": err.Error(), }) return } defer f.Close() // 读取文件内容并解码 img, err := png.Decode(f) if err != nil { c.JSON(http.StatusInternalServerError, gin.H{ "error": err.Error(), }) return } content, err := qrcode.Decode(img) if err != nil { c.JSON(http.StatusInternalServerError, gin.H{ "error": err.Error(), }) return } // 将解码后的内容作为响应输出给客户端 c.JSON(http.StatusOK, gin.H{ "content": content, }) }
在上述代码中,我们使用Gin框架的FormFile
函数读取上传的图片文件。我们再通过png.Decode
函数对文件内容进行解码,使用go-qrcode
库中的qrcode.Decode
函数将解码后的内容作为响应输出给客户端。
在上述步骤完成之后,我们进行代码的完整编写,如下:
package main import ( "bytes" "net/http" "strconv" "github.com/gin-gonic/gin" "github.com/fogleman/gg" "github.com/skip2/go-qrcode" ) func main() { r := gin.Default() // 生成二维码 r.GET("/qrcode", generateQRCode) // 扫描二维码 r.POST("/qrcode", scanQRCode) r.Run() } func generateQRCode(c *gin.Context) { // 获取传递的参数 content := c.Query("content") sizeStr := c.DefaultQuery("size", "256") // 将size参数转换为int类型 size, err := strconv.Atoi(sizeStr) if err != nil { c.JSON(http.StatusInternalServerError, gin.H{ "error": err.Error(), }) return } // 生成二维码图片 qr, err := qrcode.New(content, qrcode.Medium) if err != nil { c.JSON(http.StatusInternalServerError, gin.H{ "error": err.Error(), }) return } qr.DisableBorder = true img := qr.Image(size) // 将图片存储为PNG格式 buffer := new(bytes.Buffer) err = png.Encode(buffer, img) if err != nil { c.JSON(http.StatusInternalServerError, gin.H{ "error": err.Error(), }) return } // 将图片作为响应输出给客户端 c.Data(http.StatusOK, "image/png", buffer.Bytes()) } func scanQRCode(c *gin.Context) { // 读取上传的图片文件 file, err := c.FormFile("file") if err != nil { c.JSON(http.StatusInternalServerError, gin.H{ "error": err.Error(), }) return } // 打开上传的文件 f, err := file.Open() if err != nil { c.JSON(http.StatusInternalServerError, gin.H{ "error": err.Error(), }) return } defer f.Close() // 读取文件内容并解码 img, err := png.Decode(f) if err != nil { c.JSON(http.StatusInternalServerError, gin.H{ "error": err.Error(), }) return } content, err := qrcode.Decode(img) if err != nil { c.JSON(http.StatusInternalServerError, gin.H{ "error": err.Error(), }) return } // 将解码后的内容作为响应输出给客户端 c.JSON(http.StatusOK, gin.H{ "content": content, }) }
在以上代码中,我们使用了Gin框架来定义两个处理函数generateQRCode
和scanQRCode
。在generateQRCode
函数中,我们使用go-qrcode
库生成了二维码,并使用gg
库生成了PNG格式的图片。而在scanQRCode
函数中,我们解析上传的二维码图片,并读取二维码内容,最后将内容通过Gin框架的c.JSON
方法作为响应输出给客户端。我们在主函数中使用Gin框架的路由函数来定义了qrcode
go run main.go
Dans le code ci-dessus, nous utilisons la fonction FormFile
du framework Gin pour lire le fichier image téléchargé. Nous décodons ensuite le contenu du fichier via la fonction png.Decode
, et utilisons la fonction qrcode.Decode
dans la bibliothèque go-qrcode
pour décoder le contenu du fichier. contenu décodé. Sortie au client en réponse.
Code complet
Une fois les étapes ci-dessus terminées, nous écrivons le code complet, comme suit :curl -X POST -F "file=@qrcode.png" http://localhost:8080/qrcodeDans le code ci-dessus, nous utilisons le framework Gin pour définir deux fonctions de traitementgénérerQRCode et
scanQRCode
. Dans la fonction generateQRCode
, nous utilisons la bibliothèque go-qrcode
pour générer un code QR, et utilisons la bibliothèque gg
pour générer une image au format PNG . Dans la fonction scanQRCode
, nous analysons l'image du code QR téléchargée, lisons le contenu du code QR et transmettons enfin le contenu via la méthode c.JSON
du framework Gin en guise de réponse. au client. Nous utilisons la fonction de routage du framework Gin dans la fonction principale pour définir les requêtes GET et POST sous le chemin qrcode
correspondant respectivement aux fonctions de génération de codes QR et de numérisation de codes QR. 🎜🎜🎜Effet d'utilisation🎜🎜🎜Après avoir terminé le code ci-dessus, nous pouvons démarrer le service via la commande suivante : 🎜rrreee🎜Puis visitez http://localhost:8080/qrcode?content=HelloWorld dans le navigateur pour générer un code binaire Code QR. Si nous voulons scanner le code QR que nous venons de générer, nous devons d'abord enregistrer le code QR en tant que fichier image au format PNG, puis utiliser des outils tels que curl ou Postman pour télécharger le fichier image, par exemple : 🎜rrreee🎜Dans ce De cette manière, nous pouvons renvoyer Récupérer le contenu contenu dans le code QR dans la réponse. 🎜🎜À ce stade, nous avons implémenté avec succès les fonctions de génération et de numérisation de codes QR à l'aide du framework Gin, ce qui facilite notre travail de développement. 🎜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!