IOS笔记061之二维码的生成和扫描

爱你2012周莉

爱你2012周莉

2016-02-19 11:22

下面图老师小编跟大家分享一个简单易学的IOS笔记061之二维码的生成和扫描教程,get新技能是需要行动的,喜欢的朋友赶紧收藏起来学习下吧!

如今二维码随处可见,无论是实物商品还是各种礼券都少不了二维码的身影。而手机等移动设备又成为二维码的一个很好的应用平台,不管是生成二维码还是扫码二维码。本篇文章从生成二维码、扫描二维码展开分析,通过内容分析二维码用起来也很easy了。

首先说下生成二维码

       二维码可以存放纯文本、名片或者URL

其次生成二维码的步骤:

       导入CoreImage框架

再次通过滤镜CIFilter生成二维码

(本文来源于图老师网站,更多请访问http://m.tulaoshi.com/bianchengyuyan/)

1、创建过滤器

(本文来源于图老师网站,更多请访问http://m.tulaoshi.com/bianchengyuyan/)

2、恢复滤镜的默认属性

3、设置内容

4、获取输出文件

5、显示二维码

代码实现 CoreImage

 // 二维码的生成 // 1、创建过滤器 CIFilter *filter = [CIFilter filterWithName:@"CIQRCodeGenerator"]; // 2、恢复滤镜的默认属性 [filter setDefaults]; // 3、设置内容 NSString *str = @"这是一个二维码的生成结果"; NSData *data = [str dataUsingEncoding:NSUTF8StringEncoding]; // 使用KVO设置属性 [filter setValue:data forKey:@"inputMessage"]; // 4、获取输出文件 CIImage *outputImage = [filter outputImage]; // 5、显示二维码 self.imageView.image = [UIImage imageWithCIImage:outputImage];

这样显示的图片不是很清晰,可以自己重绘图片

重新生成高清图片:网上找即可,具体过程可暂时不关心

/** * 根据CIImage生成指定大小的UIImage * * @param image CIImage * @param size 图片宽度 */- (UIImage *)createNonInterpolatedUIImageFormCIImage:(CIImage *)image withSize:(CGFloat) size{ CGRect extent = CGRectIntegral(image.extent); CGFloat scale = MIN(size/CGRectGetWidth(extent), size/CGRectGetHeight(extent)); // 1.创建bitmap; size_t width = CGRectGetWidth(extent) * scale; size_t height = CGRectGetHeight(extent) * scale; CGColorSpaceRef cs = CGColorSpaceCreateDeviceGray(); CGContextRef bitmapRef = CGBitmapContextCreate(nil, width, height, 8, 0, cs, (CGBitmapInfo)kCGImageAlphaNone); CIContext *context = [CIContext contextWithOptions:nil]; CGImageRef bitmapImage = [context createCGImage:image fromRect:extent]; CGContextSetInterpolationQuality(bitmapRef, kCGInterpolationNone); CGContextScaleCTM(bitmapRef, scale, scale); CGContextDrawImage(bitmapRef, extent, bitmapImage); // 2.保存bitmap到图片 CGImageRef scaledImage = CGBitmapContextCreateImage(bitmapRef); CGContextRelease(bitmapRef); CGImageRelease(bitmapImage); return [UIImage imageWithCGImage:scaledImage];}

还有就是设置内容为网址时,如果带有协议头的话,会自动打开网页。

NSString *str = @http://www.baidu.com;

必须带有协议头才能打开

回到顶部

扫描二维码

AVFoundation框架

二维码的扫描过程

1、创建捕捉会话AVCaptureSession

添加输入设备(数据从摄像头输入) AVCaptureDevice AVCaptureDeviceInput

2、添加输出数据(示例对象--类对象--元类对象--根元类对象) AVCaptureMetadataOutput

2.1.设置输入元数据的类型(类型是二维码数据) setMetadataObjectTypes

3、添加扫描图层 AVCaptureVideoPreviewLayer

4、开始扫描 startRunning

5、实现回调代理方法,获取扫描结果 captureOutput: :

#import "ViewController.h"#import AVFoundation/AVFoundation.h@interface ViewController () AVCaptureMetadataOutputObjectsDelegate/**显示图层*/@property (nonatomic, strong) AVCaptureVideoPreviewLayer *layer;/**捕捉会话*/@property (nonatomic, strong) AVCaptureSession *session;@end@implementation ViewController- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event{ // 二维码的扫描 // 1、创建捕捉会话 AVCaptureSession *session = [[AVCaptureSession alloc] init]; self.session = session; // 2.添加输入设备(数据从摄像头输入) AVCaptureDevice *device = [AVCaptureDevice defaultDeviceWithMediaType:AVMediaTypeVideo]; AVCaptureDeviceInput *input = [AVCaptureDeviceInput deviceInputWithDevice:device error:nil]; [session addInput:input]; // 3、添加输出数据(示例对象--类对象--元类对象--根元类对象) AVCaptureMetadataOutput *output = [[AVCaptureMetadataOutput alloc] init]; [output setMetadataObjectsDelegate:self queue:dispatch_get_main_queue()]; [session addOutput:output]; // 3.1.设置输入元数据的类型(类型是二维码数据) [output setMetadataObjectTypes:@[AVMetadataObjectTypeQRCode]]; // 4、添加扫描图层 AVCaptureVideoPreviewLayer *layer = [AVCaptureVideoPreviewLayer layerWithSession:session]; layer.frame = self.view.bounds; [self.view.layer addSublayer:layer]; self.layer = layer; // 5、开始扫描 [session startRunning];}/** * 实现output的回调方法 */- (void)captureOutput:(AVCaptureOutput *)captureOutput didOutputMetadataObjects:(NSArray *)metadataObjects fromConnection:(AVCaptureConnection *)connection{ // 数组metadataObjects中存放结果数据 if (metadataObjects.count  0) { // 获取最终的读取结果 AVMetadataMachineReadableCodeObject *object = [metadataObjects lastObject]; NSLog(@"%@",object.stringValue); [self.session stopRunning]; [self.layer removeFromSuperlayer]; } else { NSLog(@"没有扫描到数据"); }}

总结一句话:这个二维码使用起来也不难

本文就到此为止,IOS笔记061之二维码的生成和扫描希望在今后的工作和学习能够帮助到大家。下面文章给大家分享如何在苹果iOS设备上使用二维码,需要了解的朋友点击这里。

展开更多 50%)
分享

猜你喜欢

IOS笔记061之二维码的生成和扫描

编程语言 网络编程
IOS笔记061之二维码的生成和扫描

ios原生二维码扫描

编程语言 网络编程
ios原生二维码扫描

s8lol主宰符文怎么配

英雄联盟 网络游戏
s8lol主宰符文怎么配

iOS实现二维码的扫描功能

编程语言 网络编程
iOS实现二维码的扫描功能

IOS生成与读取二维码名片

编程语言 网络编程
IOS生成与读取二维码名片

lol偷钱流符文搭配推荐

英雄联盟 网络游戏
lol偷钱流符文搭配推荐

微信二维码支付怎么生成二维码

手机软件 应用软件
微信二维码支付怎么生成二维码

电脑如何扫描二维码

二维码
电脑如何扫描二维码

lolAD刺客新符文搭配推荐

英雄联盟
lolAD刺客新符文搭配推荐

iOS开发中用imageIO渐进加载图片及获取exif的方法

iOS开发中用imageIO渐进加载图片及获取exif的方法

iOS开发中实现显示gif图片的方法

iOS开发中实现显示gif图片的方法
下拉加载更多内容 ↓