UIImage *getNewQRCodeImageFromString(NSString *url, CIColor *frontColor, CIColor *backColor){
// 1. 创建一个二维码滤镜实例(CIFilter)
CIFilter *filter = [CIFilter filterWithName:@"CIQRCodeGenerator"];
// 滤镜恢复默认设置
[filter setDefaults];
// 2. 给滤镜添加数据
NSData *data = [url dataUsingEncoding:NSUTF8StringEncoding];
// 使用KVC的方式给filter赋值
[filter setValue:data forKeyPath:@"inputMessage"];
//二维码容错级别选择H,容错级别:L(7%)、M(15%)、Q(25%)、H(30%)
[filter setValue:@"H" forKey:@"inputCorrectionLevel"];
// 3. 生成二维码
CIImage *qrImage = [filter outputImage];
// 4. 增加颜色滤镜
CIFilter *colorFilter = [CIFilter filterWithName:@"CIFalseColor"];
[colorFilter setDefaults];
[colorFilter setValue:qrImage forKey:kCIInputImageKey];
// 设定前景色
[colorFilter setValue:frontColor forKey:@"inputColor0"];
// 设定背景色
[colorFilter setValue:backColor forKey:@"inputColor1"];
CIImage *colorImage = colorFilter.outputImage;
// 5. 生成的二维码太过模糊,需要优化二维码的显示清晰度
//方法一
CGFloat width = 300;
CGFloat height = 300;
CGFloat scale = width/colorImage.extent.size.width;
UIImage *finalQRImage = [UIImage imageWithCIImage:[colorImage imageByApplyingTransform:CGAffineTransformMakeScale(scale, scale)]];
// 添加到Container
UIView *containerView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, width, height)];
containerView.backgroundColor = [UIColor whiteColor];
UIImageView *imageView = [[UIImageView alloc] initWithFrame:CGRectMake(0, 0, width, height)];
imageView.image = finalQRImage;
[containerView addSubview:imageView];
UIImageView *logo = [[UIImageView alloc] initWithFrame:CGRectMake(0,0,0.3*width,0.3*width)];
logo.center = CGPointMake(width/2, height/2);
logo.image = getImageWithName(@"weixinfenxiang_120x120");
[containerView addSubview:logo];
UIGraphicsBeginImageContextWithOptions(containerView.bounds.size, NO, 0.0);
[containerView.layer renderInContext:UIGraphicsGetCurrentContext()];
[containerView drawViewHierarchyInRect:containerView.bounds afterScreenUpdates:NO];
UIImage *img = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
return img;
}
UIImage *codeImage = getNewQRCodeImageFromString(codeUrl,[CIColor colorWithRed:0 green:0 blue:0],[CIColor colorWithRed:1 green:1 blue:1]);