I have images containing multiple QR Codes. I need some software that will extract all the codes and dump the results into a text file. I think this probably exists in commercial form, and I’m happy to purchase some software if needed - I just need to know of such a thing. The web is so polluted with AI garbage these days that it is difficult to weed through it.
And MBS Xojo Plugins have more like ZxingBarcodeMBS to read multiple barcodes from an image. Also see ZBarMBS function for the same with a different library.
Try putting this code in a button in a window.
Do a screenshot of some QR codes and click the button.
st1 will contain the contents of the codes it can read.
Var cp As Clipboard=New Clipboard Var st1() As String =Barcode.FromImage(cp.Picture) break
I’ve come to the conclusion that there is a veritable plague of crappy barcode reading software out there and that I will have to write my own. A sad state of affairs.
how about asking an AI to do the job ?
put your images in a folder
give access to the folder to Claude for example
and ask it to extract all qrcodes and save as text file
it will certainly do it.
if there are meny many images you may have to wait, or pay some plan to have it quicker.
In the Go ecosystem, the most powerful and reliable way to handle multiple QR codes is through zxing-cpp wrappers. While there are pure Go libraries, they often struggle with multiple detections in a single frame compared to the C++ port of the Zebra Crossing (ZXing) library.
The most popular wrapper for this is github.com/makiuchi-d/go-zxing.
The Implementation
Here is how you can use the MultiFormatReader (which includes the QRCodeMultiReader logic) to scan an image for every QR code it contains.
Code sample by Gemini, not tested ( Rick )
Gopackage main
import (
"fmt"
"image"
_ "image/jpeg"
_ "image/png"
"os"
"github.com/makiuchi-d/go-zxing"
"github.com/makiuchi-d/go-zxing/qrcode"
)
func main() {
// 1. Open the image file
file, _ := os.Open("multiple_qrs.png")
defer file.Close()
img, _, _ := image.Decode(file)
// 2. Prepare the ZXing binary bitmap
bmp, _ := zxing.NewBinaryBitmapFromImage(img)
// 3. Initialize the Multi-Code Reader specifically for QR
qrReader := qrcode.NewQRCodeMultiReader()
// 4. Decode multiple codes
// The second parameter is "hints" (e.g., TryHarder)
results, err := qrReader.DecodeMultiple(bmp, nil)
if err != nil {
fmt.Printf("Error: %v\n", err)
return
}
// 5. Iterate and print results
fmt.Printf("Found %d QR codes:\n", len(results))
for i, result := range results {
fmt.Printf("[%d] Content: %s\n", i+1, result.GetText())
// You can also get the coordinates of the corners
points := result.GetResultPoints()
fmt.Printf(" Location: Top-Left: %v\n", points[0])
}
}
Key Components for Success
Binary Bitmaps: ZXing doesn’t look at pixels directly; it converts the image into a BinaryBitmap. If your image has shadows or weird lighting, the choice of “Binarizer” matters. HybridBinarizer is usually the default for complex backgrounds.
Hints: You can pass a map[zxing.DecodeHintType]interface{} to the DecodeMultiple function.
Using zxing.DecodeHintType_TRY_HARDER will spend more CPU time to find small or rotated codes.
Using zxing.DecodeHintType_CHARACTER_SET helps if your QR codes contain non-ASCII characters (like UTF-8).
The “Multi” Logic: Standard readers stop the moment they find one valid pattern. QRCodeMultiReader continues to search the remaining “black/white” clusters in the bitmap until it exhausts all potential candidates.
yes it will ask you to come back in xx hours. but you don’t need any API key to ask for barcode reading, so no supplemental bill should appear. only your monthly plan you have to pay.