iOS 系统二维码扫描(可限制扫描区域)

使用 AVFoundation系统库来进行二维码扫描并且限制扫描二维码的范围。(因为默认的是全屏扫描)

-(void)beginCode

{

//1.摄像头设备

AVCaptureDevice *device = [AVCaptureDevice defaultDeviceWithMediaType:AVMediaTypeVideo];

/*

// Media types

AVMediaTypeVideo

AVMediaTypeAudio

AVMediaTypeText

AVMediaTypeClosedCaption

AVMediaTypeSubtitle

AVMediaTypeTimecode

AVMediaTypeMetadata

AVMediaTypeMuxed

*/

//2.设置输入

/**

*  设置输入  此方法需要判断 因为模拟器没有摄像头

*

*  @param  把摄像头作为输入的设备

*

*  @return 返回AVCaptureInput

*/

NSError *error = nil;

AVCaptureInput *input = [AVCaptureDeviceInput deviceInputWithDevice:device error:&error];

if (error) {

NSLog(@"没有摄像头%@",error);

return;

}

//3.设置输出(Metdata元数据)

AVCaptureMetadataOutput *output = [[AVCaptureMetadataOutput alloc] init];

//3.1输出的代理 捕获二维码的图像

//dispatch_get_main_queue()使用主线程队列,响应比较同步,使用其他队列响应不同步。

[output setMetadataObjectsDelegate:self queue:dispatch_get_main_queue()];

//3.2 设置扫描区域  默认是全屏扫描

//这个CGRectMake(Y,X,H,W) 1代表最大值    原点是导航右下角 为起始点

//    [output setRectOfInterest:CGRectMake(0, 0.5, 0.5, 0.5)];//左上角 1/4 屏幕

//    [output setRectOfInterest:CGRectMake(0.5, 0.5, 0.5, 0.5)];//左下角 1/4 屏幕

//    [output setRectOfInterest:CGRectMake(0.5, 0, 0.5, 0.5)]; //右下角 1/4 屏幕

//    [output setRectOfInterest:CGRectMake(0, 0, 0.5, 0.5)]; //右上角 1/4 屏幕

//     [output setRectOfInterest:CGRectMake((124)/ScreenHigh,          ((ScreenWidth220)/2)/ScreenWidth,220/ScreenHigh,220/ScreenWidth)]; //设置自定义像素点的 位置

[output setRectOfInterest:CGRectMake(0.25,0.25, 0.5, 0.5)]; //貌似 中间的感觉!!!

//4.拍摄会话

AVCaptureSession *session = [[AVCaptureSession alloc] init];

_session = session;

//添加session的输入和输出

[session addInput:input];

[session addOutput:output];

//4.1设置输出的格式

[output setMetadataObjectTypes:@[AVMetadataObjectTypeQRCode]];

//5.设置预览图层 (让用户看到扫描结果)

AVCaptureVideoPreviewLayer *preview = [AVCaptureVideoPreviewLayer layerWithSession:session];

_previewLayer = preview;

//5.1设置preview的属性

preview.videoGravity = AVLayerVideoGravityResizeAspectFill;

//5.2设置preview的图层的大小

[preview setFrame:self.view.bounds];

//5.3将图层添加到视图的图层

[self.view.layer insertSublayer:preview atIndex:0];

//6.启动会话

[session startRunning];

}

#pragma mark 输出的代理方法

//此方法是在识别到QRCode,并且完成转换

//如果QRCode的内容越大,转换需要的时间就越长

-(void)captureOutput:(AVCaptureOutput *)captureOutput didOutputMetadataObjects:(NSArray *)metadataObjects fromConnection:(AVCaptureConnection *)connection

{

//会频繁的扫描

//如果扫描完成就停止

[_session stopRunning];

//删除预览的图层

[_previewLayer removeFromSuperlayer];

//设置界面显示扫描结果

NSString *reslutStr = [[NSString alloc] init];

if (metadataObjects.count > 0) {

AVMetadataMachineReadableCodeObject *obj = metadataObjects[0];

reslutStr = [obj stringValue];//这个就是 扫描的结果

//如果需要对URL 名片 等信息进行扫描 再次进行扩展

}

NSLog(@"%@",metadataObjects);

}

时间: 2024-08-05 11:09:50

iOS 系统二维码扫描(可限制扫描区域)的相关文章

iOS之二维码的制作与扫描

