问题:由于业务原因,需要识别由base64编码字符串生成的二维码大码,尝试使用 github.com/makiuchi-d/gozxing 和 github.com/tuotoo/qrcode 进行识别,但都会出现识别失败的情况,大佬们有解决方案或其它包吗?万分感谢
先上代码,二维码在下面
1、使用 github.com/makiuchi-d/gozxing
解析二维码1、2、3正常
解析二维码4报 `NotFoundException: NotFoundException: (w, h) = (400, 400), (x, y) = (55, -2)`
````
package test
import (
"encoding/base64"
"fmt"
"github.com/makiuchi-d/gozxing"
"github.com/makiuchi-d/gozxing/qrcode"
"image"
"os"
"testing"
)
func TestNewBinaryBitmapFromImage(t *testing.T) {
// 读取二维码
fi, err := os.Open("./4.png")
if err != nil {
fmt.Println(err.Error())
return
}
defer fi.Close()
// 解析二维码
img, _, _ := image.Decode(fi)
bmp, _ := gozxing.NewBinaryBitmapFromImage(img)
qrReader := qrcode.NewQRCodeReader()
result, err := qrReader.Decode(bmp, nil)
if result == nil || err != nil {
fmt.Println(err)
return
}
fmt.Println(result)
// base64解码
infoByte, err := base64.StdEncoding.DecodeString(result.String())
if err != nil {
fmt.Println(err.Error())
return
}
fmt.Println(string(infoByte))
}
````
2、使用 github.com/tuotoo/qrcode
解析二维码4正常
解析二维码1、2、3解析内容不完整,导致base64解码失败
````
package test
import (
"encoding/base64"
"fmt"
"github.com/tuotoo/qrcode"
"os"
"testing"
)
func TestTuotooQrcode(t *testing.T) {
// 读取二维码
fi, err := os.Open("./4.png")
if err != nil {
fmt.Println(err.Error())
return
}
defer fi.Close()
// 解析二维码
qrmatrix, err := qrcode.Decode(fi)
if err != nil {
fmt.Println(err.Error())
return
}
fmt.Println(qrmatrix.Content)
// base64解码
infoByte, err := base64.StdEncoding.DecodeString(qrmatrix.Content)
if err != nil {
fmt.Println(err.Error())
return
}
fmt.Println(string(infoByte))
}
````
二维码1 ![1.png](https://static.golangjob.cn/220629/6d8a876ffc2fb8f6bc76b67fc6f7d4f9.png)
二维码2 ![2.png](https://static.golangjob.cn/220629/2850a66cf3c77a4c94c61852531d9494.png)
二维码3 ![3.png](https://static.golangjob.cn/220629/843e66252ae440ec92bee42f53b2f774.png)
二维码4 ![4.png](https://static.golangjob.cn/220629/557ee7e4f93eb831b3ebeaec01600390.png)
已找到解决方案,使用`github.com/liyue201/goqr`包
````
package test
import (
"encoding/base64"
"fmt"
"github.com/liyue201/goqr"
"image"
"os"
"testing"
)
func TestRecognize(t *testing.T) {
// 读取二维码
fi, err := os.Open("./4.png")
if err != nil {
fmt.Println(err.Error())
return
}
defer fi.Close()
// 解析二维码
img, _, _ := image.Decode(fi)
qrCodes, err := goqr.Recognize(img)
if err != nil {
fmt.Printf("Recognize failed: %v\n", err)
return
}
if len(qrCodes) <= 0 {
fmt.Printf("识别失败")
return
}
fmt.Println(string(qrCodes[0].Payload))
}
````
#1