Android zxing如何识别反转二维码详解

所属分类: 软件编程 / Android 阅读数: 46
收藏 0 赞 0 分享

前言

说起二维码扫描,估计很多人用的是 zxing 吧。

需要学习的朋友们也可以先看看这篇文章:https://www.jb51.net/article/99765.htm

然而 zxing 虽然好用,但是却有一些坑。

这边分析一下自己实际项目遇到的一个坑。

什么坑呢?

下面举个栗子你就懂了。

这边生成二维码使用的是网络上的一个网站联图

以百度为例,正常情况生成的二维码如下:

这种情况下用 zxing 分分钟就可以识别出来。

但是假设我将前景色和后景色调换,生成的二维码如下:

这种情况下 zxing 就识别不出了。

所以说这种时候就很无奈了。毕竟有些场景就需要用到反转二维码。

所以本篇说的 zxing 的坑就是无法识别反转二维码。

咋办呢?凉拌。

这种时候就需要去源码看看了。

看一下二维码解析的代码逻辑在哪?

通过一番折腾,跟踪调试,最后定位到如下位置:

https://github.com/zxing/zxing/blob/master/android/src/com/google/zxing/client/android/DecodeHandler.java#L80

关键代码:(DecodeHandler.java 里面的 decode 方法)

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

如果要识别上面的反转百度二维码,需要如何处理呢?

很简单,只需要将上面的代码改为:

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

即可。

到了这里,相信聪明的你应该知道如何让 zxing 同时支持两种格式了。

只需要设置一个计数器,然后在指定次数(比如前 3 次)里面使用

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

在另外次数(比如后 3 次)里面使用

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

交替使用即可。

这样就可以解决正转和反转二维码的识别了。

NOTE:

  • 通过交替识别可能会降低识别速度,因此次数设置为多少需要自己调试把控。
  • 计数时注意避免次数溢出。

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对脚本之家的支持。

更多精彩内容其他人还在看

使用ViewPager实现android软件使用向导功能实现步骤

现在的大部分android软件,都是使用说明,就是第一次使用该软件时,会出现向导,可以左右滑动,然后就进入应用的主界面了,下面我们就实现这个功能
收藏 0 赞 0 分享

android在异步任务中关闭Cursor的代码方法

android在异步任务中如何关闭Cursor?在我们开发应用的时候,很多时候会遇到这种问题,下面我们就看看代码如何实现
收藏 0 赞 0 分享

Android自定义桌面功能代码实现

android自定义桌面其实很简单,看一个例子就明白了
收藏 0 赞 0 分享

android将图片转换存到数据库再从数据库读取转换成图片实现代码

有时候我们想把图片存入到数据库中,尽管这不是一种明智的选择,但有时候还是不得以会用到,下面说说将图片转换成byte[]数组存入到数据库中去,并从数据库中取出来转换成图像显示出来
收藏 0 赞 0 分享

TextView显示系统时间(时钟功能带秒针变化

用System.currentTimeMillis()可以获取系统当前的时间,我们可以开启一个线程,然后通过handler发消息,来实时的更新TextView上显示的系统时间,可以做一个时钟的功能
收藏 0 赞 0 分享

Android用ListView显示SDCard文件列表的小例子

本文简单实现了用ListView显示SDCard文件列表,目录的回退等功能暂不讨论,获取文件列表,files即为所选择目录下的所有文件列表
收藏 0 赞 0 分享

Android拦截外拨电话程序示例

这篇文章主要介绍了Android拦截外拨电话的示例,大家参考使用吧
收藏 0 赞 0 分享

通过Html网页调用本地安卓(android)app程序代码

如何使用html网页和本地app进行传递数据呢?经过研究,发现还是有方法的,总结了一下,大致有一下几种方式
收藏 0 赞 0 分享

android Textview文字监控(Textview使用方法)

以手机号充值为例,当用户输入最后一位数时候,进行汇率的变换,本文就实现类似这样的功能
收藏 0 赞 0 分享

Android ListView长按弹出菜单二种实现方式示例

这篇文章主要介绍了Android ListView长按弹出菜单的方法,大家参考实现
收藏 0 赞 0 分享
查看更多