一、問題由來
自己在做一個小程式項目的背景,其中需要使用到識别圖檔二維碼資訊,而且是必須在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";
立馬進行測試,問題解決。