iOS中二维码的生成与使用(入门篇)

这里简单总结一下关于二维码的扫描与生成,用的是原生的AVFoundation框架,其实这个框架目前功能还是够用的,不过这里推荐一个二维码扫描的第三方(face++),网址就不贴了,直接度娘就OK,里面的内容足够丰富,感兴趣的朋友可以自己去倒弄一下。

一.二维码的扫描     

步骤:

1.创建输入视频设备(默认是后置摄像头)

2.创建输入设备对象

3.创建元数据输出设备

4.创建session目的是将输入和输出联系在一起)

5.把输出设备添加到session,将输入设备添加到session

6.设置数据源的类型(需要真机这个才有值),指定代理(在代理方法中监听结果)

7.开始扫描

8.添加视频的预览界面(这里是打开相机

9.代理方法的实现

代码实现:

  

 1 - (void)viewDidLoad {
 2     [super viewDidLoad];
 3
 4 //    1.创建输入视频设备
 5     //默认为后置摄像头
 6     AVCaptureDevice * device = [AVCaptureDevice defaultDeviceWithMediaType:AVMediaTypeVideo];
 7 //    2.创建输入设备对象
 8     NSError * error = nil;
 9     AVCaptureDeviceInput * inputDevice = [[AVCaptureDeviceInput alloc]initWithDevice:device error:&error];
10
11 //    3.创建元数据输出设备
12     AVCaptureMetadataOutput * outputDevice = [[AVCaptureMetadataOutput alloc]init];
13 //    4.创建session(作用是为了将输入和输出联系起来)
14     self.session = [[AVCaptureSession alloc]init];
15 //    5.把输出设备添加到session
16     if ([self.session canAddOutput:outputDevice]) {
17         [self.session addOutput:outputDevice];
18     }
19 //    6.把输入设备添加的session
20     if ([self.session canAddInput:inputDevice]) {
21         [self.session addInput:inputDevice];
22     }
23 //    7.设置数据源类型,这个值要真机才会有值
24 //    NSLog(@"%@",outputDevice.availableMetadataObjectTypes);
25     outputDevice.metadataObjectTypes = @[@"org.iso.QRCode"];
26     //设置输出的代理
27     [outputDevice setMetadataObjectsDelegate:self queue:dispatch_get_main_queue()];
28 //    8.开始扫描
29     [self.session startRunning];
30
31 //    9.设置预览界面
32     //视频预览层
33     AVCaptureVideoPreviewLayer * previewL = [[AVCaptureVideoPreviewLayer alloc]initWithSession:self.session];
34     //设置frame
35     previewL.frame = self.view.bounds;
36     //添加到控制器的view
37     [self.view.layer addSublayer:previewL];
38
39 }
40
41 #pragma mark - AVCaptureMetadataOutputObjectsDelegate
42 //在这个代理中打印输出的结果
43 - (void)captureOutput:(AVCaptureOutput *)captureOutput didOutputMetadataObjects:(NSArray *)metadataObjects fromConnection:(AVCaptureConnection *)connection
44 {
45     AVMetadataMachineReadableCodeObject * object = [metadataObjects firstObject];
46     NSLog(@"%@",object.stringValue);
47     //停止扫描,这样相机会停住了
48     [self.session stopRunning];
49 }
  二.二维码的生成(此列是根据一段文本生成一个二维码的图片)
 1  1.1 创建用于生成二维码滤镜
 2     CIFilter *qrFilter = [CIFilter filterWithName:@"CIQRCodeGenerator"];
 3     NSData *messageData = [@"最近好吗?" dataUsingEncoding:NSUTF8StringEncoding];
 4 //  1.2 设置二维滤镜的输入
 5     [qrFilter setValue:messageData forKey:@"inputMessage"];
 6 //  1.3取出图片
 7     CIImage *ciImage = qrFilter.outputImage;
 8 //  1.4 放大图片
 9     ciImage = [ciImage imageByApplyingTransform:CGAffineTransformMakeScale(8, 8)];
10
11 #pragma mark - 修改二维码的前景色和背景色
12 //  修改二维码的前景色和背景色,当你修改了前景色或背景色都会降低图片的识别度
13     CIFilter *falseColorFilter = [CIFilter filterWithName:@"CIFalseColor"];
14 //    inputImage, 图片
15 //    inputColor0, 前景颜色
16 //    inputColor1  背景色
17 //    这三个参数都是CoreImage中的对象
18 //     NSLog(@"%@",falseColorFilter.inputKeys);
19 //  图片
20     [falseColorFilter setValue:ciImage forKey:@"inputImage"];
21 //  前景色
22     [falseColorFilter setValue:[CIColor colorWithRed:1 green:0 blue:0] forKey:@"inputColor0"];
23 //  背景色
24     [falseColorFilter setValue:[CIColor colorWithRed:0 green:0 blue:1] forKey:@"inputColor1"];
25
26
27
28 //  取出滤镜中的图片
29     ciImage = falseColorFilter.outputImage;
30
31 //  二维码上面添加头像,也会降低二维码的识别度
32     UIImage *qrImage = [UIImage imageWithCIImage:ciImage];
33
34 #pragma mark - 在原来的二维码的图片上画一个头像
35 //  在原来的二维码的图片上画一个头像
36 //  开启图片上下文
37     UIGraphicsBeginImageContext(qrImage.size);
38 //  绘制二维码图片
39     [qrImage drawInRect:CGRectMake(0, 0, qrImage.size.width, qrImage.size.height)];
40 //  绘制头像
41     UIImage *headImage = [UIImage imageNamed:@"cang"];
42     CGFloat headW = qrImage.size.width * 0.2;
43     CGFloat headH = qrImage.size.height * 0.2;
44     CGFloat headX = (qrImage.size.width - headW) * 0.5;
45     CGFloat headY = (qrImage.size.height - headH) * 0.5;
46     [headImage drawInRect:CGRectMake(headX, headY, headW, headH)];
47 //  从图片上下文中取出图片
48     qrImage  = UIGraphicsGetImageFromCurrentImageContext();
49
50 //  关闭图片上下文
51     UIGraphicsEndImageContext();
52
53 //  1.6 把CIImage转换为UIImage
54     self.imageView.image = qrImage;
55     

效果图:

ps:此列比较简单,写得比较简陋,后续有需求会逐渐完善,大家有什么好的代码也可以贴上来,一起交流。

时间: 2024-10-10 17:54:19

iOS中二维码的生成与使用(入门篇)的相关文章

iOS二维码的生成与扫描

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

ios中二维码的使用

iOS在7之后,具备了原生的二维码生成API; 生成二维码的准备:  #import <CoreImage/CoreImage.h> 导入框架: 开始生成: //1- 创建过滤器 CIFilter * filter = [CIFilter filterWithName:@"CIQRCodeGenerator"]; //2- 恢复过滤器的默认设置 [filter setDefaults]; //3- 给过过滤器赋值 (扫描二维码后的显示信息) NSString * dataS

iOS:二维码的生成

所谓的二维码就是一个图片,只不过在iOS需要借用<CoreImage/CoreImage.h>来实现,  并且二维码图片是通过CIImage来转成UIImage的.具体步骤如下: // 1.创建一个滤镜    CIFilter *filter = [CIFilter filterWithName:@"CIQRCodeGenerator"];        // 2.设置默认的属性    [filter setDefaults];        // 3.给滤镜设置数据   

iOS 中二维码扫描(zxingObjc和原生)

对于网上的第三方 ZXingObjC,自我感觉是对原生的AVFoundation中关于二维码部分的一个封装,大致看看ZXingObjC的内部实现其事和原生的实现相似的,里面都用到了AVFoundation框架中的几个类:AVCaptureSession,AVCaptureDevice,AVCaptureInput,AVCaptureOutput.刚看到这几个类以及类内部的属性和变量的时候,完全不知道是什么,慢慢的才有了了解: 官网对这几个类的解释是: An instance of AVCaptu

IOS 二维码生成

这篇博客将会介绍二维码的生成. 由于没有什么东西值得长篇大论的,所以这里我就通过代码的实现介绍二维码. 第一部分 第一部分是二维码的简单生成没有其他重点介绍. 效果图 代码部分 // // ViewController.m // CX 二维码生成 // // Created by ma c on 16/4/12. // Copyright ? 2016年 bjsxt. All rights reserved. // #import "ViewController.h" #import

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

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

iOS开发 - 二维码的生成与读取

二维码的生成 从iOS7開始集成了二维码的生成和读取功能 此前被广泛使用的zbarsdk眼下不支持64位处理器 生成二维码的步骤: 导入CoreImage框架 通过滤镜CIFilter生成二维码 二维码的内容(传统的条形码仅仅能放数字): 纯文本 名片 URL 生成二维码 // 1. 实例化二维码滤镜 CIFilter *filter = [CIFilter filterWithName:@"CIQRCodeGenerator"]; // 2. 恢复滤镜的默认属性 [filter se

ios-深度解析二维码的生成与使用

利用一个小demo来对二维码进行学习,总共四个界面(主界面,生成二维码界面,识别二维码界面,扫描二维码界面) 一.二维码的介绍 1.什么是二维码? 二维条码/二维码是用某种特定的几何图形按一定规律在平面分布的黑白相间的图形记录数据符号信息的 总结: 用图形记录标记一些信息,方便通过图形识别来获取信息 2 应用场景 信息获取(名片.地图.WIFI密码.资料) 手机电商(用户扫码.手机直接购物下单) 手机支付(扫描商品二维码,通过银行或第三方支付提供的手机端通道完成支付) 微信添加好友 二.二维码界

Ios二维码扫描(系统自带的二维码扫描)

Ios二维码扫描 这里给大家介绍的时如何使用系统自带的二维码扫描方法和一些简单的动画! 操作步骤: 1).首先你需要搭建UI界面如图:下图我用了俩个imageview和一个label 2).你需要在你当前的控制器中导入 #import <AVFoundation/AVFoundation.h> <AVCaptureMetadataOutputObjectsDelegate>代理 3).在@interface中定义 @property (nonatomic,strong)AVCapt