gozxing icon indicating copy to clipboard operation
gozxing copied to clipboard

FormatException: FormatException: we didn't find a close enough match 0x2fe8e

Open jingzhaoyang opened this issue 10 months ago • 2 comments

I get an error using gozxing to decode the QR code:

FormatException: FormatException: we didn't find a close enough match 0x2fe8e

I chose other QR code decoding libraries as a comparison, and only gozxing fails to decode, and I'm not sure if it's caused by a problem with my code.

Test image:

e

Here's my code:

package main

import (
	"bytes"
	"fmt"
	"image"
	"io/ioutil"
	"log"
	"os"

	"github.com/clsung/grcode"
	"github.com/liyue201/goqr"
	"github.com/makiuchi-d/gozxing"
	"github.com/makiuchi-d/gozxing/qrcode"
	ttqrcode "github.com/tuotoo/qrcode"
)

func goQR(filename string) {
	imgdata, err := ioutil.ReadFile(filename)
	if err != nil {
		fmt.Printf("%v\n", err)
		return
	}

	img, _, err := image.Decode(bytes.NewReader(imgdata))
	if err != nil {
		fmt.Printf("image.Decode error: %v\n", err)
		return
	}
	qrCodes, err := goqr.Recognize(img)
	if err != nil {
		fmt.Printf("Recognize failed: %v\n", err)
		return
	}
	for _, qrCode := range qrCodes {
		fmt.Printf("[goqr] text: %s\n", qrCode.Payload)
	}
}
func ttQR(filename string) {
	fi, err := os.Open(filename)
	if err != nil {
		fmt.Println(err.Error())
		return
	}
	defer fi.Close()
	qrmatrix, err := ttqrcode.Decode(fi)
	if err != nil {
		fmt.Println(err.Error())
		return
	}
	fmt.Printf("[tuotoo/qrcode] text: %s\n", qrmatrix.Content)

}

func gozxingQR(filename string) {
	// open and decode image file
	fileQR, _ := os.Open(filename)
	imgQR, _, _ := image.Decode(fileQR)

	// prepare BinaryBitmap
	bmp, _ := gozxing.NewBinaryBitmapFromImage(imgQR)

	// decode image
	qrReader := qrcode.NewQRCodeReader()
	result, err := qrReader.Decode(bmp, nil)
	if err != nil {
		fmt.Printf("Decode failed: %v\n", err)
		return
	}
	fmt.Printf("[gozxing/qrcode] text: %s\n", result.GetText())
}

func zbarQR(filename string) {
	results, err := grcode.GetDataFromFile(filename)
	if err != nil {
		log.Fatal(err)
	}
	if len(results) == 0 {
		log.Printf("No qrcode detected from file: %s", filename)
	}
	for _, result := range results {
		fmt.Printf("[zbarQR] text: %s\n", result)
	}

}
func main() {
	goQR("e.png")
	ttQR("e.png")
	gozxingQR("e.png")
	zbarQR("e.png")
}

Result:

[goqr] text: 0028834a8e92f40112e7b92a39452c245de5d7f1f508507583c485c0c3480957e3a2ef0db73d37aaf40386b6fb7b74972eb20934d940fb42a8180c923a088396ed071b517ecd8c7fd953fb9899f64678f3b8efbff6bdb0106434bed23f822262488c9c4339b2d9f798790ce63366ee30ee8fed8fc1465bc057bfb2d024c84806b71ade626a7fb4fce3d7cce8d733a28f98213b2d03f7eda38b176e6b305cf1fe8461215d0e78f75856ade9376d469f9a41798761b73ccd82e523250221dc133414eff79e249cd164ac7cb875e997637ffee4f4acfd15e94df8cdf86fafdf5f920d2560ea18a0561ba20f04d1bd8b5df668df1cfb7b6636e7671877fd66c364e1041c
[tuotoo/qrcode] text: 0028834a8e92f40112e7b92a39452c245de5d7f1f508507583c485c0c3480957e3a2ef0db73d37aaf40386b6fb7b74972eb20934d940fb42a8180c923a088396ed071b517ecd8c7fd953fb9899f64678f3b8efbff6bdb0106434bed23f822262488c9c4339b2d9f798790ce63366ee30ee8fed8fc1465bc057bfb2d024c84806b71ade626a7fb4fce3d7cce8d733a28f98213b2d03f7eda38b176e6b305cf1fe8461215d0e78f75856ade9376d469f9a41798761b73ccd82e523250221dc133414eff79e249cd164ac7cb875e997637ffee4f4acfd15e94df8cdf86fafdf5f920d2560ea18a0561ba20f04d1bd8b5df668df1cfb7b6636e7671877fd66c364e1041c
Decode failed: FormatException: FormatException: we didn't find a close enough match 0x2fe8e
[zbarQR] text: 0028834a8e92f40112e7b92a39452c245de5d7f1f508507583c485c0c3480957e3a2ef0db73d37aaf40386b6fb7b74972eb20934d940fb42a8180c923a088396ed071b517ecd8c7fd953fb9899f64678f3b8efbff6bdb0106434bed23f822262488c9c4339b2d9f798790ce63366ee30ee8fed8fc1465bc057bfb2d024c84806b71ade626a7fb4fce3d7cce8d733a28f98213b2d03f7eda38b176e6b305cf1fe8461215d0e78f75856ade9376d469f9a41798761b73ccd82e523250221dc133414eff79e249cd164ac7cb875e997637ffee4f4acfd15e94df8cdf86fafdf5f920d2560ea18a0561ba20f04d1bd8b5df668df1cfb7b6636e7671877fd66c364e1041c

jingzhaoyang avatar Apr 29 '24 01:04 jingzhaoyang

Try NewQRCodeMultiReader() in github.com/makiuchi-d/gozxing/multi/qrcode. It has different detection algorithm.

func gozxingQR(filename string) {
	// open and decode image file
	fileQR, _ := os.Open(filename)
	imgQR, _, _ := image.Decode(fileQR)

	// prepare BinaryBitmap
	bmp, _ := gozxing.NewBinaryBitmapFromImage(imgQR)

	// decode image
	qrReader := qrcode.NewQRCodeMultiReader()
	result, err := qrReader.DecodeMultiple(bmp, nil)
	if err != nil {
		fmt.Printf("Decode failed: %v\n", err)
		return
	}
	fmt.Printf("[gozxing/multi/qrcode] text: %s\n", result[0].GetText())
}

makiuchi-d avatar Apr 29 '24 16:04 makiuchi-d

Thanks for your reply, it works fine using the code you provided. Was the reason it didn't work before because there were other pixels interfering with the QR code?

jingzhaoyang avatar Apr 30 '24 07:04 jingzhaoyang