golang 解析二维码

作者: aries 分类: Go 发布时间: 2021-05-18 14:30 ė 889次浏览 6 0评论

引入一个gozxing包。 java,python 都有基于zxing 的二维码解析包 实现的还都不错 java的要早一些。都是同一个作者写的。gozxing github address
我这个demo 是先上传文件(图片)。然后将文件流写入到gozxing 的函数中解析二维码就可以了。如果你不想上传文件 可以直接用os.Open(“xxx.png”) 来打开也可以
废话不多说,直接上代码。

package main

import (
"fmt"
"github.com/gin-gonic/gin"
"github.com/makiuchi-d/gozxing"
"github.com/makiuchi-d/gozxing/qrcode"
"image"
"image/gif"
"image/jpeg"
_ "image/png"
"io"
"net/http"
)

func main() {
router := gin.Default()
router.POST("/upload", func(c *gin.Context) {
// The default memory allocation is 10M
file, err := c.FormFile("filename")
if err != nil {
c.String(http.StatusBadRequest, fmt.Sprintf("get form err: %s", err.Error()))
return
}

	<span class="highlight-c1">//文件大小限制

if file.Size > (10 << 20) {
c.String(http.StatusBadRequest, fmt.Sprintf("get form err: %s", "文件太大,请重新上传"))
return
}

	<span class="highlight-nx">c</span><span class="highlight-p">.</span><span class="highlight-nf">String</span><span class="highlight-p">(</span><span class="highlight-nx">http</span><span class="highlight-p">.</span><span class="highlight-nx">StatusOK</span><span class="highlight-p">,</span> <span class="highlight-nx">fmt</span><span class="highlight-p">.</span><span class="highlight-nf">Sprintf</span><span class="highlight-p">(</span><span class="highlight-s">&#34;File %s uploaded success&#34;</span><span class="highlight-p">,</span> <span class="highlight-nx">file</span><span class="highlight-p">.</span><span class="highlight-nx">Filename</span><span class="highlight-p">))</span>
	<span class="highlight-c1">//fmt.Println(file.Filename, &#34;文件名&#34;)

fi, err := file.Open()
if err != nil {
fmt.Println(err)
}
defer fi.Close()

	<span class="highlight-nx">str</span> <span class="highlight-o">:=</span> <span class="highlight-nf">GetPaymentStr</span><span class="highlight-p">(</span><span class="highlight-nx">fi</span><span class="highlight-p">).</span><span class="highlight-nf">String</span><span class="highlight-p">()</span>
	<span class="highlight-nx">fmt</span><span class="highlight-p">.</span><span class="highlight-nf">Println</span><span class="highlight-p">(</span><span class="highlight-s">&#34;qrcode_url:&#34;</span><span class="highlight-p">,</span> <span class="highlight-nx">str</span><span class="highlight-p">)</span>
<span class="highlight-p">})</span>
<span class="highlight-nx">router</span><span class="highlight-p">.</span><span class="highlight-nf">Run</span><span class="highlight-p">(</span><span class="highlight-s">&#34;:8000&#34;</span><span class="highlight-p">)</span>

}

func GetPaymentStr(fi io.Reader) (paymentCodeUrl *gozxing.Result) {
img, _, err := image.Decode(fi)
if err != nil {
fmt.Println(err)
}
// prepare BinaryBitmap
bmp, _ := gozxing.NewBinaryBitmapFromImage(img)
// decode image
qrReader := qrcode.NewQRCodeReader()
result, err := qrReader.Decode(bmp, nil)
if err != nil {
fmt.Println(err)
}

<span class="highlight-k">return</span> <span class="highlight-nx">result</span>

}

来源:https://blog.csdn.net/daimading/article/details/92774052

换一个
暂无评论
Ɣ回顶部