国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發(fā)設計 > 正文

01-二維碼名片的生成與讀取

2019-11-14 18:19:54
字體:
供稿:網(wǎng)友

概述


  • 通過某種特定的幾何圖形按一定規(guī)律在平面(二維方向上)分布的黑白相間的圖形記錄數(shù)據(jù)符號信息的
  • 二維碼通常可以包含以下內(nèi)容

    • 純文本
    • 名片
    • URL
  • 二維碼具有非常廣泛的應用

    • 二維碼名片
    • 掃碼付款
    • 網(wǎng)址(URL),掃描后自動打開網(wǎng)址

二維碼的生成


  • 生成原理

    • 通過一個類CIFilter(濾鏡)包含二維碼中所有的信息,然后生成一張二維碼圖片
    • 二維碼中間的icon(頭像),是通過在生成的圖片上添加一張圖片實現(xiàn)的
  • 生成步驟

    • 創(chuàng)建濾鏡
    • 初始化濾鏡
    • 添加二維碼信息
    • 獲取生成的二維碼圖片
    • 將二維碼圖片展示出來
  • 生成的二維碼的效果圖

  • 具體代碼實現(xiàn)

    • 通過storyboard創(chuàng)建兩個imageView,分別用來展示二維碼圖片和頭像

    • 擁有展示二維碼圖片的imageView

      @PRoperty (weak, nonatomic) IBOutlet UIImageView *imageView;
    • 生成二維碼

      /**點擊屏幕的時候顯示二維碼*/- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event{    //1.創(chuàng)建濾鏡    CIFilter *filter = [CIFilter filterWithName:@"CIQRCodeGenerator"];    //2.恢復默認    [filter setDefaults];    //3.給濾鏡添加數(shù)據(jù)    NSString *dataString = @"http://www.survivalescaperooms.com/theDesertIslandOutOfTheWorld/";//    NSString *dataString = @"世俗孤島";    //將數(shù)據(jù)轉(zhuǎn)換成NSData類型    NSData *data = [dataString dataUsingEncoding:NSUTF8StringEncoding];    //通過KVC設置濾鏡的二維碼輸入信息    [filter setValue:data forKey:@"inputMessage"];    //4.獲取輸出的二維碼圖片(CIImage類型)    CIImage *outImage = [filter outputImage];    //將CIImage類型的圖片裝換成UIImage類型的圖片    UIImage *image = [UIImage imageWithCIImage:outImage];    //5.顯示二維碼圖片    self.imageView.image = image;}
    • 通過二維碼掃描工具,可以掃描生成的二維碼

      • 若二維碼的輸入信息是URL,則會打開指定的網(wǎng)絡資源

二維碼的掃描


  • 注意:

    • 二維碼掃碼需要使用攝像頭,需要真機設備
    • Xcode7可是免費真機調(diào)試
  • 二維碼掃描的過程

    • 通過攝像頭掃描二維碼
    • 解析二維碼數(shù)據(jù)
    • 根據(jù)二維碼信息執(zhí)行相應的操作
  • 過程分析

    • 通過攝像頭掃描二維碼信息需要用到AVCapturesession

      • 該類是用來協(xié)調(diào)從音頻/視頻輸入端口到輸出端的數(shù)據(jù)
      • 該類需要一個輸入設備AVCaptureDeviceInput,通常是攝像頭
      • 該類需要一個輸出端,輸出指定類型的數(shù)據(jù),有多個類可以選擇(如:AVCaptureMetadataOutput)
      • 需要調(diào)用- startRunning方法開啟輸入源
    • 通過AVCaptureSession類捕獲的數(shù)據(jù),可以通過指定輸出端的過濾類型來以特定的類型解析捕獲的數(shù)據(jù)
    • 可以為輸出端AVCaptureMetadataOutput設置代理,來聽捕獲過程
    • 通過AVCaptureVideoPreviewLayer類將獲取的原始數(shù)據(jù)渲染到指定的圖層
  • 二維碼的生成過程

    • 通過成員屬性保存輸入源與輸出端的協(xié)調(diào)者(AVCaptureSession對象)

      @property (nonatomic, weak) AVCaptureSession *session;
    • 通過成員屬性保存展示通過輸入設備輸入的元數(shù)據(jù)的圖層,用于在適當?shù)臅r候移除圖層

      @property (nonatomic, weak) AVCaptureVideoPreviewLayer *layer;
    • 創(chuàng)建AVCaptureSession類的對象(簡稱:捕獲對象),用于捕獲音頻/視頻端口的數(shù)據(jù)

      AVCaptureSession *session = [[AVCaptureSession alloc] init];self.session = session;
    • 給捕獲對象添加輸入設備(通常是攝像頭)

      //設置輸入設備輸入數(shù)據(jù)的類型(視頻)AVCaptureDevice *device = [AVCaptureDevice defaultDeviceWithMediaType:AVMediaTypeVideo];AVCaptureDeviceInput *input = [AVCaptureDeviceInput deviceInputWithDevice:device error:nil];[session addInput:input];
    • 給捕獲對象添加輸出端

      AVCaptureMetadataOutput *output = [[AVCaptureMetadataOutput alloc] init];//設置代理[output setMetadataObjectsDelegate:self queue:dispatch_get_main_queue()];[session addOutput:output];
    • 設置輸入源的過濾條件(只獲取二維碼信息)

      [output setMetadataObjectTypes:@[AVMetadataObjectTypeQRCode]];
    • 將捕獲的原始數(shù)據(jù)顯示到控制器的view上

      AVCaptureVideoPreviewLayer *layer = [AVCaptureVideoPreviewLayer layerWithSession:session];layer.frame = self.view.bounds;[self.view.layer addSublayer:layer];
    • 開始獲取數(shù)據(jù)

      [session startRunning];
    • 實現(xiàn)輸出端的代理方法,監(jiān)聽捕獲過程

      - (void)captureOutput:(AVCaptureOutput *)captureOutput didOutputMetadataObjects:(NSArray *)metadataObjects fromConnection:(AVCaptureConnection *)connection{    if (metadataObjects.count > 0)    {    	//獲取輸出端的信息        AVMetadataMachineReadableCodeObject *object = [metadataObjects lastObject];        NSLog(@"%@", object.stringValue);        //停止掃描        [self.session stopRunning];        //將展示圖層移除        [self.layer removeFromSuperlayer];    }    else    {        NSLog(@"沒有掃描到數(shù)據(jù)");    }}

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 石台县| 文昌市| 汝城县| 肃宁县| 揭阳市| 泰和县| 万源市| 曲阳县| 蚌埠市| 专栏| 贵定县| 仲巴县| 绍兴市| 辽阳市| 湖州市| 伊宁县| 曲靖市| 同德县| 新乐市| 衡阳县| 婺源县| 乐陵市| 鹿泉市| 广元市| 论坛| 娄烦县| 卓资县| 大丰市| 肥东县| 长海县| 安龙县| 武威市| 观塘区| 海林市| 南丰县| 沂水县| 隆尧县| 祁东县| 精河县| 雷山县| 裕民县|