iOS-二维码的生成
2016-11-05 本文已影响229人
指头飞血
上周公司做的无人售货机项目 要app下单 通过生成的二维码来扫描取货,用到了二维码的生成小技术,来和大家分享一下!!!
iOS7之后苹果集成了二维码的生成和读取功能,之前使用的神马zbarsdk目前不支持64位处理器,现在我们只需轻轻的导入CoreImage框架(Xcode6.4居然不用导入)就能把功能实现!废话不多说,开始搬砖...
1.首先导入CoreImage框架
ws.png2.代码的实现
*先懒加载一个相框
@property(nonatomic,strong)UIImageView *qrCodeImage;
//懒加载qrCodeImage
-(UIImageView *)qrCodeImage{
if (!_qrCodeImage) {
self.qrCodeImage = [[UIImageView alloc]initWithFrame:CGRectMake((self.view.frame.size.width - 100)/2, 150, 100, 100)];
}
return _qrCodeImage;
*通过滤镜CIFilter生成二维码
- (void)viewDidLoad {
[super viewDidLoad];
[self setTitle:@"生成二维码"];
[self.view addSubview:self.qrCodeImage];
[self.view setBackgroundColor:[UIColor whiteColor]];
// 1.创建滤镜
CIFilter *filter = [CIFilter filterWithName:@"CIQRCodeGenerator"];
// 2.还原滤镜默认属性
[filter setDefaults];
// 3.设置需要生成二维码的数据到滤镜中(OC中要求设置的是一个二进制数据)
NSData *data = [@"http://www.baidu.com" dataUsingEncoding:NSUTF8StringEncoding];//(这里的字符串就是用来生成二维码的,可直接复制代码只需修改这里如果没有其他需求)
[filter setValue:data forKeyPath:@"InputMessage"];
// 4.从滤镜从取出生成好的二维码图片
CIImage *ciImage = [filter outputImage];
self.qrCodeImage.image = [self createNonInterpolatedUIImageFormCIImage:ciImage size: 500];
}
*生成高清的二维码(不然弄死手机也扫描不出来...可能我手机太烂)
- (UIImage *)createhdUIImageFormCIImage:(CIImage *)ciImage size:(CGFloat)size
{
CGRect wsRect = CGRectIntegral(ciImage.extent);
CGFloat scale = MIN(size / CGRectGetWidth(wsRect), size / CGRectGetHeight(wsRect));
// 1.二维码基本设置
// 1.创建bitmap;
size_t width = CGRectGetWidth(wsRect) * scale;
size_t height = CGRectGetHeight(wsRect) * scale;
CGColorSpaceRef cs = CGColorSpaceCreateDeviceGray();
CGContextRef wsRef = CGBitmapContextCreate(nil, width, height, 8, 0, cs, (CGBitmapInfo)kCGImageAlphaNone);
CIContext *context = [CIContext contextWithOptions:nil];
CGImageRef wsImageRef = [context createCGImage:ciImage fromRect:wsRect];
CGContextSetInterpolationQuality(wsRef, kCGInterpolationNone);
CGContextScaleCTM(wsRef, scale, scale);
CGContextDrawImage(wsRef, wsRect, wsImageRef);
// 保存bitmap到图片
CGImageRef scaledImage = CGBitmapContextCreateImage(wsRef);
CGContextRelease(wsRef);
CGImageRelease(wsImageRef);
return [UIImage imageWithCGImage:scaledImage]; // 黑白图片(到这里已经结束了)
// UIImage *newImage = [UIImage imageWithCGImage:scaledImage];
// return [self imageBlackToTransparent:newImage withRed:1.0f andGreen:0.0f andBlue:0.0f];// 自定义颜色
}