美文网首页
iOS生成一个比较清晰的二维码

iOS生成一个比较清晰的二维码

作者: i得深刻方得S | 来源:发表于2016-08-11 09:19 被阅读28次

1.代码如下,其中可以将第二个函数单独抽成一个分类

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event

{

// 1.创建过滤器

CIFilter *filter = [CIFilter filterWithName:@"CIQRCodeGenerator"];

// 2.恢复默认

[filter setDefaults];

// 3.给过滤器添加数据(正则表达式/账号和密码)

NSString *dataString = @"http://www.520it.com";

NSData *data = [dataString dataUsingEncoding:NSUTF8StringEncoding];

[filter setValue:data forKeyPath:@"inputMessage"];

// 4.获取输出的二维码

CIImage *outputImage = [filter outputImage];

// 5.显示二维码

self.imageView.image = [self createNonInterpolatedUIImageFormCIImage:outputImage withSize:200];

}

- (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];

}

相关文章

网友评论

      本文标题:iOS生成一个比较清晰的二维码

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