IOS之二维码的制作与扫描     二维码SDK的Dome“QRCode”中制作libqrencode库文件,扫描ZBarSDK库文件1.制作二维码  /*字符转二维码导入 libqrencode文件添加  #import "QRCodeGenerator.h"@property (strong , nonatomic) UIImageView* qRImageView;- (void)viewDidLoad{    [super viewDidLoad];    self.qRIma

iOS开发-二维码扫描和应用跳转

iOS开发-二维码扫描和应用跳转 序言 前面我们已经调到过怎么制作二维码,在我们能够生成二维码之后,如何对二维码进行扫描呢? 在iOS7之前,大部分应用中使用的二维码扫描是第三方的扫描框架,例如ZXing或者ZBar.使用时集成麻烦,出错也不方便调试.在iOS7之后,苹果自身提供了二维码的扫描功能,从效率上来说,原生的二维码远高于这些第三方框架.本文讲解如何使用原生框架实现二维码扫描功能,并且进行扫描后的项目跳转.ps:本期的源代码会在文章结尾给出链接 扫描相关类 二维码扫描需要获取摄像头并读取

iOS二维码的生成与扫描

由于近期工作中遇到了个需求:需要将一些固定的字段 在多个移动端进行相互传输,所以就想到了 二维码 这个神奇的东东! 现在的大街上.连个摊煎饼的大妈 都有自己的二维码来让大家进行扫码支付.可见现在的二维码使用率多高, 不光如此,在很多的社交类的APP 基本都有扫一扫加好友这个功能吧,因此决定学一学这个神奇的东西. 查找了一些资料博客啊发现,iOS7之前 对于开发人员来说 熟悉的第三方QRCode库有: ZXingGoogle出品并开源 一直到现在都还有专人维护 是世界上使用最广的二维码库 iOS上

二维码扫描(iOS原生二维码扫描)

一.关于二维码扫描的第三方库有很多:例如比较常用的两个 1.ZBar SDK ZBar为我们提供了两种使用方式,一种是直接调用ZBar提供的ZBarReaderViewController打开一个扫描界面,另一种方式是使用ZBar提供的可以嵌在其他视图中的ZBarReaderView,实际项目中我们更可能会使用第二种方式,这可以让我们对界面做更多的定制,详细的百度查找相关文档来看. 2.ZXing(Github镜像地址)是一个开源的条码生成和扫描库(开源协议为Apache2.0).它不但支持众多

IOS使用ZBarSDK实现二维码的生成和扫描

现在二维码的使用也是越来越多,那我们在做APP的时候,有时也需要考虑二维码的生成和扫描 首先简单的讲一下二维码的生成 首先定义一个ImageView来显示生成的二维码图片 只是简单的做一下字符串转化成二维码 导入 libqrencode文件 引入头文件#import "QRCodeGenerator.h" 即可使用 imageview.image = [QRCodeGenerator qrImageForString:@"www.cnblogs.com/myselfxiaox

iOS 花式二维码生成和二维码识别

iOS 原生的二维码识别非常之棒,反正比 ZXing 和 ZBar 效果都好些,所以以后打算尽量用原生的二维码识别,然后最近把原生的二维码生成也顺便做了一遍,并且在原有基础上加了一些样式参数,封了一个小库方便以后使用. 项目地址:https://github.com/EyreFree/EFQRCode EFQRCode 是一个用 Swift 编写的用来生成和识别二维码的库,它基于系统二维码生成与识别进行开发. 生成:利用输入的水印图/图标等资源生成各种艺术二维码: 识别:识别率比 iOS 原生二

iOS关二维码那些事

在 iOS7 以前,在iOS中实现二维码和条形码扫描,我们所知的有,两大开源组件ZBar与ZXing. 这两大组件我们都有用过,这里总结下各自的缺点: ZBar ZBar在扫描的灵敏度上,和内存的使用上相对于ZXing上都是较优的,但是对于 “圆角二维码” 的扫描确很困难.如: ZXing ZXing 是 Google Code上的一个开源的条形码扫描库,是用java设计的,连Google Glass 都在使用的.但有人为了追求更高效率以及可移植性,出现了c++ port. Github上的Ob

二维码的生成与扫描

二维码的生成与扫描 搜集了二维码的生成.扫描功能代码,扫描功能 包括了 二维码.条码的扫描,具有 360扫描的UI效果,作为二维码的工具. 下载地址:http://www.devstore.cn/code/info/519.html 源码运行截图   

基于Zxing的二维码、条形码的扫描以及二维码的生成(简洁高效)

效果图: 条形码扫描: 二维码扫描: 二维码生成: 项目结构: 这个项目很简单,就2个类,一个jar包和一些依赖,十分简洁. 主要代码: public class MainActivity extends AppCompatActivity implements View.OnClickListener { private TextView resultTV; private ImageView resultIV; private EditText strET; @Override protec