iOS–iOS7摄像头识别二维码功能

属性介绍:

AVFoundation 框架基于以下几个类实现图像捕捉 ,通过这些类可以访问来自相机设备的原始数据并控制它的组件。

  • AVCaptureDevice 是关于相机硬件的接口。它被用于控制硬件特性,诸如镜头的位置、曝光、闪光灯等。
  • AVCaptureDeviceInput 提供来自设备的数据。
  • AVCaptureOutput 是一个抽象类,描述 capture session 的结果。以下是三种关于静态图片捕捉的具体子类:
    • AVCaptureStillImageOutput 用于捕捉静态图片
    • AVCaptureMetadataOutput 启用检测人脸和二维码
    • AVCaptureVideoOutput 为实时预览图提供原始帧
  • AVCaptureSession 管理输入与输出之间的数据流,以及在出现问题时生成运行时错误。
  • AVCaptureVideoPreviewLayer 是 CALayer 的子类,可被用于自动显示相机产生的实时图像。它还有几个工具性质的方法,可将 layer 上的坐标转化到设备上。它看起来像输出,但其实不是。另外,它拥有 session (outputs 被 session 所拥有)。

设置属性:

@property (nonatomic, strong) AVCaptureSession *session;
@property (nonatomic, strong) AVCaptureDevice *device;
@property (nonatomic, strong) AVCaptureDeviceInput *input;
@property (nonatomic, strong) AVCaptureMetadataOutput *outPut;
@property (nonatomic, strong) AVCaptureVideoPreviewLayer *previewLayer;

添加摄像头方法

/**
* 设置摄像头代码
*/
- (void)setupCamera{
//设备
_device = [AVCaptureDevice defaultDeviceWithMediaType:AVMediaTypeVideo]; //输入绑定设备
NSError *error;
_input = [AVCaptureDeviceInput deviceInputWithDevice:_device error:&error];
if (error) {
return;
} //输出
_outPut = [[AVCaptureMetadataOutput alloc]init];
[_outPut setMetadataObjectsDelegate:self queue:dispatch_get_main_queue()]; //session
_session = [[AVCaptureSession alloc]init];
[_session setSessionPreset:AVCaptureSessionPresetHigh]; //设置画面采集的质量
if ([_session canAddInput:_input]) {
[_session addInput:_input];
}
if ([_session canAddOutput:_outPut]) {
[_session addOutput:_outPut];
} //一定要先设置session的输出为output之后,再指定输出的元数据类型为二维码类型!
[_outPut setMetadataObjectTypes:@[AVMetadataObjectTypeQRCode]]; //预览图层
_previewLayer = [[AVCaptureVideoPreviewLayer alloc]initWithSession:_session];
// _previewLayer.videoGravity = AVLayerVideoGravityResizeAspect; //preview图层的属性,使视图形状为屏幕大小形状
_previewLayer.frame = self.view.frame;//preview图层的大小
[self.view.layer insertSublayer:_previewLayer atIndex:0]; //将图层添加到视图的图层 //开始运行
[_session startRunning];
}

注意output中设置了一个delegate,我们需要怎么这个协议,然后在下面的代码中设置

[_outPut setMetadataObjectsDelegate:self queue:dispatch_get_main_queue()]

协议的实现部分如下:

#pragma mark - AVCaptureMetadataOutputObjectsDelegate
// 在完成二维码解码时,调用
// 如果QRCode的内容越大,转换需要的时间就越长
- (void)captureOutput:(AVCaptureOutput *)captureOutput didOutputMetadataObjects:(NSArray *)metadataObjects fromConnection:(AVCaptureConnection *)connection{ NSString *stringValue;
if ([metadataObjects count] >0)
{
AVMetadataMachineReadableCodeObject * metadataObject = [metadataObjects objectAtIndex:0];
stringValue = metadataObject.stringValue;
} NSLog(@"%@",stringValue);
//获取扫描数据,结束编辑
[_session stopRunning];
[self dismissViewControllerAnimated:YES completion:nil];
}

二维码生成网站,测试时可使用

http://cli.im/text?text053e86238125abe22dd1474278f5855d

