iOS扫描二维码与生成二维码
2017-02-08 17:07
513 查看
objective-c二维码的扫码与生成
扫描二维码生成二维码
1.扫描二维码
获取输入设备(当前是摄像头)AVCaptureDevice *device = [AVCaptureDevice defaultDeviceWithMediaType:AVMediaTypeVideo];
根据输入设备获取输入对象
AVCaptureDeviceInput *input = [AVCaptureDeviceInput deviceInputWithDevice:device error:nil];
创建输出对象
AVCaptureMetadataOutput *output = [AVCaptureMetadataOutput new];
设置代理监听对象输出的数据,在主线程回调
[output setMetadataObjectsDelegate:self queue:dispatch_get_main_queue()];
创建会话
AVCaptureSession *session = [AVCaptureSession new]; //实现高质量的输出和摄像,默认值为AVCaptureSessionPresetHigh,可以不写 [session setSessionPreset:AVCaptureSessionPresetHigh];
添加输入输出到会话中(判断session是否已满)
if ([session canAddInput:input]) { [session addInput:input]; } if ([session canAddOutput:output]) { [session addOutput:output]; }
设置输出对象的输出什么样的数据(二维码、条码)
output.metadataObjectTypes = @[AVMetadataObjectTypeQRCode,AVMetadataObjectTypeCode128Code,AVMetadataObjectTypeCode93Code,AVMetadataObjectTypeCode39Code,AVMetadataObjectTypeCode39Mod43Code,AVMetadataObjectTypeEAN8Code,AVMetadataObjectTypeEAN13Code,AVMetadataObjectTypeUPCECode,AVMetadataObjectTypePDF417Code,AVMetadataObjectTypeAztecCode];
创建预览图层
AVCaptureVideoPreviewLayer *previewLayer = [AVCaptureVideoPreviewLayer layerWithSession:session]; [previewLayer setVideoGravity:AVLayerVideoGravityResizeAspectFill]; previewLayer.frame = self.view.bounds; [self.view.layer insertSublayer:previewLayer atIndex:0];
设置有效扫描区域
CGRect rect = CGRectMake(0.1,0.1,0.8,0.8); output.rectOfInterest = rect;
设置周边空白区域(中间扫描区域透明度比其他地方低)
UIView *maskView = [[UIView alloc] initWithFrame:self.view.bounds]; maskView.backgroundColor = [[UIColor blackColor] colorWithAlphaComponent:0.4f]; [self.view addSubview:maskView]; UIBezierPath *rectPath = [UIBezierPath bezierPathWithRect:self.view.bounds]; [rectPath appendPath:[[UIBezierPath bezierPathWithRoundedRect:CGRectMake(20.0f, 20.0f, 200.0f, 200.0f) cornerRadius:1] bezierPathByReversingPath]]; CAShapeLayer *shapeLayer = [CAShapeLayer layer]; shapeLayer.path = rectPath.CGPath; maskView.layer.mask = shapeLayer;
扫描成功后的回调
- (void)captureOutput:(AVCaptureOutput *)captureOutput didOutputMetadataObjects:(NSArray *)metadataObjects fromConnection:(AVCaptureConnection *)connection{ if (metadataObjects.count > 0) { //停止扫描(不停止有可能这个方法会执行好几次) [self.session stopRunning]; //取出扫描到得数据 AVMetadataMachineReadableCodeObject *obj = [metadataObjects lastObject]; if (obj) { NSLog(@"result = %@",[obj stringValue]); } } }
2.生成二维码
二维码滤镜CIFilter *filter = [CIFilter filterWithName:@"CIQRCodeGenerator"];
设置滤镜的默认属性
[filter setDefaults];
将字符串转成二进制数据
NSData *data = [string dataUsingEncoding:NSUTF8StringEncoding];
通过KVO设置滤镜inputmessage数据
[filter setValue:data forKey:@"inputMessage"];
获取滤镜输出的图片
CIImage *outputImage = [filter outputImage]; //转成UIImage返回 UIImage *image = [UIImage imageWithCIImage:outputImage];
相关文章推荐
- 【iOS开发】ZBar的使用:二维码的生成及扫描 —— 伊禾媛
- iOS平台 二维码生成和扫描
- iOS中 扫描二维码/生成二维码详解 韩俊强的博客
- iOS自带扫描和生成二维码
- ios 原生二维码的扫描和生成
- IOS 中实现自定义扫描二维码和生成二维码
- iOS开发日记13-原生二维码的扫描和生成
- iOS中 扫描二维码/生成二维码详解
- iOS 使用AVFoundation 扫描二维码并限定扫描区域(带代码生成蒙版)
- iOS开发--生成二维码及扫描二维码(原生)
- iOS自带扫描 和 生成二维码
- iOS笔记061 - 二维码的生成和扫描
- IOS 开发笔记——二维码的生成和扫描
- iOS开发-原生二维码的扫描和生成
- iOS自带扫描 和 生成二维码
- iOS 条形码 二维码 的生成 和 扫描 zBarSDK zXing
- IOS笔记061之二维码的生成和扫描
- ios 开发之 扫描二维码和生成二维码
- iOS中 扫描二维码/生成二维码详解
- iOS开发-原生二维码的扫描和生成