iOS的二维码扫描

本文介绍了如何在iOS应用中实现二维码扫描功能,包括使用AVFoundation框架进行实时扫描,通过调整sessionPreset和rectOfInterest优化扫描效果。同时,文章还详细讲解了如何集成ZBarSDK解析相册中的二维码图片,以及处理摄像头灯光的开关。
摘要由CSDN通过智能技术生成

项目简介

做iOS的二维码扫描,有两个第三方库可以选择,ZBar和ZXing。IOS 7.0之后,可以使用AVFoundation框架开发原生的二维码扫描功能。

这里,实现一个案例,具有以下功能:

1.使用AVFoundation扫描二维码,扫描的同时扫描线上下移动

2.使用ZBar SDK解析 相册中现有的二维码图片

3.可以切换灯光的开闭。


项目的界面。

扫描二维码功能的实现

首先,创建与扫描二维码相关的一系列AVFoundation对象

<span style="font-weight: normal;">- (void)prepareForCaptureQRCode{
    AVCaptureSession *captureSession=[[AVCaptureSession alloc] init];
    captureSession.sessionPreset=AVCaptureSessionPreset640x480;
    self.captureSession=captureSession;
    
    AVCaptureDevice *captureDevice=[AVCaptureDevice defaultDeviceWithMediaType:AVMediaTypeVideo];
    self.captureDevice=captureDevice;
    
    NSError *deviceInputError;
    AVCaptureDeviceInput *captureDeviceInput=[AVCaptureDeviceInput deviceInputWithDevice:captureDevice error:&deviceInputError ];
    
    AVCaptureMetadataOutput *captureMetadataOutput=[[AVCaptureMetadataOutput alloc] init];
    dispatch_queue_t myQueue=dispatch_queue_create("myQueue", NULL);
    [captureMetadataOutput setMetadataObjectsDelegate:self queue:myQueue];
    
    if ([captureSession canAddInput:captureDeviceInput]) {
        [captureSession addInput:captureDeviceInput];
    }
    if ([captureSession canAddOutput:captureMetadataOutput]) {
        [captureSession addOutput:captureMetadataOutput];
    }
    //注意,在设置输出数据类型之前,一定要把输出对象添加到session中
    [captureMetadataOutput setMetadataObjectTypes:@[AVMetadataObjectTypeQRCode]];
    
    AVCaptureVideoPreviewLayer *captureVideoPreviewLayer=[[AVCaptureVideoPreviewLayer alloc] initWithSession:self.captureSession];
    captureVideoPreviewLayer.frame=self.view.bounds;
    captureVideoPreviewLayer.videoGravity=AVLayerVideoGravityResizeAspectFill;
    self.captureVideoPreviewLayer=captureVideoPreviewLayer;
    [self.view.layer insertSublayer:captureVideoPreviewLayer atIndex:0];
    
    captureMetadataOutput.rectOfInterest=[self resizeRectOfInterest:CGSizeMake(480, 640)];
}</span>
有几个重要的属性需要解释一下。

1.AVCaptureSession的sessionPreset属性 指定拍摄的视频或者图片的大小。如AVCaptureSessionPreset640x480,指定视频或者图片的高为640,宽为480.

2.设置AVCaptureMetadataOutput的Metada

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值