天天看點

com.google.zxing.NotFoundException-識别圖檔二維碼資訊錯誤

一、問題由來

自己在做一個小程式項目的背景,其中需要使用到識别圖檔二維碼資訊,而且是必須在Java背景進行識别二維碼操作。去百度裡面很快找到一個方法,

可以識别簡單的二維碼,而且自己生成的簡單的二維碼圖檔也能夠正确識别,這樣我就以為可以了。項目中有個需求,将自己生成的二維碼圖檔和其他

圖檔合成一張新的圖檔,功能我也很快實作,并且部署到阿裡雲的測試伺服器,生成二維碼圖檔沒有任何問題。可是在進行聯合調試時,發現問題。報

了如标題中的錯誤,導緻二維碼不能正确識别,程式不能正常運作。

二、問題分析

拿到這個問題後,感覺很奇怪以前都好好的,怎麼突然就不行了呢?自己以前是親自測試過使用自己寫的程式來識别二維碼資訊,100%确認是沒問題的。

把這個問題往百度裡面一扔,很快出來很多的答案,自己也看了其中的幾篇博文,了解到報錯的原因。報錯的原因是,如果使用自己原來的識别圖檔的方法

識别簡單的二維碼沒問題,比如識别的圖檔隻有單張圖檔,不是合成、處理過的,如果是處理過的圖檔,那麼就會出現錯誤。

三、解決方案

知道問題的原因後,自己嘗試找去找解決辦法,在百度裡面檢視了很多的答案,基本上都一個一個的嘗試,最終都沒有解決。

至少嘗試了三四種方法。

然後去google上面查找問題的答案,在stackoverflow上面找到一篇檔案,解決了這個辦法。

https://stackoverflow.com/questions/10583622/com-google-zxing-notfoundexception-exception-comes-when-core-java-program-execut

原代碼如下:

BufferedImage image;

image = ImageIO.read(imageFile);

BufferedImage cropedImage = image.getSubimage(0, 0, 914, 400);

// using the cropedImage instead of image

LuminanceSource source = new BufferedImageLuminanceSource(cropedImage);

BinaryBitmap bitmap = new BinaryBitmap(new HybridBinarizer(source));

// barcode decoding

QRCodeReader reader = new QRCodeReader();

Result result = null;

try

{

result = reader.decode(bitmap);

}

catch (ReaderException e)

return "reader error";

立馬進行測試,問題解決。