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. ruby 中文支持设置

    学习Ruby的过程中,对于于涉及中文的的代码的时候,需要添加如下代码在首行 # encoding: utf-8 或者EMAC写法 # -*- coding : utf-8 -*- 因为Ruby编译器会 ...

  2. (三大框架SSH)面试题锦集

    http://www.cnblogs.com/dieyf/p/4109233.html

  3. VLD(Visual LeakDetector)内存泄露库的使用

    VLD简介 由于C/C++语言没有所谓的垃圾收集器,内存的分配和释放都需要程序员自己来控制,这会给C/C++程序员带来一定的困难.当您的程序越来越复杂时,它的内存管理也会变得越来越困难.内存泄漏.内存 ...

  4. synchronize的心得

    记录一下synchronize(this).synchronize(A.class).private B  b= new B(); synchronize(b) .synchronize static ...

  5. UI设计师的 Android 备忘录

    Images and themes Nine-patch Colors Holo themes Naming conventions Naming conventions for drawables ...

  6. xcode5 ios7升级后的一系列问题解决

    framework not found IOKit解决办法,打开终端:cd /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS. ...

  7. 14.6.3.3 Making the Buffer Pool Scan Resistant

    14.6.3.3 Making the Buffer Pool Scan Resistant 相比使用一个严格的LRU算法,InnoDB 使用一个技术来最小化数据总量 带入到buffer pool 而 ...

  8. web版本控制

    说说你在web开发中是怎么进行版本管理的 在web开发中,我首先将系统框架搭建完成后,我会发布到服务器上,然后给小组成员进行分工,为他们划分各自的模块,他们每天早上上班时就从服务器上先将自己机器上面的 ...

  9. java static 执行顺序

    先加载类,然后再实例化类. 继承与static 面试题目如下:请写出程序执行完成之后的结果. package extend; public class X { Y y=new Y(); static{ ...

  10. [FJSC2014]异或之

    [题目描述] 给定n个非负整数A[1], A[2], ……, A[n]. 对于每对(i, j)满足1 <= i < j <= n,得到一个新的数A[i] xor A[j],这样共有n ...