Android zxing库生成的QR码不会扫描大多数QR码扫描仪

时间:2013-02-12 16:27:02

标签: android qr-code zxing

我发布这个来回答我自己的问题(传播这个词以防其他人遇到这个问题。)

我正在使用ZXing的Android库生成QR码。 QR码生成正常,我能够显示它(在使用QRCode.getMatrix().getArray()手动渲染后)。但是,生成的QR码不能扫描Android市场上大多数QR码阅读器,包括ZXing的扫描仪本身!

此外,每当我为Encoder设置纠错级别时,它会忽略它并以某种随机级别(通常是级别Q)进行编码。

我使用这段代码生成QR码:


    QRCode code;

    try
    {
            code = Encoder.encode("...QRCODEDATA...", ErrorCorrectionLevel.L);
    }
    catch(WriterException ex)
    {
            log("Failed to obtain a QR code");
            return null;
    }
    

...然后,在获得QRCode对象后,我像这样绘制位图:

byte[][] bitArray = qrCode.getMatrix().getArray();

        if(bitArray == null || bitArray.length < 1)
            return null;

        for(int x = 0;x < bitArray.length;x++)
        {
            for(int y = 0;y < bitArray[x].length;y++)
            {
                if(bitArray[x][y] == 0)
                    bitmapDrawCell(x,y,WHITE);
                else
                    bitmapDrawCell(x,y,BLACK);
            }
        }

if(bitArray == null || bitArray.length < 1) return null; for(int x = 0;x < bitArray.length;x++) { for(int y = 0;y < bitArray[x].length;y++) { if(bitArray[x][y] == 0) bitmapDrawCell(x,y,WHITE); else bitmapDrawCell(x,y,BLACK); } }

Here's我最终得到了什么。


它看起来正确,但它不会扫描。少数QR码扫描仪仍会扫描它,但是 大多数人不会。发生了什么事?

2 个答案:

答案 0 :(得分:3)

这个问题的答案:

实际上翻了QR码。虽然ZXing文档没有解释如何索引qrCode.getMatrix()。getArray()返回的数组,但它假定你将它索引为[y] [x],然后在(x,y)处绘制该单元格)。问题中发布的代码将数组索引为[x] [y],它沿Y = X线翻转图像。

生成的QR码似乎合法,但只有“智能”扫描仪可以检测到这种翻转并进行扫描。

错误纠正级别位也位于相反的角落,因此如果您要手动验证(查看图像右下角的几位),则表明库似乎忽略了错误纠正设置。

flipped QR code

答案 1 :(得分:2)

不一定是您问题的答案,但您可以考虑使用Google的QR生成器。我用过它很简单。 Google QR