#import "ViewController.h"
@interface ViewController ()
@property (weak, nonatomic) IBOutlet UIImageView *qrcodeView;
@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
}
-(void)touchesBegan:(NSSet*)touches withEvent:(UIEvent*)event
{
// 1.创建滤镜
CIFilter*filter = [ CIFilter filterWithName:@"CIQRCodeGenerator"];
// 2.清空滤镜(还原默认设置,因为滤镜有可能保存上一次的设置)
[filter setDefaults];
// 3.创建二维码需要保存的数据
NSData*data = [@"IOS开发很牛逼"dataUsingEncoding:NSUTF8StringEncoding];
// 4.设置数据(KVC)
[filter setValue:data forKey:@"inputMessage"];
// 5.生成二维码,获取生成后的二维码图片
CIImage*image = [filter outputImage];
self.qrcodeView.image= [self createNonInterpolatedUIImageFormCIImage:image withSize:400];
}
/**
*根据CIImage生成指定大小的UIImage
*
*@paramimage CIImage
*@paramsize图片宽度
*/
- (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];
}
网友评论