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

 更新时间:2018年09月12日 09:22:16   作者:AndroidTraveler  
这篇文章主要给大家介绍了关于Android zxing如何识别反转二维码的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

前言

说起二维码扫描,估计很多人用的是 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:

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

总结

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

相关文章

  • android imageview图片居中技巧应用

    android imageview图片居中技巧应用

    做UI布局,尤其是遇到比较复杂的多重LinearLayout嵌套,常常会被一些比较小的问题困扰上半天,可是无论怎样设置layout_gravity属性,都无法达到效果
    2012-11-11
  • React Native之在Android上添加阴影的实现

    React Native之在Android上添加阴影的实现

    这篇文章主要介绍了React Native之在Android上添加阴影的实现方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-03-03
  • Android Build类的详解及简单实例

    Android Build类的详解及简单实例

    这篇文章主要介绍了Android Build类的详解及简单实例的相关资料,希望通过本文大家能够理解掌握这部分内容,需要的朋友可以参考下
    2017-08-08
  • Android实现音乐播放器锁屏页

    Android实现音乐播放器锁屏页

    这篇文章主要为大家详细介绍了Android实现音乐播放器锁屏页,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-12-12
  • Android Activity向右滑动返回

    Android Activity向右滑动返回

    这篇文章主要介绍了Android Activity向右滑动返回,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-06-06
  • Android使用Intent启动其他非系统应用程序的方法

    Android使用Intent启动其他非系统应用程序的方法

    这篇文章主要介绍了Android使用Intent启动其他非系统应用程序的方法,实例分析了Intent调用系统应用程序的相关技巧,需要的朋友可以参考下
    2015-12-12
  • Android 微信摇一摇功能实现详细介绍

    Android 微信摇一摇功能实现详细介绍

    这篇文章主要介绍了Android 微信摇一摇功能实现详细介绍的相关资料,并附实例代码及实现微信摇一摇的思路,需要的朋友可以参考下
    2016-11-11
  • Flutter搞定宽高不统一布局开发的方法详解

    Flutter搞定宽高不统一布局开发的方法详解

    我们在开发移动端界面的时候,经常会遇到一组尺寸不一的组件需要作为同一组展示,所以本文就将利用Wrap组件搞定宽高不统一布局开发,需要的可以参考一下
    2023-06-06
  • Android Studio中使用SQLite的操作方法

    Android Studio中使用SQLite的操作方法

    这篇文章主要介绍了Android Studio中使用SQLite的操作方法的相关资料,需要的朋友可以参考下
    2023-06-06
  • Android编程实现提取网址链接的方法

    Android编程实现提取网址链接的方法

    这篇文章主要介绍了Android编程实现提取网址链接的方法,涉及Android针对字符串的正则匹配操作相关技巧,需要的朋友可以参考下
    2016-10-10

最新评论