Heim > Artikel > Backend-Entwicklung > Verwenden Sie das Gin-Framework, um QR-Code-Generierungs- und Scanfunktionen zu implementieren
In der modernen Gesellschaft sind QR-Codes zu einer gängigen Methode zur Informationsübertragung geworden. Es kann Informationen schnell liefern und das Leben der Menschen erleichtern. Für Entwickler ist die Frage, wie sie QR-Codes bequem und schnell generieren und scannen können, eine Frage, die berücksichtigt werden muss. In diesem Artikel stellen wir vor, wie Sie mit dem Gin-Framework die Generierungs- und Scanfunktionen von QR-Codes realisieren.
Zuerst müssen wir das Gin-Framework und die zugehörigen Bibliotheken installieren. Führen Sie den folgenden Befehl aus, um die Installation abzuschließen:
go get -u github.com/gin-gonic/gin go get -u github.com/skip2/go-qrcode go get -u github.com/fogleman/gg
Gin ist das Gin-Framework, go-qrcode ist die Bibliothek zum Generieren von QR-Codes und gg ist die Bibliothek zum Generieren von Bildern.
Als nächstes müssen wir den Code schreiben, um den QR-Code zu generieren. Wir können eine Funktion definieren, die einen QR-Code generiert:
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()) }
Im obigen Code lesen wir den übergebenen content
-Parameter gleichzeitig , wir können auch size wird verwendet, um die Größe des QR-Codes festzulegen. Der Standardwert ist 256. Wir verwenden die Funktion qrcode.New
in der Bibliothek go-qrcode
, um QR-Code-Bilder zu generieren. Wir können den Bildrand auch über das Attribut DisableBorder
entfernen. Schließlich verwenden wir die Funktion png.Encode
in der Bibliothek gg
, um das Bild im PNG-Format zu speichern, und verwenden die Methode c.Data
von Das Gin-Framework gibt das Bild als Antwort an den Client aus. 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
Im obigen Code verwenden wir die Funktion FormFile
des Gin-Frameworks, um die hochgeladene Bilddatei zu lesen. Anschließend dekodieren wir den Dateiinhalt mit der Funktion png.Decode
und verwenden die Funktion qrcode.Decode
in der Bibliothek go-qrcode
, um ihn zu dekodieren dekodierter Inhalt als Antwort an den Client ausgegeben.
Kompletter Code
Nachdem die obigen Schritte abgeschlossen sind, schreiben wir den vollständigen Code wie folgt:curl -X POST -F "file=@qrcode.png" http://localhost:8080/qrcodeIm obigen Code verwenden wir das Gin-Framework, um zwei Verarbeitungsfunktionen zu definierenQRCode generieren und
QRCode scannen
. In der Funktion generateQRCode
verwenden wir die Bibliothek go-qrcode
, um einen QR-Code zu generieren, und die Bibliothek gg
, um ein Bild im PNG-Format zu generieren . In der Funktion scanQRCode
analysieren wir das hochgeladene QR-Code-Bild, lesen den Inhalt des QR-Codes und leiten den Inhalt schließlich als Antwortausgabe durch die Methode c.JSON
des Gin-Frameworks an den Kunden. Wir verwenden die Routing-Funktion des Gin-Frameworks in der Hauptfunktion, um die GET- und POST-Anfragen unter dem Pfad qrcode
zu definieren, die den Funktionen zum Generieren von QR-Codes bzw. Scannen von QR-Codes entsprechen. 🎜🎜🎜Nutzungseffekt🎜🎜🎜Nach Abschluss des obigen Codes können wir den Dienst über den folgenden Befehl starten: 🎜rrreee🎜Besuchen Sie dann http://localhost:8080/qrcode?content=HelloWorld im Browser, um einen Binärcode zu generieren QR-Code. Wenn wir den soeben generierten QR-Code scannen möchten, müssen wir den QR-Code zunächst als Bilddatei im PNG-Format speichern und dann Tools wie Curl oder Postman verwenden, um die Bilddatei hochzuladen, zum Beispiel: 🎜rrreee🎜Hier Auf diese Weise können wir den im QR-Code enthaltenen Inhalt in der Antwort abrufen. 🎜🎜Zu diesem Zeitpunkt haben wir die QR-Code-Generierungs- und Scanfunktionen mithilfe des Gin-Frameworks erfolgreich implementiert, was unsere Entwicklungsarbeit erleichtert. 🎜Das obige ist der detaillierte Inhalt vonVerwenden Sie das Gin-Framework, um QR-Code-Generierungs- und Scanfunktionen zu implementieren. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!