iOS--iOS7摄像头识别二维码功能的更多相关文章

  1. iOS开发——高级技术&二维码功能的实现

    二维码功能的实现 ZBarSDK,一个比较优秀的开源项目,使用起来也很简单. ZBarSDK是一个开源的SDK,可从这里下载到源码,该SDK实现了识别和读取各种条形码,包括EAN-13/UPC-A, ...

  2. PHP识别二维码功能,php-zbarcode 安装

    php-zbarcode是PHP识别二维码的扩展. 下面是安装方法,安装前要先安装ImageMagick.zbar. php-zbarcode 下载地址 安装ImageMagick: yum inst ...

  3. Jquery生成二维码(微信中长按图片识别二维码功能)

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...

  4. c# winform调用摄像头识别二维码

    首先我们需要引用两个第三方组件:AForge和zxing. Aforge是摄像头操作组件,zxing是二维码识别组件.都是开源项目.避免重复造轮子. 其实一些操作代码我也是参照别人的,若侵犯您的版权, ...

  5. iOS开发——高级篇——二维码的生产和读取

    一.二维码的生成 从iOS7开始集成了二维码的生成和读取功能此前被广泛使用的zbarsdk目前不支持64位处理器 生成二维码的步骤:导入CoreImage框架通过滤镜CIFilter生成二维码 二维码 ...

  6. winform 扫码识别二维码

    因为公司业务需求,需要在Windows系统下调用摄像头识别二维码需求,就有了这个功能. 我根据网上网友提供的一些资料,自己整合应用到项目中,效果还不错(就是感觉像素不是太好) 现在将调用摄像头+识别二 ...

  7. Canvas与Image互相转换示例以及利用该技术实现微信长按自动识别二维码功能

    现在扫描二维码已经很普遍,微信扫一扫即可,但是如果二维码是在自己的手机上呢?那就要用到微信里的一个功能了,手指长按二维码,会弹出自动识别的选项,点确定就可以看到二维码的内容了.那么怎么通过前端实现这个 ...

  8. js 识别二维码

    本文引用analyticCode.js.llqrcode.js实现识别二维码功能 html代码: <div class="box" id="analytic&quo ...

  9. ios7下二维码功能的实现

    苹果公司升级到IOS7后自己的PassBook自带二维码扫描功能,所以现在使用二维码功能不需要在借助第三方库了 使用前请先导入AVFoundation.frameWork // //  YHQView ...

随机推荐

  1. baba 运动网

    import com.sun.image.codec.jpeg.* 找不到包     在Myeclipse中编译项目时,如果提示类似 com.sun.image.codec.jpeg.* 下: imp ...

  2. Warning File `.depend' has modification time 1.6 s in the future

    一.前提知识 主机时间与虚拟机时间不同步所致.我们在某一操作系统所属磁盘空间下创建一个文件,那么这个文件的创建时间是以磁盘所属的操作系统的时钟为基准的. 我们假设主机windows的系统时间是10:0 ...

  3. net Core 通过 Ef Core 访问、管理Mysql

    net Core 通过 Ef Core 访问.管理Mysql 本文地址:http://www.cnblogs.com/likeli/p/5910524.html 环境 dotnet Core版本:1. ...

  4. iOS 实现脉冲雷达以及动态增减元素 By Swift-感谢分享

    Swift经过Xcode6 Beta4一版更新后,基本上已经可以作为生产工具了,虽然有一些地方和ObjC比起来要“落后”一些,但也无伤大雅.这里就用Xcode6 Beta4+iOS SDK 8.0开发 ...

  5. RestKit:iOS开发必备,告别众多无聊代码

    http://www.csdn.net/article/2014-04-15/2819312-RestKit-frameworkRestKit是一款专为iOS设计的Objective-C框架,旨在与R ...

  6. BZOJ 4013 实验比较

    Description 小D被邀请到实验室,做一个跟图片质量评价相关的主观实验.实验用到的图片集一共有\(N\)张图片,编号为\(1\)到\(N\).实验分若干轮进行,在每轮实验中,小\(D\)会被要 ...

  7. Netflix工程总监眼中的分类算法:深度学习优先级最低

    Netflix工程总监眼中的分类算法:深度学习优先级最低 摘要:不同分类算法的优势是什么?Netflix公司工程总监Xavier Amatriain根据奥卡姆剃刀原理依次推荐了逻辑回归.SVM.决策树 ...

  8. 【POJ2699】The Maximum Number of Strong Kings(网络流)

    Description A tournament can be represented by a complete graph in which each vertex denotes a playe ...

  9. Java OAuth开发包资料

    原文地址:http://www.oschina.net/project/tag/307/oauth?lang=19&sort=time

  10. KeilC51高级编程

    第一节 绝对地址访问 C51提供了三种访问绝对地址的方法: 1. 绝对宏: 在程序中,用“#include<absacc.h>”即可使用其中定义的宏来访问绝对地址,包括: CBYTE.XB ...