高斯模糊图像 – iOS 8

我有一个移动的背景图像,我想模糊它的底部。 我只是用photoshop做,但是由于图片的移动,效果不太好。

这是我的意思(看图像的底部):

http://i.imgur.com/OT3vpeQ.png

所以基本上就像docker在iPhone上的效果一样。 我使用的是iOS 8,但不是Swift。

我已经根据你在那里的照片做了一个小例子。 我的algorithm如下:

  • 从底部提取图像的一部分。
  • 应用高斯filter并模糊它。
  • 然后,创build一个新的图像上下文,在其上绘制原始图像。
  • 然后,绘制图像的模糊部分,将其放置在原始图像上。
  • 从上下文中提取新的图像。

这里是一个源代码,

@implementation ViewController - (void)viewDidLoad{ [super viewDidLoad]; UIImageView *imageView = [[UIImageView alloc] init]; imageView.frame = self.view.bounds; [self.view addSubview:imageView]; imageView.contentMode = UIViewContentModeScaleAspectFit; UIImage *image = [UIImage imageNamed:@"monogram.jpg"]; imageView.image = [self imageWithBlurredImageWithImage: image andBlurInsetFromBottom: 200 withBlurRadius:3]; } - (UIImage*)imageWithBlurredImageWithImage:(UIImage*)image andBlurInsetFromBottom:(CGFloat)bottom withBlurRadius:(CGFloat)blurRadius{ UIGraphicsBeginImageContext(image.size); CGContextRef context = UIGraphicsGetCurrentContext(); CGContextScaleCTM(context, 1, -1); CGContextTranslateCTM(context, 0, -image.size.height); CGContextDrawImage(context, CGRectMake(0, 0, image.size.width, image.size.height), image.CGImage); CGContextDrawImage(context, CGRectMake(0, 0, image.size.width, bottom), [self blurImage: image withBottomInset: bottom blurRadius: blurRadius].CGImage); image = UIGraphicsGetImageFromCurrentImageContext(); UIGraphicsEndImageContext(); return image; } - (UIImage*)blurImage:(UIImage*)image withBottomInset:(CGFloat)inset blurRadius:(CGFloat)radius{ image = [UIImage imageWithCGImage: CGImageCreateWithImageInRect(image.CGImage, CGRectMake(0, image.size.height - inset, image.size.width,inset))]; CIImage *ciImage = [CIImage imageWithCGImage:image.CGImage]; CIFilter *filter = [CIFilter filterWithName:@"CIGaussianBlur"]; [filter setValue:ciImage forKey:kCIInputImageKey]; [filter setValue:@(radius) forKey:kCIInputRadiusKey]; CIImage *outputCIImage = filter.outputImage; CIContext *context = [CIContext contextWithOptions:nil]; return [UIImage imageWithCGImage: [context createCGImage:outputCIImage fromRect:ciImage.extent]]; } @end 

这里是结果的截图。

在这里输入图像说明

Interesting Posts