0x00 CIFilter
一般都是把一个网址
生成一张二维码图片
废话少说
直接上代码
- (void)setupQRCodeImage:(NSString *)url
{
NSData *data = [url dataUsingEncoding:NSUTF8StringEncoding];
CIFilter *filter = [CIFilter filterWithName:@"CIQRCodeGenerator"];
[filter setValue:data forKey:@"inputMessage"];
[filter setValue:@"H" forKey:@"inputCorrectionLevel"];
CIImage *image = filter.outputImage;
_QRCodeImageView.image = [UIImage imageWithCIImage:image];
}
But!
展示的二维码图片
怎么是 模糊的?
这就尴尬了😓
0x01 重绘
产生模糊的原因
有可能是二维码本身很小
放在一张比较大的 UIImageView
里面
放大导致模糊了
既然很小
那就重新把它画大一些
让它的尺寸跟 UIImageView
的致
- (void)setupQRCodeImage:(NSString *)url
{
NSData *data = [url dataUsingEncoding:NSUTF8StringEncoding];
CIFilter *filter = [CIFilter filterWithName:@"CIQRCodeGenerator"];
[filter setValue:data forKey:@"inputMessage"];
[filter setValue:@"H" forKey:@"inputCorrectionLevel"];
CIImage *image = filter.outputImage;
// 直接赋值生成 UIImage,会模糊
//_QRCodeImageView.image = [UIImage imageWithCIImage:image];
// 重新绘制
CGImageRef cgImage = [[CIContext contextWithOptions:nil] createCGImage:image fromRect:image.extent];
UIGraphicsBeginImageContext(_QRCodeImageView.bounds.size);
CGContextRef context = UIGraphicsGetCurrentContext();
CGContextSetInterpolationQuality(context, kCGInterpolationNone);
CGContextScaleCTM(context, 1.0, -1.0);
CGContextDrawImage(context, CGContextGetClipBoundingBox(context), cgImage);
//
UIImage *QRCodeImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
CGImageRelease(cgImage);
_QRCodeImageView.image = QRCodeImage;
}
搞定!
0x02 我的作品
欢迎体验我的作品之一:小编辑器
在线编辑器
App Store
搜索即可~