博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
IOS 二维码
阅读量:2345 次
发布时间:2019-05-10

本文共 6797 字,大约阅读时间需要 22 分钟。

生成二维码

导入CoreImage 库

#import 
-(UIImage*)getImageFromStr:(NSString*)str{ //创建过滤器 CIFilter *filter = [CIFilter filterWithName:@"CIQRCodeGenerator"]; //恢复默认设置 [filter setDefaults]; //给字符串加密 str = [self encryptionStr:str]; NSData *data = [str dataUsingEncoding:NSUTF8StringEncoding]; [filter setValue:data forKey:@"inputMessage"]; //获取输出的二维码 CIImage *outputImage = [filter outputImage]; //对图片处理,使其高清 UIImage *image = [self createNonInterpolatedUIImageFormCIImage:outputImage withSize:200]; return image;}//使图片高清-(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];}

扫描二维码

导入AVFoundation 库
遵守

#define AUTH_ALERT_TAG (int)281821#define  ScreenHeight  [UIScreen mainScreen].bounds.size.height#define  ScreenWidth   [UIScreen mainScreen].bounds.size.width@interface QRCodeController ()
{ AVCaptureSession * session;//输入输出的中间桥梁 int line_tag; UIView *highlightView; NSDictionary * _resultDic; NSArray *_buddies;}@end@implementation QRCodeController/** * @author Whde * * viewDidLoad */- (void)viewDidLoad { [super viewDidLoad]; self.view.backgroundColor = [UIColor whiteColor]; [self instanceDevice]; [VCUtil addTitleView:self :@"添加好友"]; //[VCUtil addBackBtnInNavigation:self];}- (void)instanceDevice{ line_tag = 1872637; //获取摄像设备 AVCaptureDevice * device = [AVCaptureDevice defaultDeviceWithMediaType:AVMediaTypeVideo]; //创建输入流 AVCaptureDeviceInput * input = [AVCaptureDeviceInput deviceInputWithDevice:device error:nil]; //创建输出流 AVCaptureMetadataOutput * output = [[AVCaptureMetadataOutput alloc]init]; //设置代理 在主线程里刷新 [output setMetadataObjectsDelegate:self queue:dispatch_get_main_queue()]; //初始化链接对象 session = [[AVCaptureSession alloc]init]; //高质量采集率 [session setSessionPreset:AVCaptureSessionPresetHigh]; if (input) { [session addInput:input]; } if (output) { [session addOutput:output]; //设置扫码支持的编码格式(如下设置条形码和二维码兼容) NSMutableArray *a = [[NSMutableArray alloc] init]; if ([output.availableMetadataObjectTypes containsObject:AVMetadataObjectTypeQRCode]) { [a addObject:AVMetadataObjectTypeQRCode]; } if ([output.availableMetadataObjectTypes containsObject:AVMetadataObjectTypeEAN13Code]) { [a addObject:AVMetadataObjectTypeEAN13Code]; } if ([output.availableMetadataObjectTypes containsObject:AVMetadataObjectTypeEAN8Code]) { [a addObject:AVMetadataObjectTypeEAN8Code]; } if ([output.availableMetadataObjectTypes containsObject:AVMetadataObjectTypeCode128Code]) { [a addObject:AVMetadataObjectTypeCode128Code]; } output.metadataObjectTypes=a; } AVCaptureVideoPreviewLayer * layer = [AVCaptureVideoPreviewLayer layerWithSession:session]; layer.videoGravity=AVLayerVideoGravityResizeAspectFill; layer.frame=self.view.layer.bounds; [self.view.layer insertSublayer:layer atIndex:0]; [self setOverlayPickerView]; [self addAnimation]; //开始捕获 [session startRunning];}#pragma 扫码结果 delegate-(void)captureOutput:(AVCaptureOutput *)captureOutput didOutputMetadataObjects:(NSArray *)metadataObjects fromConnection:(AVCaptureConnection *)connection{ DLog(@"%@",metadataObjects); if (metadataObjects.count>0) { [session stopRunning]; [self removeAnimation]; AVMetadataMachineReadableCodeObject * metadataObject = [metadataObjects objectAtIndex :0]; NSString *data = metadataObject.stringValue; NSData *strData = [data dataUsingEncoding:NSUTF8StringEncoding]; NSError *error1 = NULL; id result = [NSJSONSerialization JSONObjectWithData:strData options: NSJSONReadingMutableContainers|NSJSONReadingAllowFragments error:&error1]; }

创建扫码界面

#define MarginW (ScreenWidth-235)/2#define MarginH (ScreenHeight-235)/2- (void)setOverlayPickerView{    //左侧的view    UIImageView *leftView = [[UIImageView alloc] initWithFrame:CGRectMake(0, 0, MarginW, ScreenHeight)];    leftView.alpha = 0.5;    leftView.backgroundColor = [UIColor blackColor];    [self.view addSubview:leftView];    //右侧的view    UIImageView *rightView = [[UIImageView alloc] initWithFrame:CGRectMake(235+MarginW, 0, MarginW, ScreenHeight)];    rightView.alpha = 0.5;    rightView.backgroundColor = [UIColor blackColor];    [self.view addSubview:rightView];    //最上部view    UIImageView* upView = [[UIImageView alloc] initWithFrame:CGRectMake(MarginW, 0, ScreenWidth-2*MarginW, MarginH)];    upView.alpha = 0.5;    upView.backgroundColor = [UIColor blackColor];    [self.view addSubview:upView];    //底部view    UIImageView * downView = [[UIImageView alloc] initWithFrame:CGRectMake(MarginW, MarginH+235, (ScreenWidth-2*MarginW), MarginH)];    downView.alpha = 0.5;    downView.backgroundColor = [UIColor blackColor];    [self.view addSubview:downView];    UIImageView *centerView = [[UIImageView alloc] initWithFrame:CGRectMake(MarginW, MarginH, 235, 235)];    centerView.image = [UIImage imageNamed:@"scankuang.png"];    centerView.contentMode = UIViewContentModeScaleAspectFill;    centerView.backgroundColor = [UIColor clearColor];    [self.view addSubview:centerView];    UIImageView *line = [[UIImageView alloc] initWithFrame:CGRectMake(MarginW, MarginH, 235, 2)];    line.tag = line_tag;    line.image = [UIImage imageNamed:@"scanline"];    line.contentMode = UIViewContentModeScaleAspectFill;    line.backgroundColor = [UIColor clearColor];    [self.view addSubview:line];    UILabel *msg = [[UILabel alloc] initWithFrame:CGRectMake(MarginW, MarginH-60, ScreenWidth-2*MarginW, 60)];    msg.backgroundColor = [UIColor clearColor];    msg.textColor = [UIColor whiteColor];    msg.textAlignment = NSTextAlignmentCenter;    msg.font = [UIFont systemFontOfSize:16];    msg.text = @"将二维码放入框内,即可自动扫描";    [self.view addSubview:msg];}

转载地址:http://slnvb.baihongyu.com/

你可能感兴趣的文章
如何在Eclipse中为Java文本编辑器更改字体大小?
查看>>
我们应该@Override接口的方法实现吗?
查看>>
ng-repeat定义次数而不是重复数组?
查看>>
java项目之——坦克大战10
查看>>
java项目之——坦克大战11
查看>>
顶级域名注册分布统计:2006年09月 .com .de .net .uk .cn
查看>>
雅虎通可以批量添加MSN用户了
查看>>
C/C++题目--拷贝构造函数概念
查看>>
C/C++题目--深复制与浅复制
查看>>
数据结构教程--李春葆版(总结)之线性表-顺序存储结构练习题
查看>>
linux gdb的详细用法 运行与断点
查看>>
删除vector中重复元素
查看>>
和为s的连续正数序列
查看>>
什么是Redis?什么是nosql?NoSQL数据库的四大分类
查看>>
为什么说Redis是单线程的以及Redis为什么这么快!
查看>>
redis的过期健删除策略以及内存淘汰机制
查看>>
Mysql几种索引类型的区别及适用情况
查看>>
判断一个数组,是否可以分成两个数组之和相等的数组
查看>>
背包问题
查看>>
结构体变量之间的比较和赋值原理
查看>>