Man of few words said, directly on the code
/**
* According to the specified size CIImage generated UIImage
*
* @param image CIImage
* @Param size image width
*/
- (UIImage*)createNonInterpolatedUIImageFormCIImage:(CIImage*)image withSize:(CGFloat) size
{
CGRect extent = CGRectIntegral(image.extent);
CGFloatscale =MIN(size/CGRectGetWidth(extent), size/CGRectGetHeight(extent));
// 1. Create a 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. Save the bitmap to the picture
CGImageRef scaledImage = CGBitmapContextCreateImage(bitmapRef);
CGContextRelease(bitmapRef);
CGImageRelease(bitmapImage);
return [UIImage imageWithCGImage:scaledImage];
}
Call the above method
// filter 1. Examples of two-dimensional code
CIFilter *filter = [CIFilter filterWithName:@"CIQRCodeGenerator"];
// 2. Restore the default properties of the filter
[filtersetDefaults];
3. // string into NSData
NSString * urlStr = @ "http://www.ychpay.com/down.html"; // test two-dimensional code addresses, times two-dimensional code can not pay, with the need to address two-dimensional code server (with the back office staff with )
NSData *data = [urlStr dataUsingEncoding:NSUTF8StringEncoding];
// 4. inputMessage filter data provided by KVO
[filtersetValue:dataforKey:@"inputMessage"];
// The image obtained filter output
CIImage*outputImage = [filteroutputImage];
// 6. converted into the UIImage CIImage, and zoom (the two-dimensional code acquired at this time is vague, it is necessary to use the following method of redrawing createNonInterpolatedUIImageFormCIImage two-dimensional code)
// UIImage *codeImage = [UIImage imageWithCIImage:outputImage scale:1.0 orientation:UIImageOrientationUp];
UIImageView *wechatImageView = [[UIImageView alloc] initWithFrame:CGRectMake(40, 30, SCREEN_WIDTH - 80, SCREEN_WIDTH - 80)];
wechatImageView.image = [self createNonInterpolatedUIImageFormCIImage: outputImage withSize: 200]; // redraw two-dimensional code, it appears clear
[Self.viewaddSubview: wechatImageView];
Just replace your url url like
Reproduced in: https: //www.jianshu.com/p/aff05798f13b