一、Zxing是什么?
ZXing是一个开放源码的,用Java实现的多种格式的1D/2D条码图像处理库,它包含了联系到其他语言的端口。Zxing可以实现使用手机的内置的摄像头完成条形码的扫描及解码。
其所支持的基本1D/2D条码类型有:
1D product | 1D industrial | 2D |
---|---|---|
UPC-A | Code 39 | QR Code |
UPC-E | Code 93 | Data Matrix |
EAN-8 | Code 128 | Aztec |
EAN-13 | Codabar | PDF 417 |
UPC/EAN Extension 2/5 | ITF | MaxiCode |
RSS-14 | ||
RSS-Expanded |
二、核心代码确定
1.代码目录结构分析
模块 | 描述 |
---|---|
android-core | 配置Android摄像头 |
android-integration | 简化Intent与Android客户端集成 |
android | Android客户端源码 |
core | 条码解码编码的核心算法 |
javase | JavaSE的客户端代码 |
zxingorg | 在线解析二维码 |
zxing.appspot.com | 在线生成二维码 |
2.核心代码确定
经过小组讨论,我们定位项目的核心代码为Android模块、core模块以及Android-core模块
Android模块是调用Android手机摄像头,进行扫码并返回结果的主要功能模块,其项目目录如下:
- android包:zxing客户端完成扫码流程的主要实现处理类(包括相机预览、扫描、解码、返回结果等)
- camera包:包含摄像头的相关管理类
- share包:处理条码分享功能
- encode包:编码功能的组件集合(具体编码算法在core模块内)
- clipboard包:剪贴板功能
- history包:实现“历史记录”、连接数据库的相关类
- result包:条码扫描的结果被分为不同的类型(如图书ISBN码、wifi信息的编码、地址簿码等),该包下的类根据类型进行不同的处理操作
- book包:若扫码结果是图书的ISBN码,可以选择联网查询该书的详细信息。该包中的类处理实现相关功能。
- wifi包:若扫描到的二维码是对wifi信息的编码,那么最终扫描结果页会展示一个“连接到网络”的按钮,点击此按钮就会自动尝试连接。该包中所包含的类则是链接网络所需的工具类
core模块是处理条码的核心算法模块,其下有aztec、qrcode、pdf417等不同码制的编码解码处理包,同时还有一些公用算法(如图像的二值处理等)放在common包中,具体结构流程会在后续代码分析中展开,这里不作赘述。
Android-core模块下只有一个类,是相机的相关配置信息
三、项目导入
ZXing项目使用Maven管理编译, 这里我使用搭建了安卓环境的Idea来导入Zxing项目。因为我负责的代码部分主要是android相关流程,与具体实现算法无关。而zxing算法库 core、android-core, 库的开发者已经放在AS对应的仓库中了,因此我选择新建一个项目,将源码中的android目录导入AS,接下来添加jar包来导入项目。
1. 新建 Android 项目
2. 导入 android 目录
下载源码并解压后,项目目录如下:
选择其中的android目录,将其中的 res 文件夹和 com 文件夹复制替换到新项目的src.main.java文件夹下,将AndroidManifest.xml文件复制到src.main文件夹下,最终目录结构如下:
3. 引入 jar 包
为了使项目正常运行,需要 core.jar 包和 android-core.jar 包,因为 android-core.jar 包中只有一个相机配置类 CameraConfigurationUtils.java,因此这里直接将该类复制到主代码的camera包中
将 core.jar 包复制到 app.libs 下,右键选择 add as Library,成功导入
四、分工
成员一:分析Andriod模块主要代码,理清Zxing的Android端调用流程,并且尝试优化相机配置代码,解决扫码区域小、图像拉伸等问题,提高二维码识别效率。
博客地址
成员二:分析core模块代码中图像解码算法(以主流码制QR Code为例),尝试对光线不足或过强情况下二维码损坏的图像进行预处理后精准解码;尝试优化二维码检测算法
博客地址
成员三:分析core模块代码中图像编码算法(以主流码制QR Code为例),尝试加强二维码保密性,并且试图生成带有logo、色彩的二维码;尝试实现数据压缩编码算法的优化,使在整体数据压缩后,码字数目得到减少,提高编码效率
博客地址