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:
- 通过交替识别可能会降低识别速度,因此次数设置为多少需要自己调试把控。
- 计数时注意避免次数溢出。
如果你有其他方法,欢迎留言讨论。

zxing 如何识别反转二维码的更多相关文章
- 【转】Delphi+Halcon实战一:两行代码识别QR二维码
Delphi+Halcon实战一:两行代码识别QR二维码 感谢网友:绝代双椒( QQ号应原作者要求隐藏了:xxxx6348)的支持 本文是绝代双椒的作品,因为最近在忙zw量化培训,和ziwang.co ...
- 【java】google的zxing架包生成二维码和读取二维码【可带文字和logo】
承接RC4生成不重复字符串的需求之后,因为优惠码要方便用户使用的缘故,所以思来想去,觉得还是直接生成二维码给用户直接扫比较实用,也不用用户专门记录冗长的优惠码编号. ================= ...
- com.google.zxing.NotFoundException-识别图片二维码信息错误
一.问题由来 自己在做一个小程序项目的后台,其中需要使用到识别图片二维码信息,而且是必须在Java后台进行识别二维码操作.去百度里面很快找到一个方法, 可以识别简单的二维码,而且自己生成的简单的二维码 ...
- 在Android上使用ZXing识别条形码/二维码
越来越多的手机具备自动对焦的拍摄功能,这也意味着这些手机可以具备条码扫描的功能.......手机具备条码扫描的功能,可以优化购物流程,快速存储电子名片(二维码)等. 本文使用ZXing 1.6实现条码 ...
- ZXing 生成、读取二维码(带logo)
前言 ZXing,一个支持在图像中解码和生成条形码(如二维码.PDF 417.EAN.UPC.Aztec.Data Matrix.Codabar)的库.ZXing(“zebra crossing”)是 ...
- zxing生成和解析二维码
今天忙了一天的二维码,用了QRcode和ZXing两个开源包.结果发现 ZXing比QRcode更好用一些,它直接可以定义二维码生成图案的大小,而QRcode生成的二维码是根据二维码包含的内容多少来定 ...
- ZXing 生成、解析二维码图片的小示例
概述 ZXing 是一个开源 Java 类库用于解析多种格式的 1D/2D 条形码.目标是能够对QR编码.Data Matrix.UPC的1D条形码进行解码. 其提供了多种平台下的客户端包括:J2ME ...
- ZXing生成条形码、二维码、带logo二维码
采用的是开源的ZXing,Maven配置如下,jar包下载地址,自己选择版本下载,顺便推荐下Maven Repository <!-- https://mvnrepository.com/art ...
- 使用Google ZXing生成和解析二维码
pom.xml <?xml version="1.0" encoding="UTF-8"?> <project xmlns="htt ...
随机推荐
- Python的list用法笔记
今天做leetcode的str反转,学到了不少python的用法,这里做个笔记: str和list互相转换 str转list >>> a='apple' >>> l ...
- Postman----模拟服务器返回数据
使用场景:在某些情况下,比如A接口还没开发好,我们需要测试B接口,刚好B接口的请求数据中需要包含A接口返回的数据,这时我们就可以模拟A接口服务器返回的数据来测试B接口 解决办法: 举例:模拟此 htt ...
- Uiautomator--出现报错“urllib3.exceptions.ProtocolError:<'Connection aborted.',error<10054,''>>”的解决方式!
在运行uiautomator时,出现报错"urllib3.exceptions.ProtocolError:<'Connection aborted.',error<10054, ...
- Extjs中数据导出到Excel
1.前端代码(URL+前端传入参数) window.location.href="studnetMaintainAction!exportExcel" ...
- C#相等性 - “==”
今天写一下C#里的“==”这个操作符. 原始类型 假象 在刚学C#的时候,我以为C#里的==和.NET里的object.Equals()方法是一样的,就是一个语法糖而已.其实它们的底层机制是不一样的, ...
- java提高(15)---java深浅拷贝
#java深浅拷贝 一.前言 为什么会有深浅拷贝这个概念? 我觉得主要跟JVM内存分配有关,对于基本数据类型,只存在栈内存,所以它的拷贝不存在深浅拷贝这个概念.而对于对象而言,一个对象的创建会在内存中 ...
- EFCore动态切换Schema
最近做个分库分表项目,用到schema的切换感觉还是有些坑的,在此分享下. 先简要说下我们的分库分表 分库分表规则 我定的规则是,订单号(数字)除以16,得出的结果为这个订单所在的数据库,然后他的余数 ...
- DSAPI多功能.NET函数库组件
DSAPI.dll不定期更新,增加功能,故无法每次都发到网上,如果需要获得最新版DSAPI.dll的,请到QQ群:419130936群共享里下载. 简介 dsapi.dll是一款基于.net平 ...
- SoEasyPlatform 代码生成器
介绍 一款轻量级开源的代码生成器,相对较动软代码生成器而言要轻量的多,支持多种数据库,所用到dll组件也都在github有源码,代码非常的简单有点基础的看源码可以把生成的项目改成自已的风格. 特色 该 ...
- 设计模式 | 装饰模式(decorator)
定义: 装饰模式是在不必改变原类文件和使用继承的情况下,动态地扩展一个对象的功能.它是通过创建一个包装对象,也就是装饰来包裹真实的对象. 结构:(书中图,侵删) 一个被装饰接口类:从具体类中抽象出来, ...