我爱学习网首页 | 设为首页 | 收藏本站 | 网站地图 您好,欢迎光临我爱学习网
我爱学习网

当前位置:首页 > 编程开发 > 移动开发 > 安卓 >

使用zxing解析复杂二维码异常

时间:2017-03-05 10:46 来源:我爱学习网 | 作者:我爱学习网 | 本文已影响

使用zxing解析二维码抛出com.google.zxing.NotFoundException 解决方案


调用zxing使用摄像头进行二维码扫描,没什么问题;当选取手机本地相册二维码进行解析时,简单的也没问题。但二维码复杂了,比如中间有LOGO的时候就会抛出com.google.zxing.NotFoundException的异常。

可能存在以下情况,但这不是我最终的解决方案,我用了最后一个解决方案:
 

1、二维码所有bit都是0,然后分析了一下,发现我在生成二维码的时候白色像素填充使用的是透明色,这样在显示的时候因为背景是白色,所以看上去和用手机扫都没有问题,但是自己代码识别的时候就会把透明色识别为黑色,这样就导致整个二维码图片全是黑色像素,所以zxing抛出com.google.zxing.NotFoundException异常。


2、乱码。

 

  1. // 解码设置编码方式为:utf-8,
  2. hints.put(DecodeHintType.CHARACTER_SET, "utf-8");


3.优化精度。

 

  1. //优化精度
  2. hints.put(DecodeHintType.TRY_HARDER, Boolean.TRUE);


4.开启PURE_BARCODE模式。(这是解决我的方案,带图片LOGO的解码方案)

 

  1. //复杂模式,开启PURE_BARCODE模式
  2. hints.put(DecodeHintType.PURE_BARCODE, Boolean.TRUE);



第4个方案,是解决我的问题的方案,大家可以试试。

It decodes fine, but if you intend to decode a complex pure image you probably want PURE_BARCODE mode.


附上我的部分解码代码源码,具体如何扫描手机本地相册二维码图片,可以参考githup上的开源项目zxing

 

  1. /**
  2. * 流图片解码
  3. * @param input
  4. * @return QRResult
  5. */
  6. public static QRResult decode(InputStream input) {
  7.  
  8.  BufferedImage image;
  9.  try {
  10.       if (null == input) {
  11.       return "得到的文件不存在!;
  12.       }
  13.      image = ImageIO.read(input);
  14.      LuminanceSource source = new BufferedImageLuminanceSource(image);
  15.      BinaryBitmap bitmap = new BinaryBitmap(new HybridBinarizer(source));
  16.     
  17.      Map<DecodeHintType,Object> hints = new LinkedHashMap<DecodeHintType,Object>();
  18.      // 解码设置编码方式为:UTF-8,
  19.      hints.put(DecodeHintType.CHARACTER_SET, "UTF-8");
  20.      //优化精度
  21.      hints.put(DecodeHintType.TRY_HARDER, Boolean.TRUE);
  22.     //复杂模式,开启PURE_BARCODE模式
  23.     hints.put(DecodeHintType.PURE_BARCODE, Boolean.TRUE);
  24.     Result result = new MultiFormatReader().decode(bitmap, hints);
  25.     String txt = result.getText();
  26.     return "成功解码:"+txt);
  27.   } catch (Exception e) {
  28.     return "解码失败!";
  29.   }
  30. }
(责任编辑:我爱学习网)

更多技巧文章请关注公众号:huixiang_360


分享到: 更多