? ? // 1.創(chuàng)建過濾器
? ? CIFilter *filter = [CIFilter filterWithName:@"CIQRCodeGenerator"];
? ? // 2.恢復默認
? ? [filtersetDefaults];
? ? // 3.給過濾器添加數(shù)據(jù)
? ? NSString *dataString = @"http://www.baidu.com";
? ? NSData *data = [dataString dataUsingEncoding:NSUTF8StringEncoding];
? ? [filtersetValue:dataforKeyPath:@"inputMessage"];
? ? // 4.獲取輸出的二維碼
? ? CIImage*outputImage = [filteroutputImage];
? ? // 5.將CIImage轉(zhuǎn)換成UIImage,并放大顯示
? ? self.imageView.image = [self createNonInterpolatedUIImageFormCIImage:outputImage withSize:200];
*************************************************************
上面代碼生成的二維碼圖片比較虛,下面這個方法重繪二維碼,讓二維碼更清晰
*************************************************************
/**
?*? 根據(jù)CIImage生成指定大小的UIImage
?*
?*? @param image CIImage
?*? @param size 圖片寬度
?*/
- (UIImage*)createNonInterpolatedUIImageFormCIImage:(CIImage*)image withSize:(CGFloat) size
{
? ? CGRect extent = CGRectIntegral(image.extent);
? ? CGFloatscale =MIN(size/CGRectGetWidth(extent), size/CGRectGetHeight(extent));
? ? // 1.創(chuàng)建bitmap;
? ? size_twidth =CGRectGetWidth(extent) * scale;
? ? size_theight =CGRectGetHeight(extent) * scale;
? ? CGColorSpaceRef cs = CGColorSpaceCreateDeviceGray();
? ? CGContextRef bitmapRef = CGBitmapContextCreate(nil, width, height, 8, 0, cs, (CGBitmapInfo)kCGImageAlphaNone);
? ? CIContext *context = [CIContext contextWithOptions:nil];
? ? CGImageRefbitmapImage = [contextcreateCGImage:imagefromRect: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];
}