模糊效果
主要使用的方法有:
截屏
- (UIImage *)takeSnapshotOfView:(UIView *)view
{
CGFloat reductionFactor = 1;
UIGraphicsBeginImageContext(CGSizeMake(view.frame.size.width/reductionFactor, view.frame.size.height/reductionFactor));
[view drawViewHierarchyInRect:CGRectMake(0, 0, view.frame.size.width/reductionFactor, view.frame.size.height/reductionFactor) afterScreenUpdates:YES];
UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
return image;
}
处理图片,使模糊,此教程介绍了3中方法:
使用Core Image framework
- (UIImage *)blurWithCoreImage:(UIImage *)sourceImage { CIImage *inputImage = [CIImage imageWithCGImage:sourceImage.CGImage]; // Apply Affine-Clamp filter to stretch the image so that it does not look shrunken when gaussian blur is applied CGAffineTransform transform = CGAffineTransformIdentity; CIFilter *clampFilter = [CIFilter filterWithName:@"CIAffineClamp"]; [clampFilter setValue:inputImage forKey:@"inputImage"]; [clampFilter setValue:[NSValue valueWithBytes:&transform objCType:@encode(CGAffineTransform)] forKey:@"inputTransform"]; // Apply gaussian blur filter with radius of 30 CIFilter *gaussianBlurFilter = [CIFilter filterWithName: @"CIGaussianBlur"]; [gaussianBlurFilter setValue:clampFilter.outputImage forKey: @"inputImage"]; [gaussianBlurFilter setValue:@30 forKey:@"inputRadius"]; CIContext *context = [CIContext contextWithOptions:nil]; CGImageRef cgImage = [context createCGImage:gaussianBlurFilter.outputImage fromRect:[inputImage extent]]; // Set up output context. UIGraphicsBeginImageContext(self.view.frame.size); CGContextRef outputContext = UIGraphicsGetCurrentContext(); CGContextScaleCTM(outputContext, 1.0, -1.0); CGContextTranslateCTM(outputContext, 0, -self.view.frame.size.height); // Draw base image. CGContextDrawImage(outputContext, self.view.frame, cgImage); // Apply white tint CGContextSaveGState(outputContext); CGContextSetFillColorWithColor(outputContext, [UIColor colorWithWhite:1 alpha:0.2].CGColor); CGContextFillRect(outputContext, self.view.frame); CGContextRestoreGState(outputContext); // Output image is ready. UIImage *outputImage = UIGraphicsGetImageFromCurrentImageContext(); UIGraphicsEndImageContext(); return outputImage; }
使用Brad Larson的 GPUImage framework
- (UIImage *)blurWithGPUImage:(UIImage *)sourceImage { GPUImageGaussianBlurFilter *blurFilter = [[GPUImageGaussianBlurFilter alloc] init]; blurFilter.blurRadiusInPixels = 30.0; // GPUImageBoxBlurFilter *blurFilter = [[GPUImageBoxBlurFilter alloc] init]; // blurFilter.blurRadiusInPixels = 20.0; // GPUImageiOSBlurFilter *blurFilter = [[GPUImageiOSBlurFilter alloc] init]; // blurFilter.saturation = 1.5; // blurFilter.blurRadiusInPixels = 30.0; return [blurFilter imageByFilteringImage: sourceImage]; }
使用 Apple的
UIImage+ImageEffect
s category- (UIImage *)blurWithImageEffects:(UIImage *)image { return [image applyBlurWithRadius:30 tintColor:[UIColor colorWithWhite:1 alpha:0.2] saturationDeltaFactor:1.5 maskImage:nil]; }