zxing 如何识别反转二维码
程序员文章站
2022-06-23 14:36:48
说起二维码扫描,估计很多人用的是 "zxing" 吧。 然而 zxing 虽然好用,但是却有一些坑。 这边分析一下自己实际项目遇到的一个坑。 什么坑呢? 下面举个栗子你就懂了。 这边生成二维码使用的是网络上的一个网站 "联图" 以百度为例,正常情况生成的二维码如下: 这种情况下用 zxing 分分钟 ......
说起二维码扫描,估计很多人用的是 吧。
然而 zxing 虽然好用,但是却有一些坑。
这边分析一下自己实际项目遇到的一个坑。
什么坑呢?
下面举个栗子你就懂了。
这边生成二维码使用的是网络上的一个网站
以百度为例,正常情况生成的二维码如下:
这种情况下用 zxing 分分钟就可以识别出来。
但是假设我将前景色和后景色调换,生成的二维码如下:
这种情况下 zxing 就识别不出了。
所以说这种时候就很无奈了。毕竟有些场景就需要用到反转二维码。
所以本篇说的 zxing 的坑就是无法识别反转二维码。
咋办呢?凉拌。
这种时候就需要去源码看看了。
看一下二维码解析的代码逻辑在哪?
通过一番折腾,跟踪调试,最后定位到如下位置:
关键代码:(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 zxing如何识别反转二维码详解
-
Android上使用ZXing识别条形码与二维码的方法
-
opencv调用nu-book/zxing-cpp识别二维码
-
使用zxing二维码识别
-
如何生成一个安卓和苹果手机都能识别的二维码
-
利用Zxing生成和识别二维码(java版本)
-
C++利用zxing识别二维码
-
彩色二维码生成器,带logo文字和中心文字 彩色二维码生成器,带logo文字和中心文字 使用.net 4.0和zxing开发, 内容支持中文,使用UTF-8编码,一般扫描二维码软件可以识别。 最上方显示文字log,字数可以调节。 正中间的圆圈内显示中心文字。 微盘下载地址:彩色二维码生成器.net2.0win7可用byKimmKing.zip
-
彩色二维码生成器,带logo文字和中心文字 彩色二维码生成器,带logo文字和中心文字 使用.net 4.0和zxing开发, 内容支持中文,使用UTF-8编码,一般扫描二维码软件可以识别。 最上方显示文字log,字数可以调节。 正中间的圆圈内显示中心文字。 微盘下载地址:彩色二维码生成器.net2.0win7可用byKimmKing.zip
-
zxing 如何识别反转二维码