秒杀主流应用的二维码扫描

最近公司需要实现二维码扫描的功能,可能这个大家一看就觉得。论坛Demo一大把,随便copy一个就可以使用了!起初我也是这么认为,随便找了一个改改!!后来发现Bug太多,有太多不理想的东西。。索性自己来做。

首先说一下目前大家常用的方法的不足吧:

一、
使用开源Zxing扫描

1、原始代码是横屏模式,尽管可以改成竖屏,但是扫描界面的自定义和多屏幕适配不好做

2、有效扫描区域不好控制,可能是我自己技术不成熟,没找到好方法

3、Zxing是Java写的,对二维码的解析效率不是很高

二、
使用iOS开发经常使用的Zbar扫描

1、
Zbar是c实现的二维码解析,效率和Zxing不是一个层面的,但是貌似是日本人写的,中文扫描会乱码

2、
Zbar的扫描界面对相机的控制没有Zxing封装的好

基于以上一些原因,笔者决定何不将二者结合起来,用Zxing来控制摄像头,用Zbar来解析扫描到的数据,说干就干。

三、
我的开发步骤

干起来也不是那么简单,剥离Zxing的Camera控制代码,得到扫描的原始数据,Zxing的ViewFindView个人感觉不是很好,索性我就把它去掉了,直接通过xml文件进行布局,多屏幕的适配瞬间就解决了。并且对于扫描激光线的控制,横竖屏的控制都只需要稍稍变换代码即可实现。so
good!

既然拿到了扫描的数据,那怎么解析呢???Zbar的有效扫描区域的截取也是个难点。通过多天的尝试也最终解决。

