zoukankan      html  css  js  c++  java
  • iOS开发——高级篇——二维码的生产和读取


    一、二维码的生成


    从iOS7开始集成了二维码的生成和读取功能
    此前被广泛使用的zbarsdk目前不支持64位处理器

    生成二维码的步骤:
    导入CoreImage框架
    通过滤镜CIFilter生成二维码

    二维码的内容(传统的条形码只能放数字):
    纯文本
    名片
    URL

    // 1. 实例化二维码滤镜
    CIFilter *filter = [CIFilter filterWithName:@"CIQRCodeGenerator"];
    // 2. 恢复滤镜的默认属性
    [filter setDefaults];
    
    // 3. 将字符串转换成NSData
    NSData *data = [str dataUsingEncoding:NSUTF8StringEncoding];
    
    // 4. 通过KVO设置滤镜inputMessage数据
    [filter setValue:data forKey:@"inputMessage"];
    
    // 5. 获得滤镜输出的图像
    CIImage *outputImage = [filter outputImage];
    
    // 6. 将CIImage转换成UIImage,并放大显示
    return [UIImage imageWithCIImage:outputImage scale:20.0 orientation:UIImageOrientationUp];

    二、读取二维码


    读取二维码需要导入AVFoundation框架
    利用摄像头识别二维码中的内容(模拟器不行)

    输入(摄像头)
    由会话将摄像头采集到的二维码图像转换成字符串数据
    输出(数据)
    由预览图层显示扫描场景

    // 1. 实例化拍摄设备
    AVCaptureDevice *device = [AVCaptureDevice defaultDeviceWithMediaType:AVMediaTypeVideo];
    // 2. 设置输入设备
    AVCaptureDeviceInput *input = [AVCaptureDeviceInput deviceInputWithDevice:device error:nil];
    // 3. 设置元数据输出
    // 3.1 实例化拍摄元数据输出
    AVCaptureMetadataOutput *output = [[AVCaptureMetadataOutput alloc] init];
    // 3.3 设置输出数据代理
    [output setMetadataObjectsDelegate:self queue:dispatch_get_main_queue()];
    // 4. 添加拍摄会话
    // 4.1 实例化拍摄会话
    AVCaptureSession *session = [[AVCaptureSession alloc] init];
    // 4.2 添加会话输入
    [session addInput:input];
    // 4.3 添加会话输出
    [session addOutput:output];
    // 4.3 设置输出数据类型,需要将元数据输出添加到会话后,才能指定元数据类型,否则会报错
    [output setMetadataObjectTypes:@[AVMetadataObjectTypeQRCode]];
    
    // 5. 视频预览图层
    // 5.1 实例化预览图层
    AVCaptureVideoPreviewLayer *preview = [AVCaptureVideoPreviewLayer layerWithSession:_session];
    preview.videoGravity = AVLayerVideoGravityResizeAspectFill;
    preview.frame = self.view.bounds;
    // 5.2 将图层插入当前视图
    [self.view.layer insertSublayer:preview atIndex:100];
    self.previewLayer = preview;
    
    // 6. 启动会话
    [_session startRunning];
  • 相关阅读:
    【原创】Laravel-gii 一款真正的可视化 CRUD 代码生成工具
    Alfred Workflow 一键上传图片到github
    linux使用rsync下秒删快速删除大文件
    shell 中使用cd命令,提示找不到目录的解决方法
    关于0级DOM /2级DOM 事件的执行顺序
    可拖拽的元素的一个javascript实现方法
    javascript 的函数声明和(匿名)闭包以及执行顺序
    jquery deferred对象解析
    js 的 $.data() 和 $('div').data() 缓存机制
    Java对象的创建方式
  • 原文地址:https://www.cnblogs.com/chglog/p/4872624.html
Copyright © 2011-2022 走看看