-
IOS7原生API进行二维码条形码的扫描
2015-11-23 14:15:14IOS7之前,开发者进行扫码编程时,一般会借助第三方库。常用的是ZBarSDK,IOS7之后,系统的AVMetadataObject类中,为我们提供了解析二维码的接口。经过测试,使用原生API扫描和处理的效率非常高,远远高于第三方库。...使用IOS7原生API进行二维码条形码的扫描
IOS7之前,开发者进行扫码编程时,一般会借助第三方库。常用的是ZBarSDK,IOS7之后,系统的AVMetadataObject类中,为我们提供了解析二维码的接口。经过测试,使用原生API扫描和处理的效率非常高,远远高于第三方库。
一、使用方法示例
官方提供的接口非常简单,代码如下:@interface ViewController ()<AVCaptureMetadataOutputObjectsDelegate>//用于处理采集信息的代理
{
AVCaptureSession * session;//输入输出的中间桥梁
}
@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
//获取摄像设备
AVCaptureDevice * device = [AVCaptureDevice defaultDeviceWithMediaType:AVMediaTypeVideo];
//创建输入流
AVCaptureDeviceInput * input = [AVCaptureDeviceInput deviceInputWithDevice:device error:nil];
//创建输出流
AVCaptureMetadataOutput * output = [[AVCaptureMetadataOutput alloc]init];
//设置代理 在主线程里刷新
[output setMetadataObjectsDelegate:self queue:dispatch_get_main_queue()];
//初始化链接对象
session = [[AVCaptureSession alloc]init];
//高质量采集率
[session setSessionPreset:AVCaptureSessionPresetHigh];
[session addInput:input];
[session addOutput:output];
//设置扫码支持的编码格式(如下设置条形码和二维码兼容)
output.metadataObjectTypes=@[AVMetadataObjectTypeQRCode,AVMetadataObjectTypeEAN13Code, AVMetadataObjectTypeEAN8Code, AVMetadataObjectTypeCode128Code];
AVCaptureVideoPreviewLayer * layer = [AVCaptureVideoPreviewLayer layerWithSession:session];
layer.videoGravity=AVLayerVideoGravityResizeAspectFill;
layer.frame=self.view.layer.bounds;
[self.view.layer insertSublayer:layer atIndex:0];
//开始捕获
[session startRunning];}
之后我们的UI上已经可以看到摄像头捕获的内容,只要实现代理中的方法,就可以完成二维码条形码的扫描:
-(void)captureOutput:(AVCaptureOutput *)captureOutput didOutputMetadataObjects:(NSArray *)metadataObjects fromConnection:(AVCaptureConnection *)connection{
if (metadataObjects.count>0) {
//[session stopRunning];
AVMetadataMachineReadableCodeObject * metadataObject = [metadataObjects objectAtIndex : 0 ];
//输出扫描字符串
NSLog(@"%@",metadataObject.stringValue);
}
}二、一些优化
通过上面的代码测试,我们可以发现系统的解析处理效率是相当的高,IOS官方提供的API也确实非常强大,然而,我们可以做进一步的优化,将效率更加提高:
首先,AVCaptureMetadataOutput类中有一个这样的属性(在IOS7.0之后可用):
@property(nonatomic) CGRect rectOfInterest;
这个属性大致意思就是告诉系统它需要注意的区域,大部分APP的扫码UI中都会有一个框,提醒你将条形码放入那个区域,这个属性的作用就在这里,它可以设置一个范围,只处理在这个范围内捕获到的图像的信息。如此一来,可想而知,我们代码的效率又会得到很大的提高,在使用这个属性的时候。需要几点注意:
1、这个CGRect参数和普通的Rect范围不太一样,它的四个值的范围都是0-1,表示比例。
2、经过测试发现,这个参数里面的x对应的恰恰是距离左上角的垂直距离,y对应的是距离左上角的水平距离。
3、宽度和高度设置的情况也是类似。
3、举个例子如果我们想让扫描的处理区域是屏幕的下半部分,我们这样设置
output.rectOfInterest=CGRectMake(0.5,0,0.5, 1);
具体apple为什么要设计成这样,或者是这个参数我的用法那里不对,还需要了解的朋友给个指导。 -
使用IOS7原生API进行二维码条形码的扫描
2015-09-17 23:37:21IOS7之前,开发者进行扫码编程时,一般会借助第三方库。常用的是ZBarSDK,IOS7之后,系统的AVMetadataObject类中,为我们提供了解析二维码的接口。经过测试,使用原生API扫描和处理的效率非常高,远远高于第三方库。...使用IOS7原生API进行二维码条形码的扫描
IOS7之前,开发者进行扫码编程时,一般会借助第三方库。常用的是ZBarSDK,IOS7之后,系统的AVMetadataObject类中,为我们提供了解析二维码的接口。经过测试,使用原生API扫描和处理的效率非常高,远远高于第三方库。
一、使用方法示例
官方提供的接口非常简单,代码如下:
123456789101112131415161718192021222324252627282930313233343536@interface ViewController ()<AVCaptureMetadataOutputObjectsDelegate>
//用于处理采集信息的代理
{
AVCaptureSession * session;
//输入输出的中间桥梁
}
@end
@implementation ViewController
- (
void
)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
//获取摄像设备
AVCaptureDevice * device = [AVCaptureDevice defaultDeviceWithMediaType:AVMediaTypeVideo];
//创建输入流
AVCaptureDeviceInput * input = [AVCaptureDeviceInput deviceInputWithDevice:device error:nil];
//创建输出流
AVCaptureMetadataOutput * output = [[AVCaptureMetadataOutput alloc]init];
//设置代理 在主线程里刷新
[output setMetadataObjectsDelegate:self queue:dispatch_get_main_queue()];
//初始化链接对象
session = [[AVCaptureSession alloc]init];
//高质量采集率
[session setSessionPreset:AVCaptureSessionPresetHigh];
[session addInput:input];
[session addOutput:output];
//设置扫码支持的编码格式(如下设置条形码和二维码兼容)
output.metadataObjectTypes=@[AVMetadataObjectTypeQRCode,AVMetadataObjectTypeEAN13Code, AVMetadataObjectTypeEAN8Code, AVMetadataObjectTypeCode128Code];
AVCaptureVideoPreviewLayer * layer = [AVCaptureVideoPreviewLayer layerWithSession:session];
layer.videoGravity=AVLayerVideoGravityResizeAspectFill;
layer.frame=self.view.layer.bounds;
[self.view.layer insertSublayer:layer atIndex:0];
//开始捕获
[session startRunning];
}
之后我们的UI上已经可以看到摄像头捕获的内容,只要实现代理中的方法,就可以完成二维码条形码的扫描:
12345678-(
void
)captureOutput:(AVCaptureOutput *)captureOutput didOutputMetadataObjects:(NSArray *)metadataObjects fromConnection:(AVCaptureConnection *)connection{
if
(metadataObjects.count>0) {
//[session stopRunning];
AVMetadataMachineReadableCodeObject * metadataObject = [metadataObjects objectAtIndex : 0 ];
//输出扫描字符串
NSLog(@
"%@"
,metadataObject.stringValue);
}
}
二、一些优化
通过上面的代码测试,我们可以发现系统的解析处理效率是相当的高,IOS官方提供的API也确实非常强大,然而,我们可以做进一步的优化,将效率更加提高:
首先,AVCaptureMetadataOutput类中有一个这样的属性(在IOS7.0之后可用):
@property(nonatomic) CGRect rectOfInterest;
这个属性大致意思就是告诉系统它需要注意的区域,大部分APP的扫码UI中都会有一个框,提醒你将条形码放入那个区域,这个属性的作用就在这里,它可以设置一个范围,只处理在这个范围内捕获到的图像的信息。如此一来,可想而知,我们代码的效率又会得到很大的提高,在使用这个属性的时候。需要几点注意:
1、这个CGRect参数和普通的Rect范围不太一样,它的四个值的范围都是0-1,表示比例。
2、经过测试发现,这个参数里面的x对应的恰恰是距离左上角的垂直距离,y对应的是距离左上角的水平距离。
3、宽度和高度设置的情况也是类似。
3、举个例子如果我们想让扫描的处理区域是屏幕的下半部分,我们这样设置
1output.rectOfInterest=CGRectMake(0.5,0,0.5, 1);
具体apple为什么要设计成这样,或者是这个参数我的用法那里不对,还需要了解的朋友给个指导。
-
使用 IOS7 原生API进行二维码条形码的扫描
2016-07-28 23:51:34IOS7之前,开发者进行扫码编程时,一般会借助第三方库。常用的是ZBarSDK,IOS7之后,系统的AVMetadataObject类中,为我们提供了解析二维码的接口。经过测试,使用原生API扫描和处理的效率非常高,远远高于第三方库。...IOS7之前,开发者进行扫码编程时,一般会借助第三方库。常用的是ZBarSDK,IOS7之后,系统的AVMetadataObject类中,为我们提供了解析二维码的接口。经过测试,使用原生API扫描和处理的效率非常高,远远高于第三方库。
一、使用方法示例
官方提供的接口非常简单,代码如下:
@interface ViewController ()<AVCaptureMetadataOutputObjectsDelegate>//用于处理采集信息的代理 { AVCaptureSession * session;//输入输出的中间桥梁 } @end @implementation ViewController - (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view, typically from a nib. //获取摄像设备 AVCaptureDevice * device = [AVCaptureDevice defaultDeviceWithMediaType:AVMediaTypeVideo]; //创建输入流 AVCaptureDeviceInput * input = [AVCaptureDeviceInput deviceInputWithDevice:device error:nil]; //创建输出流 AVCaptureMetadataOutput * output = [[AVCaptureMetadataOutput alloc]init]; //设置代理 在主线程里刷新 [output setMetadataObjectsDelegate:self queue:dispatch_get_main_queue()]; //初始化链接对象 session = [[AVCaptureSession alloc]init]; //高质量采集率 [session setSessionPreset:AVCaptureSessionPresetHigh]; [session addInput:input]; [session addOutput:output]; //设置扫码支持的编码格式(如下设置条形码和二维码兼容) output.metadataObjectTypes=@[AVMetadataObjectTypeQRCode,AVMetadataObjectTypeEAN13Code, AVMetadataObjectTypeEAN8Code, AVMetadataObjectTypeCode128Code]; AVCaptureVideoPreviewLayer * layer = [AVCaptureVideoPreviewLayer layerWithSession:session]; layer.videoGravity=AVLayerVideoGravityResizeAspectFill; layer.frame=self.view.layer.bounds; [self.view.layer insertSublayer:layer atIndex:0]; //开始捕获 [session startRunning]; }
之后我们的UI上已经可以看到摄像头捕获的内容,只要实现代理中的方法,就可以完成二维码条形码的扫描:
-(void)captureOutput:(AVCaptureOutput *)captureOutput didOutputMetadataObjects:(NSArray *)metadataObjects fromConnection:(AVCaptureConnection *)connection{ if (metadataObjects.count>0) { //[session stopRunning]; AVMetadataMachineReadableCodeObject * metadataObject = [metadataObjects objectAtIndex : 0 ]; //输出扫描字符串 NSLog(@"%@",metadataObject.stringValue); } }
二、一些优化
通过上面的代码测试,我们可以发现系统的解析处理效率是相当的高,IOS官方提供的API也确实非常强大,然而,我们可以做进一步的优化,将效率更加提高:
首先,AVCaptureMetadataOutput类中有一个这样的属性(在IOS7.0之后可用):
@property(nonatomic) CGRect rectOfInterest;
这个属性大致意思就是告诉系统它需要注意的区域,大部分APP的扫码UI中都会有一个框,提醒你将条形码放入那个区域,这个属性的作用就在这里,它可以设置一个范围,只处理在这个范围内捕获到的图像的信息。如此一来,可想而知,我们代码的效率又会得到很大的提高,在使用这个属性的时候。需要几点注意:
1、这个CGRect参数和普通的Rect范围不太一样,它的四个值的范围都是0-1,表示比例。
2、经过测试发现,这个参数里面的x对应的恰恰是距离左上角的垂直距离,y对应的是距离左上角的水平距离。
3、宽度和高度设置的情况也是类似。
3、举个例子如果我们想让扫描的处理区域是屏幕的下半部分,我们这样设置
output.rectOfInterest=CGRectMake(0.5,0,0.5, 1);
-
IOS7使用原生API进行二维码和条形码的扫描
2015-09-22 15:22:00IOS7之前,开发者进行扫码编程时,一般会借助第三方库。常用的是ZBarSDK,IOS7之后,系统的AVMetadataObject类中,为我们提供了解析二维码的接口。经过测试,使用原生API扫描和处理的效率非常高,远远高于第三方库。...使用IOS7原生API进行二维码条形码的扫描
IOS7之前,开发者进行扫码编程时,一般会借助第三方库。常用的是ZBarSDK,IOS7之后,系统的AVMetadataObject类中,为我们提供了解析二维码的接口。经过测试,使用原生API扫描和处理的效率非常高,远远高于第三方库。
一、使用方法示例
官方提供的接口非常简单,代码如下:
123456789101112131415161718192021222324252627282930313233343536@interface ViewController ()<AVCaptureMetadataOutputObjectsDelegate>
//用于处理采集信息的代理
{
AVCaptureSession * session;
//输入输出的中间桥梁
}
@end
@implementation ViewController
- (
void
)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
//获取摄像设备
AVCaptureDevice * device = [AVCaptureDevice defaultDeviceWithMediaType:AVMediaTypeVideo];
//创建输入流
AVCaptureDeviceInput * input = [AVCaptureDeviceInput deviceInputWithDevice:device error:nil];
//创建输出流
AVCaptureMetadataOutput * output = [[AVCaptureMetadataOutput alloc]init];
//设置代理 在主线程里刷新
[output setMetadataObjectsDelegate:self queue:dispatch_get_main_queue()];
//初始化链接对象
session = [[AVCaptureSession alloc]init];
//高质量采集率
[session setSessionPreset:AVCaptureSessionPresetHigh];
[session addInput:input];
[session addOutput:output];
//设置扫码支持的编码格式(如下设置条形码和二维码兼容)
output.metadataObjectTypes=@[AVMetadataObjectTypeQRCode,AVMetadataObjectTypeEAN13Code, AVMetadataObjectTypeEAN8Code, AVMetadataObjectTypeCode128Code];
AVCaptureVideoPreviewLayer * layer = [AVCaptureVideoPreviewLayer layerWithSession:session];
layer.videoGravity=AVLayerVideoGravityResizeAspectFill;
layer.frame=self.view.layer.bounds;
[self.view.layer insertSublayer:layer atIndex:0];
//开始捕获
[session startRunning];
}
之后我们的UI上已经可以看到摄像头捕获的内容,只要实现代理中的方法,就可以完成二维码条形码的扫描:
12345678-(
void
)captureOutput:(AVCaptureOutput *)captureOutput didOutputMetadataObjects:(NSArray *)metadataObjects fromConnection:(AVCaptureConnection *)connection{
if
(metadataObjects.count>0) {
//[session stopRunning];
AVMetadataMachineReadableCodeObject * metadataObject = [metadataObjects objectAtIndex : 0 ];
//输出扫描字符串
NSLog(@
"%@"
,metadataObject.stringValue);
}
}
二、一些优化
通过上面的代码测试,我们可以发现系统的解析处理效率是相当的高,IOS官方提供的API也确实非常强大,然而,我们可以做进一步的优化,将效率更加提高:
首先,AVCaptureMetadataOutput类中有一个这样的属性(在IOS7.0之后可用):
@property(nonatomic) CGRect rectOfInterest;
这个属性大致意思就是告诉系统它需要注意的区域,大部分APP的扫码UI中都会有一个框,提醒你将条形码放入那个区域,这个属性的作用就在这里,它可以设置一个范围,只处理在这个范围内捕获到的图像的信息。如此一来,可想而知,我们代码的效率又会得到很大的提高,在使用这个属性的时候。需要几点注意:
1、这个CGRect参数和普通的Rect范围不太一样,它的四个值的范围都是0-1,表示比例。
2、经过测试发现,这个参数里面的x对应的恰恰是距离左上角的垂直距离,y对应的是距离左上角的水平距离。
3、宽度和高度设置的情况也是类似。
3、举个例子如果我们想让扫描的处理区域是屏幕的下半部分,我们这样设置
1output.rectOfInterest=CGRectMake(0.5,0,0.5, 1);
具体apple为什么要设计成这样,或者是这个参数我的用法那里不对,还需要了解的朋友给个指导。
疏漏之处 欢迎指正
学习使用 欢迎转载
-
python编程软件例子-Python实现扫码工具的示例代码
2020-11-01 12:49:05二维码作为一种信息传递的工具,在当今社会发挥了重要作用。...在扫码过程中我们需要打开摄像头,如何由手机或者电脑识别二维码。所以我们要实现两个关键的步骤:调用摄像头、识别二维码。这两个操作分别对应了两个... -
使用c#捕获usb扫描枪扫描二维码、条形码结果(支持中文版)
2019-09-19 01:56:09之前在18年写过一个使用c#...但一年多以来,不少人询问,或者在博客下留言,提出了中文扫码支持的需要,于是老顾就从新把程序从故纸堆里翻了出来,毕竟很久没弄这个了,还得自己重新读一遍代码,真晕。。。。。 好... -
iOS中 扫描二维码/生成二维码详解 韩俊强的博客
2015-12-31 16:36:34IOS7之前,开发者进行扫码编程时,一般会借助第三方库。常用的是ZBarSDK,IOS7之后,系统的AVMetadataObject类中,为我们提供了解析二维码的接口。经过测试,使用原生API扫描和处理的效率非常高,远远高于第三方库。 -
golang websocket 模拟pc扫码登录
2017-05-20 08:14:23之前写了一篇 微信第三方扫码登录抓包小记 ,正好最近看golang,于是面向google编程写了个服务端的程序。第一次写golang程序,用来学习的。 模拟PC浏览器二维码扫描登录的过程,手机APP端用 微信 模拟,简单起见,... -
微信中如何生成带参数的二维码
2019-10-22 11:39:29生成带参数的二维码通过公众号平台提供的接口开发,会编程的朋友直接编写程序代码,也可以直接使用微号帮平台生成渠道二维码,二维码带标签分组或修改粉丝备注,关注统计粉丝来源。...3、二维码扫码自定义消... -
iOS_二维码
2016-10-08 15:22:36iOS开发-QRCode-二维码识别与生成 ...有关二维码的介绍,我这里不做过多说明, 可以直接...IOS7之前,开发者进行扫码编程时,一般会借助第三方库。常用的是ZBarSDKa和ZXingObjC,IOS7之后,系统的AVMetadataObjec -
IOS原生API扫描二维码
2015-04-26 10:38:07IOS7之前,开发者进行扫码编程时,一般会借助第三方库。常用的是ZBarSDK,IOS7之后,系统的AVMetadataObject类中,为我们提供了解析二维码的接口。经过测试,使用原生API扫描和处理的效率非常高,远远高于第三方库。 -
this.$router.push 带参数_自带参数微信二维码如何统计公众号后台粉丝数据?
2020-10-30 00:12:12微号帮平台提供了渠道二维码生成功能实现,公众号平台提供了接口编程实现功能,均可以实现微信公众号自带参数二维码,不限于粉丝新关注和已关注,只要通过参数二维码扫码关注公众号都能统计。现微号帮平台所有功能新... -
Zxing选择本地图片扫码失败的bug过程
2019-04-26 11:46:29Zxing选择本地图片扫码失败的bug**过程 0.0 当然,用的轮子的轮子:QrCodeDemo4 再一次 向 Ctrl C ,Ctrl V 致敬。 bug如下。 当然,并不是所有的二维码都是识别失败。观察了一下,像素较低的,如500以内像素... -
AVMetadataObject类解析二维码
2017-09-06 10:20:52...有关二维码的介绍,我这里不做过多说明, 可以直接去基维百科查看,附上链接QR ...IOS7之前,开发者进行扫码编程时,一般会借助第三方库。常用的是ZBarSDKa和ZXingObjC,IOS7之后,系统的AVMetadataObject类中 -
iOS开发探索-二维码
2016-09-14 16:54:01iOS7之前,开发者进行扫码编程时,一般会借助第三方库。扫描二维码 OC 的开源库有 ZBar和ZXing,iOS7之后,系统的AVMetadataObject类中,为我们提供了解析二维码的接口。经过测试,使用原生API扫描和处理的效率非常... -
Swift3.1二维码的生成与扫描
2017-07-17 17:38:42如:扫码登录、加好友及扫码支付等。 二维码本质上是一串二进制数据,我们可以在二维码中放入任何信息。如:分享的WiFi密码、QQ(微信)号、设备码及网址(PS:支付宝扫描二维码的原理就是将订单信息编程一个网址... -
Vue项目实战+PHP接口开发(微信扫码关注实现自动登陆)
2020-03-09 15:24:14本项目以微信扫码关注公众号实现 网站自动登陆这一功能为载体,将会讲解如下主要核心知识点: 前端你将学习到: 一、vue-cli4进行前端项目的创建 二、如何... -
qrCode二维码的生成和识别
2016-03-31 15:31:34IOS7之前,开发者进行扫码编程时,一般会借助第三方库。常用的是 ZBarSDKa 和 ZXingObjC ,IOS7之后,系统的AVMetadataObject类中,为我们提供了解析二维码的接口。经过测试,使用原生API扫描和处理的效率非常高... -
二维码之 zbar的使用
2018-04-13 10:38:58最常用的是zxing和zbar,zxing项目是谷歌推出的用来识别多种格式条形码的开源项目,zxing有多个人在维护,覆盖主流编程语言,也是目前还在维护的较受欢迎的二维码扫描开源项目之一。zbar则是主要用C来写的,速度极快...
-
Kubernetes概述.pdf
-
玩转树莓派(四)子域名访问树莓派上的web服务
-
boost::lexical_cast
-
实现 MySQL 读写分离的利器 mysql-proxy
-
HC32L130开发寄存器版视频连载2
-
DHCP 动态主机配置服务(在Linux环境下,配置单网段或跨网段提)
-
MySQL 高可用(DRBD + heartbeat)
-
C++类型转换:dynamic_cast (二)
-
02-28 python正则提取(98.46㎡)-数字
-
基于Flink+Hudi构建企业亿级云上实时数据湖教程(PC、移动、小
-
DES的ECB加密解密汇总.zip
-
SAPCAR.zip
-
马士兵老师HashMap学习笔记
-
2016 年中级通信工程师考试综合能力真题.pdf
-
BGLightChangeDLL.zip
-
刷新-读书笔记2(4-7章)
-
Galera 高可用 MySQL 集群(PXC v5.6 + Ngin
-
三、选择结构与分支结构
-
Androidesk-release-androidesk.zip
-
NFS 网络文件系统