前面的文章中介绍了扫面二维码和条形码《【iOS】AVFoundation架构下的原生二维码和条形码扫描》
也介绍了二维码的生成以及制作一个带logo的二维码
《【iOS】CoreImage原生二维码生成(一)》
《【iOS】CoreImage原生二维码生成(二)一个方法生成带logo的二维码》
在加上现在这一篇,关于二维码的基本完了。但是想理解原理,知道CoreImage还需要大量的实践和阅读,加油!↖(^ω^)↗
读取图片中得二维码,我是这么一个思路,往方法里面传一个图片对象,这个方法就自动读取这个图片信息。
界面:
#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; }生成的结果截图:
github代码地址:请点击我。