zoukankan      html  css  js  c++  java
  • iOS 有关二维码

    一、把相应的URL生成二维码

    利用有关图像变成的框架 #import <CoreImage/CoreImage.h>

    步骤:实例化二维码滤镜---->恢复滤镜属性---->将字符串转化为data--->通过KVO设置滤镜---->滤镜将data生成二维码CIImage

        // 1.实例化二维码滤镜
        CIFilter *filter = [CIFilter filterWithName:@"CIQRCodeGenerator"];
        
        // 2.恢复滤镜的默认属性 (因为滤镜有可能保存上一次的属性)
        [filter setDefaults];
        
        // 3.将字符串转化为data
        NSData *data = [@"http://124.207.197.43:7080/OneBox/page/front/download.html" dataUsingEncoding:NSUTF8StringEncoding];
        
        // 4.通过KVO设置滤镜, 传入data, 将来滤镜就知道要通过传入的数据生成二维码
        [filter setValue:data forKey:@"inputMessage"];
        
        // 5.生成二维码
        CIImage *outputImage = [filter outputImage];
       
        // 6.生成二维码图片
        UIImage *image = [UIImage imageWithCIImage:outputImage];

    二、扫描二维码

    首先引入框架 #import <AVFoundation/AVFoundation.h>

    步骤:实例化拍摄设备对象--->设置输入设备--->设置元数据输出(实例化对象和设置代理)--->添加拍摄会话(实例化对象,添加输入设备,添加输出元数据,设置输出元数据类型)--->设置视频预览图层(设置frame并添加)--->启动会话即开始扫描--->在元数据代理中得到扫描后的数据(由于多次调用这个代理,所以要先停下,并移除图层)

    //
    //  ViewController.m
    //  14-扫描二维码
    //
    //  Created by apple on 14/11/11.
    //  Copyright (c) 2014年 heima. All rights reserved.
    //
    
    #import "ViewController.h"
    #import <AVFoundation/AVFoundation.h>
    
    @interface ViewController ()<AVCaptureMetadataOutputObjectsDelegate>
    @property (nonatomic, strong) AVCaptureSession *session;
    @property (nonatomic, strong) AVCaptureVideoPreviewLayer *previewLayer;
    @end
    
    @implementation ViewController
    
    - (void)viewDidLoad {
        [super viewDidLoad];
        
        
        // 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]];
        
        self.session = session;
        
        // 5. 视频预览图层
        // 5.1 实例化预览图层, 传递_session是为了告诉图层将来显示什么内容
        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];
    
    }
    
    - (void)captureOutput:(AVCaptureOutput *)captureOutput didOutputMetadataObjects:(NSArray *)metadataObjects fromConnection:(AVCaptureConnection *)connection
    {
        
        // 会频繁的扫描,调用代理方法
        // 1. 如果扫描完成,停止会话
        [self.session stopRunning];
        // 2. 删除预览图层
        [self.previewLayer removeFromSuperlayer];
        
        NSLog(@"%@", metadataObjects);
        
        // 3. 设置界面显示扫描结果
        if (metadataObjects.count > 0) {
            AVMetadataMachineReadableCodeObject *obj = metadataObjects[0];
            // 提示:如果需要对url或者名片等信息进行扫描,可以在此进行扩展!
    //        _label.text = obj.stringValue;
            NSLog(@"%@", obj.stringValue);
        }
    }
    
    
    @end

    也可以利用第三放已经写好的框架使用:《LBXScan》

    这个面已经设置好了集中二维码扫描格式,很方便,但是集成起来需要好好看看代码。 扫描后输出结果在下面的方法里面得到

    - (void)scanResultWithArray:(NSArray<LBXScanResult*>*)array
    {
        
        if (array.count < 1)
        {
            NSLog(@"无扫描结果");
            
            return;
        }
        
        //经测试,可以同时识别2个二维码,不能同时识别二维码和条形码
        for (LBXScanResult *result in array) {
            
            NSLog(@"scanResult:%@",result.strScanned);
        }
        
        LBXScanResult *scanResult = array[0];
        
        NSString*strResult = scanResult.strScanned;
        
        self.scanImage = scanResult.imgScanned;
        
        if (!strResult) {
            
            return;
        }
        
        //震动提醒
        [LBXScanWrapper systemVibrate];
        //声音提醒
        [LBXScanWrapper systemSound];
        
    }
  • 相关阅读:
    卡特兰数
    hdu 1023 Train Problem II
    hdu 1022 Train Problem
    hdu 1021 Fibonacci Again 找规律
    java大数模板
    gcd
    object dection资源
    Rich feature hierarchies for accurate object detection and semantic segmentation(RCNN)
    softmax sigmoid
    凸优化
  • 原文地址:https://www.cnblogs.com/peaker-wu/p/5523795.html
Copyright © 2011-2022 走看看