[英]QR code generated by Android zxing library doesn't scan with most QR code scanners
我發布這個來回答我自己的問題(傳播這個詞以防其他人有這個問題。)
我正在使用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); } }
這就是我最終的結果。
它看起來正確,但它不會掃描。 少數QR碼掃描儀仍會掃描它,但大多數不會。 這是怎么回事?
這個問題的答案:
QR碼實際上是翻轉的。 雖然ZXing文檔沒有解釋如何索引qrCode.getMatrix()。getArray()返回的數組,但它假定你將它索引為[y] [x],然后在(x,y)處繪制該單元格)。 問題中發布的代碼將數組索引為[x] [y],它沿Y = X線翻轉圖像。
由此產生的QR碼似乎是合法的,但只有“智能”掃描儀才能檢測到這種翻轉並進行掃描。
糾錯級別位也位於相反的角落,因此如果您要手動驗證(查看圖像右下角的幾位),則表明庫似乎忽略了糾錯設置。
不一定是您問題的答案,但您可以考慮使用Google的QR生成器。 我用過它很簡單。 谷歌QR
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.