【iOS】一个方法读取图片中的二维码信息

前面的文章中介绍了扫面二维码和条形码《【iOS】AVFoundation架构下的原生二维码和条形码扫描

也介绍了二维码的生成以及制作一个带logo的二维码

《【iOS】CoreImage原生二维码生成(一)

【iOS】CoreImage原生二维码生成(二)一个方法生成带logo的二维码

在加上现在这一篇,关于二维码的基本完了。但是想理解原理,知道CoreImage还需要大量的实践和阅读,加油!↖(^ω^)↗

读取图片中得二维码,我是这么一个思路,往方法里面传一个图片对象,这个方法就自动读取这个图片信息。

界面:

【iOS】一个方法读取图片中的二维码信息_第1张图片

#pragma mark - 读取图片中的二维码
/**
 *  读取图片中的二维码
 *
 *  @param image 图片
 *
 *  @return 图片中的二维码数据集合 CIQRCodeFeature对象
 */
+ (NSArray *)readQRCodeFromImage:(UIImage *)image{
    // 创建一个CIImage对象
    CIImage *ciImage = [[CIImage alloc] initWithCGImage:image.CGImage options:nil];
    CIContext *context = [CIContext contextWithOptions:@{kCIContextUseSoftwareRenderer : @(YES)}]; // 软件渲染
    CIDetector *detector = [CIDetector detectorOfType:CIDetectorTypeQRCode context:context options:@{CIDetectorAccuracy : CIDetectorAccuracyHigh}];// 二维码识别
    // 注意这里的CIDetectorTypeQRCode
    NSArray *features = [detector featuresInImage:ciImage];
    NSLog(@"features = %@",features); // 识别后的结果集
    for (CIQRCodeFeature *feature in features) {
        NSLog(@"msg = %@",feature.messageString); // 打印二维码中的信息
    }
    return features;
}
结合上一篇《【iOS】CoreImage原生二维码生成(二)一个方法生成带logo的二维码》中的代码:

//
//  ViewController.m
//  HGDQQRCode
//
//  Created by zhuming on 16/3/9.
//  Copyright © 2016年 zhuming. All rights reserved.
//

#import "ViewController.h"
#import "HGDQQRCodeView.h"

@interface ViewController ()

@property (weak, nonatomic) IBOutlet UIView *QRView;

@property (weak, nonatomic) IBOutlet UILabel *msglabel;

@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    [self.msglabel sizeToFit];
    // Do any additional setup after loading the view, typically from a nib.
}
/**
 *  生成二维码
 *
 *  @param sender sender description
 */
- (IBAction)btnClick:(id)sender {
    [HGDQQRCodeView creatQRCodeWithURLString:@"http://blog.csdn.net/zhuming3834" superView:self.QRView logoImage:[UIImage imageNamed:@"logo"] logoImageSize:CGSizeMake(40, 40) logoImageWithCornerRadius:0];
}
/**
 *  读取图片中的二维码
 *
 *  @param sender sender description
 */
- (IBAction)readBtnClick:(id)sender {
    // 截图
    UIImage *im = [HGDQQRCodeView screenShotFormView:self.view];
    // 读取图片中的二维码
    NSArray *array = [HGDQQRCodeView readQRCodeFromImage:im];
    // 显示二维码中的信息
    NSMutableString *str = [[NSMutableString alloc] init];
    [array enumerateObjectsUsingBlock:^(id  _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {
        CIQRCodeFeature *temp = (CIQRCodeFeature *)obj;
        [str appendFormat:@"地址:%@",temp.messageString];
    }];
    self.msglabel.text = str;
}

- (void)didReceiveMemoryWarning {
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}

@end

截图方法:

/**
 *  截图
 *
 *  @param view 需要截取的视图
 *
 *  @return 截图 图片
 */
+ (UIImage *)screenShotFormView:(UIView *)view
{
    UIGraphicsBeginImageContextWithOptions(view.bounds.size, YES, [UIScreen mainScreen].scale);
    [view.layer renderInContext:UIGraphicsGetCurrentContext()];
    UIImage *img = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();
    return img;
}
生成的结果截图:

【iOS】一个方法读取图片中的二维码信息_第2张图片


github代码地址:请点击我。


你可能感兴趣的:(读取二维码信息)