可是Zbar的中文乱码应该怎么解决呢?网上找了之后发现需要修改Zbar的qrcodetxt.c将里面的编码ISO-8859-1改成GBK就可以了,可是改了源码就需要编译生成.so文件才能使用啊!我了个去。。这不是让我去使用ndk么、、、幸好找到了这位大婶的方法
(http://www.blackdogfoundry.com/blog/zbar-bar-code-qr-code-reader-android/),一步步走,果断编译出了我想要的.so文件。。。哈哈

好了一切搞定,给出效果图

1.
整个代码结构
<ignore_js_op> 

2.
修改Zbar有效扫描区域的关键代码
<ignore_js_op> 

3.
解码的关键代码
<ignore_js_op> 

4.
xml界面布局效果图
<ignore_js_op> 

5.
最终的扫描效果图
<ignore_js_op> 

四、最后我比对了一下扫描效果

1.
QQ的扫描用的也是Zxing的,解码没有我的这个快

2.
支付宝的扫描效率很迅速,但是他的灰色覆盖层是假的,,将二维码不放到取景框也可以扫描到结果

五、
扫描界面模仿的是QQ的效果,但是图片和激光线都是我自己PS的,,为了画那个激光线,我们的美工教了我一招动感模糊。。哦也,我又掌握了一个新技能。。。最后感谢所有我参考过的博文博主,由于太多不一一列出,一并感谢。。

六、
源码已托管至GitHub 以下是链接:

hudabing215,如果您要查看本帖隐藏内容请回复

七、
Zbar编译的库源码也已经push到github,有需要的可以fork修改。。。

时间: 2024-10-06 03:04:28

秒杀主流应用的二维码扫描的相关文章

有关iOS系统中调用相机设备实现二维码扫描功能的注意点(3/3)

今天我们接着聊聊iOS系统实现二维码扫描的其他注意点. 大家还记得前面我们用到的输出数据的类对象吗?AVCaptureMetadataOutput,就是它!如果我们需要实现目前主流APP扫描二维码的功能,即只有当二维码进入视图中心的方框中时才进行扫描识别功能,这样做的目的主要是为了提高用户的使用体验,需要用到这个类里面的一个属性:rectOfInterest,这个属性是一个CGRect结构体类型.但和我们平时经常使用的CGRect有点不一样.以下截取了官网文档对这个属性的表述: /*! @pro

二维码扫描

1.将ZBar的SDK导入工程 SDK下载地址:https://i.cnblogs.com/Files.aspx 或者去官网下载:https://github.com/bmorton/ZBarSDK 2.设置依赖库 需要添加AVFoundation  CoreMedia  CoreVideo QuartzCore libiconv 3.修改工程配置 1)      Framework Search Path 2)      如果使用xcode7.0以上 ,还需设置: /* 4. 版本说明  1.

iOS使用AVFoundation实现二维码扫描

实现过程如下: Step1:需要导入:AVFoundation Framework 包含头文件: #import <AVFoundation/AVFoundation.h> Step2:设置捕获会话 设置 AVCaptureSession 和 AVCaptureVideoPreviewLayer 成员 1 2 3 4 5 6 7 8 9 10 #import <AVFoundation/AVFoundation.h> static const char *kScanQRCodeQu

【转】 iOS使用AVFoundation实现二维码扫描

原文:http://strivingboy.github.io/blog/2014/11/08/scan-qrcode/ 关于二维码扫描有不少优秀第三方库如: ZBar SDK 里面有详细的文档,相应介绍也非常多,如:http://rdcworld-iphone.blogspot.in/2013/03/how-to-use-barcode-scanner-br-and-qr-in.html ZXing google推出的开源项目,相应介绍如:http://blog.devtang.com/blo

iOS开发-二维码扫描和应用跳转

iOS开发-二维码扫描和应用跳转 序言 前面我们已经调到过怎么制作二维码,在我们能够生成二维码之后,如何对二维码进行扫描呢? 在iOS7之前,大部分应用中使用的二维码扫描是第三方的扫描框架,例如ZXing或者ZBar.使用时集成麻烦,出错也不方便调试.在iOS7之后,苹果自身提供了二维码的扫描功能,从效率上来说,原生的二维码远高于这些第三方框架.本文讲解如何使用原生框架实现二维码扫描功能,并且进行扫描后的项目跳转.ps:本期的源代码会在文章结尾给出链接 扫描相关类 二维码扫描需要获取摄像头并读取

Swift:使用系统AVFoundation实现二维码扫描和生成

系统提供的AVCaptureSession仅仅适用于iOS7.0以上的系统.之前的请用Zbar来替代 下载地址:http://download.csdn.net/detail/huobanbengkui/8881097 配置project: 引入: import Foundation import AVFoundation 接受AVCaptureMetadataOutputObjectsDelegate(如: class QrcodeVC: UIViewController,AVCaptureM

iOS 系统二维码扫描(可限制扫描区域)

使用 AVFoundation系统库来进行二维码扫描并且限制扫描二维码的范围.(因为默认的是全屏扫描) -(void)beginCode { //1.摄像头设备 AVCaptureDevice *device = [AVCaptureDevice defaultDeviceWithMediaType:AVMediaTypeVideo]; /* // Media types AVMediaTypeVideo AVMediaTypeAudio AVMediaTypeText AVMediaTypeC

Ios二维码扫描(系统自带的二维码扫描)

Ios二维码扫描 这里给大家介绍的时如何使用系统自带的二维码扫描方法和一些简单的动画! 操作步骤: 1).首先你需要搭建UI界面如图:下图我用了俩个imageview和一个label 2).你需要在你当前的控制器中导入 #import <AVFoundation/AVFoundation.h> <AVCaptureMetadataOutputObjectsDelegate>代理 3).在@interface中定义 @property (nonatomic,strong)AVCapt

二维码扫描开源库ZXing定制化

(抱歉文章还在修改但是不小心发布了= =) 最近在用ZXing这个开源库做二维码的扫描模块,开发过程的一些代码修改和裁剪的经验和大家分享一下. 我的代码库: https://github.com/SickWorm/ZXingDialog 代码没有在github维护,所以没有log.但是所有修改的地方我都加上了“@ch”的注释,以方便定位 官方源码: https://github.com/zxing/zxing 实现功能: 1.功能裁剪(只保留QRCode二维码扫描功能,去掉条形码等其他码扫描功能