1.导入#import <CoreImage/CoreImage.h>
2.创建一个@property (nonatomic, strong)UIImageView *imageView;
3.具体代码实现
`- (void)viewDidLoad {
[super viewDidLoad];
UIImageView *imageView = [[UIImageView alloc] init];
imageView.backgroundColor = [UIColor whiteColor];
[self.view addSubview:imageView];
[imageView mas_makeConstraints:^(MASConstraintMaker *make) {
make.size.mas_equalTo(CGSizeMake(150, 150));
make.center.mas_equalTo(self.view);
}];
// 实例化二维码滤镜
CIFilter *filter = [CIFilter filterWithName:@"CIQRCodeGenerator"];
// 恢复滤镜的默认属性
[filter setDefaults];
NSString *phoneNum =[YNUser currentUser].sa_mobile;
// 将字符串转换成NSdata
NSData *data = [phoneNum dataUsingEncoding:NSUTF8StringEncoding];
// 通过KVO设置滤镜, 传入data, 将来滤镜就知道要通过传入的数据生成二维码
[filter setValue:data forKey:@"inputMessage"];
// 设置 filter 容错等级
[filter setValue:@"M" forKey:@"inputCorrectionLevel"];
// 生成二维码
CIImage *outputImage = [filter outputImage];
imageView.image=[self createNonInterpolatedUIImageFormCIImage:outputImage withSize:200.0];
}
// 根据CIImage生成指定大小的UIImage
- (UIImage )createNonInterpolatedUIImageFormCIImage:(CIImage )image withSize:(CGFloat) size {
CGRect extent = CGRectIntegral(image.extent);
CGFloat scale = MIN(size/CGRectGetWidth(extent), size/CGRectGetHeight(extent));
// 创建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);
// 保存bitmap到图片
CGImageRef scaledImage = CGBitmapContextCreateImage(bitmapRef);
CGContextRelease(bitmapRef);
CGImageRelease(bitmapImage);
return [UIImage imageWithCGImage:scaledImage];
}
`
4.最终实现的效果如下: