美文网首页iOS开发
iOS二维码生成与读取识别

iOS二维码生成与读取识别

作者: 进阶的蚊子 | 来源:发表于2017-09-25 14:59 被阅读243次

在如今的开发中经常会遇到二维码生成和二维码读取很是识别的需求网上也有一些封装好的第三方的,但是楼主还是觉得自己写一遍能加深理解,于是楼主花了点空闲时间整理查看了二维码相关的一些知识,分享给需要的盆友.

1 二维码生成

废话不多说先上代码

//通过CIFilter创建二维码
//使用CIFilter很简单,直接传入生成二维码的字符串即可 生成CIImage对象
-(CIImage)createQRImageWithString:(NSString)qrString
{
//先编码 成NSData
NSData* data=[qrString dataUsingEncoding:(NSUTF8StringEncoding)];
//创建CFFliter 实例
//CIImage 是Core Image的图片数据类
//CIFilter是 Core Image滤镜类
CIFilter* filter=[CIFilter filterWithName:@"CIQRCodeGenerator"];
//设置内容
[filter setValue:data forKey:@"inputMessage"];

//设置纠错级别
[filter setValue:@"H" forKey:@"inputCorrectionLevel"];
//[filter setDefaults];

return filter.outputImage;

}

//调整大小并且转换成UIImage类型
-(UIImage )resetCodeImage:(CIImage)image WithSize:(CGSize)size
{
//获取图片数据
CGRect extent=CGRectIntegral(image.extent);
//宽度比例
CGFloat scaleWidth=size.width/CGRectGetWidth(extent);

//高度比例
CGFloat scaleHeight =size.height/CGRectGetHeight(extent);

CGFloat scale = MIN( scaleWidth, scaleHeight);

// 创建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:@{kCIContextUseSoftwareRenderer : @(YES)}];
CGImageRef bitmapImage = [context createCGImage:image fromRect:extent];
CGContextSetInterpolationQuality(bitmapRef, kCGInterpolationNone);
CGContextScaleCTM(bitmapRef, scale, scale);
CGContextDrawImage(bitmapRef, extent, bitmapImage);

// 保存bitmap到图片
CGImageRef scaledImage = CGBitmapContextCreateImage(bitmapRef);
CGContextRelease(bitmapRef);
CGImageRelease(bitmapImage);

return [UIImage imageWithCGImage:scaledImage];

}

//调用方法 self.qrView为一个ImageView

//生成二维码图片
-(void)makeImage
{
CIImage* image=[self createQRImageWithString:@"http://www.baidu.com"];
CGSize size=CGSizeMake(100, 100);
UIImage* img= [self resetCodeImage:image WithSize:size];

self.qrView.image=img;

}

效果图

05E383BB-81C7-4616-BE0A-F3D92E16463A.png

2 二维码读取和识别

  • (IBAction)readClick:(UIButton *)sender {
    //识别二维码
    UIImage *im=self.readImage.image;

    NSArray *array = [self readQRCodeInfoWithImage:im];
    // 显示二维码中的信息
    NSMutableString *str = [[NSMutableString alloc] init];

[array enumerateObjectsUsingBlock:^(id  _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {
    CIQRCodeFeature *temp = (CIQRCodeFeature *)obj;
    [str appendFormat:@"地址:%@",temp.messageString];
}];
NSLog(@"-----信息  ---%@",str);

}

结果和截图

2017-09-25 14:57:01.210824+0800 二维码生成与读取[3594:1340486] 获取到的features = (
"<CIQRCodeFeature: 0x6040000dcaf0>"
)
2017-09-25 14:57:01.211148+0800 二维码生成与读取[3594:1340486] +++++msg = http://www.baidu.com
2017-09-25 14:57:01.211353+0800 二维码生成与读取[3594:1340486] -----信息 ---地址:http://www.baidu.com

相关文章

  • iOS 花式二维码生成和二维码识别

    iOS 花式二维码生成和二维码识别 iOS 花式二维码生成和二维码识别

  • 二维码

    二维码 二维码的生成和读取-生成二维码:就是讲给定的信息,将其按照二维码的编码方式生成一张图片-读取二维码:识别二...

  • 实用技术第1篇——如何生成和读取二维码【上】

    前言 苹果官方从iOS7开始集成了二维码的生成和读取功能,本文简单介绍下如何生成和读取二维码。 如何生成二维码 步...

  • iOS二维码生成与读取识别

    在如今的开发中经常会遇到二维码生成和二维码读取很是识别的需求网上也有一些封装好的第三方的,但是楼主还是觉得自己写一...

  • golang如何生成与读取二维码

    golang如何生成与读取二维码 生成二维码 skip2/go-qrcode生成二维码 获取: 生成二维码图片: ...

  • iOS 二维码

    1、二维码的生成 CoreImage 生成从iOS7开始集成了二维码的生成和读取功能此前被广泛使用的zbarsdk...

  • iOS 图片转换二维码

    二维码 1.ios7开始集成了二维码的生成和读取功能 2.生成二维码的步骤 3.二维码的内容:「纯文本」 「名片」...

  • macOS实现二维码图片生成及识别

    参考: iOS生成二维码(中间包含图片),长按识别二维码(Swift) Core Image 介绍 网上世界,QR...

  • 简单二维码的生成

    1.iOS7以后,开始集成了二维码的生成和读取功能2.生成二维码的步骤:导入CoreImage框架通过滤镜CIFi...

  • 【iOS】二维码生成及定制

    【iOS】二维码生成及定制 【iOS】二维码生成及定制

网友评论

    本文标题:iOS二维码生成与读取识别

    本文链接:https://www.haomeiwen.com/subject/ayarextx.html