使用zbar进行二维码或条形码(一维码)扫描

接上篇,因为使用AVFoundation一直无法扫描我们的二维码,最后决定使用条形码。我又在AVCaptureMetadataOutput的metadataObjectTypes中加入了EAN13的条形码类型(我们生成条形码使用的类型),不幸的是,还是无法识别,但是,百度其他的EAN13类型的条形码都可以识别出来,此问题仍未解决。

最后,我决定试一下ZBar,bingo!效率挺高。下面介绍一下zbar的使用过程。

首先,使用cocopods在项目中集成zbar,然后在头文件中导入ZBarSDK,因为我需要自定义扫描界面,所以使用ZBarReaderView,如下:

其中scanCrop是设置有效区域的一个属性,相当于

AVCaptureMetadataOutput中的rectOfInterest(具体信息可查看我的上一篇博客),其他属性不再赘述。

下面说一下在使用zbar过程中遇到的问题:

1.在使用AVFoundation时,配置各个类的实例变量时需要使用异步线程防止阻塞主线程加载界面。在使用zbarreaderview时,如果不用异步线程也会出现阻塞,但是,如果使用异步线程的话,会出现一个问题:进入扫码界面到出现镜头过程中需要等待一段时间,并且这段时间会随着进入这个界面的次数增加而增长,我发现问题在ZBarReaderView的实现文件ZBarReaderViewImpl的_initWithImageScanner方法中self.device =
[AVCaptureDevice defaultDeviceWithMediaType:AVMediaTypeVideo];方法,但是问题还是没能解决(我真是太菜了,还请大神能指点一二),因为等待时间实在是无法接受,我又想到了另外一种方法:把添加扫描视图的方法从viewDidLoad移到viewDidAppear中,然后在ViewWillAppear中添加一个loading视图,这样点击进入扫描视图的页面的按钮时不需要等待,进入后出现loading,直到加载完成展示扫描视图。由于业务需要,扫描完成后,进入下一个页面进行操作,之后可以选择再次进入扫描视图,所以会再次执行viewDidAppear就会多次加载扫描视图,为了解决这个问题,我是用一个全局变量来保证扫描视图只加载一次。具体代码如下:

2.使用zbar进行扫描时,首次进入页面会镜头会出现抖动,具体原因不明,未解决。

总结:至此,扫描功能也算能够使用了,但是,由于个人能力有限,业务一再退让,问题还有很多。希望看到这篇博客的朋友能够帮忙解决一下,不胜感激。路漫漫其修远兮~~~

时间: 2024-10-15 00:50:59

使用zbar进行二维码或条形码(一维码)扫描的相关文章

二维数组转化成一维指针

二维数组转化为一维指针来使用本实例用到了随机数,链表生成,遍历,有待扩展 1 #include<stdio.h> 2 #include<stdlib.h> 3 #include<time.h> 4 #include<math.h> 5 //定义个结构体Emp用来存放员工信息 6 typedef struct Emp 7 { 8 int eno; 9 char *ename; 10 int dno; 11 Emp *next; 12 13 }emp,*pemp

将二维Excel表格变成一维

作者:iamlaosong 有一个二维表格,纵向是客户名称,横向是产品名称,内容是每个客户需要的产品数量,现在需要将这个二维表变成一维表,内容为客户名称.产品名称.数量,我记得数据透视表可以完成这个功能,于是网上搜了一下,找到了想要的答案,按步骤操作没有问题,操作见百度经验:如何将二维的excel变成一维 其中用到数据透视表向导,这个功能平常看不到,通过下面链接操作即可: Excel2007,2010数据透视表和数据透视图向导在哪 我们知道,平常所用数据透视表进行数据分析,其正常的功能(向导中的

配置zbar识别二维码(转载)

原文地址:http://blog.csdn.net/dcrmg/article/details/52108258 二维码解码器Zbar+VS2012开发环境配置 Zbar条码解码器是一个开源的二维码(包括条形码)解码器,可以识别来至于视频流,图像文件.手持扫码器和视频设备(如摄像头)等二维码识别,支持EAN-13/UPC-A, UPC-E, EAN-8, Code 128, Code 39, QR Code(二维码)等常用编码方式的条形码/二维码. 下边这个简单粗暴的图标就是Zbar: Zbar

一个不同于ZBAR的二维码扫描与识别。

现在好多人使用二维码用到第三方 ZBar,往往被不支持模拟器所困扰.经过楼主的不懈努力,终于一款原生二维码扫描识别与生成工具类完成了.大家可以轻易的添加二维码的头像,改变二维码的样式(颜色修改要慎重,有时候颜色修改的不合适会导致,二维码识别失败).废话不多说直接给demo地址:https://github.com/zcs110/scanQR.git   Code4上直接搜索scanQR就可以了.

[Python]在Windows系统中使用ZXing模块实现二维码、条形码读码

??需要实现Python读取图片中二维码.条形码信息.前段时间研究使用zbarlight模块,费了很大功夫安装调试好,但是发现有些图片读取不正确,而且如果图片中二维码倾斜,就读取不了,不能满足要求.昨天琢磨着试一试ZXing,下载ZXing模块安装后,却一直报错.打开模块源码仔细分析,原来该模块是通过调用java程序,使用ZXing的java库来实现的,通过分析命令行输出得到解码结果.忙活了一天多,各种测试.查资料,终于解决了问题.调试过程非常艰辛,现将做法整理如下(Windows 10系统):

关于二维数据中的一维指针作为函数参数和返回值

问题描述: 1 假定定义了一个二维数组用来存放多条(总20条)数据,每条数据长度为10,uchar message[20][10] 2 要将外部来的一条数据存放到缓冲区指定位置(入口参数 uchar *p,数据的开始地址) 3 要从缓冲区读出一条记录,将其输出(出口参数 uchar *p,数据的开始地址). 那么该怎么写2个函数的形参/return值/返回值类型 答案: void sendbuf(uchar a[10]) { ...将a[0]~a[9]的值拷贝到指定缓冲区buf[i][0~9]

HDU 1024 Max Sum Plus Plus(二维数组转化为一维数组)

Problem Description: Now I think you have got an AC in Ignatius.L's "Max Sum" problem. To be a brave ACMer, we always challenge ourselves to more difficult problems. Now you are faced with a more difficult problem. Given a consecutive number seq

怎么把大数据的二维数组转化为一维数组????

今天做了一场比赛发现一个题卡死在数据上,原本要开一个二维数组a[2e5][2e5]但是这样肯定要re.我一直卡死在这个地方,比赛中想到了一个方法. 那就是用string数组去计数,那样就可以开一个st[2e5]的数组就可以了...然而这样伴随着一些问题.我发现直接用st[i][j]=t;这样是不对的,输出发现没有输出数据!!! 后来我发现必须先把string数组的每一个元素先赋值一个东西,因为我表示的是一个矩阵,所以我把string数组的每一个元素,也是一个string,这里定义为ss了,那么如

PHP 将二维数组转成一维数组

$authArrs = array();  //待转的数组 $authIds = array(); //声明一个空数组 array_walk_recursive($authArrs, function($value) use (&$authIds) { array_push($authIds, $value); }); 原文地址:https://www.cnblogs.com/soiq-1123/p/9450993.html