iOS 图片模糊效果

1. CoreImage中的模糊滤镜

高斯模糊效果图

  • 高斯模糊前后对比.png

核心代码

 UIImage *image = [UIImage imageNamed:@"cat.jpg"];
 //图片输入源
 CIImage *ciImage = [[CIImage alloc] initWithImage:image];
 
 //滤镜
 CIFilter *filter = [CIFilter filterWithName:@"CIGaussianBlur"];
 //滤镜参数及相关信息
 //NSLog(@"%@", [filter attributes]);
 //设置模糊程度
 [filter setValue:@(5) forKey:@"inputRadius"];
 //将图片输入到滤镜中
 [filter setValue:ciImage forKey:kCIInputImageKey];
 //从滤镜中取出处理好的图片
 CIImage *outImage = [filter valueForKey:kCIOutputImageKey];
 //默认CPU渲染
 CIContext *content = [CIContext contextWithOptions:nil];
 
 //获取CGImage句柄
 CGImageRef cgImage = [content createCGImage:outImage fromRect:[outImage extent]];
 
 UIImage *blurImage = [UIImage imageWithCGImage:cgImage];
 CGImageRelease(cgImage);
 
 self.iv.image = blurImage;

2. UIImage+ImageEffects的category模糊效果

UIImage+ImageEffects是Accelerate框架中的内容

  • 效果图.png

核心代码

 UIImage *image = [UIImage imageNamed:@"cat.jpg"];
 static int i = 0;
 UIImage *blurImage = nil;
 if (i == 0) {
     blurImage = [image blurImage];
 }else if (i == 1) {
     blurImage = [image blurImageAtFrame:(CGRectMake(self.view.center.x, self.view.center.x, 300, 200))];
 }else if (i == 2) {
     blurImage = [image grayScale];
 }else {
     i = -1;
     blurImage = image;
 }
 self.iv.image = blurImage;
 i++;

category地址YouXianMing/UIImageBlur

3. UIVisualEffectView模糊效果

UIVisualEffectView的模糊效果是即时渲染的

  • 模糊子View.png

核心代码

//1.创建模糊View
 UIBlurEffect *blur = [UIBlurEffect effectWithStyle:(UIBlurEffectStyleDark)];
 UIVisualEffectView *effectView = [[UIVisualEffectView alloc] initWithEffect:blur];
 //2.设定尺寸
 effectView.frame = CGRectMake(50, 150, 300, 150);
 //3.添加到view中
 [self.view addSubview:effectView];
 
 UILabel *label = [[UILabel alloc] initWithFrame:effectView.bounds];
 label.font = [UIFont systemFontOfSize:40.0f];
 label.text = @"极客学院";
 label.textColor = [UIColor redColor];
 label.textAlignment = NSTextAlignmentCenter;

//添加到effectView的contentView中子视图label并没有模糊
//[effectView.contentView addSubview:label];
 
 //模糊子视图label
 UIVibrancyEffect *brancy = [UIVibrancyEffect effectForBlurEffect:(UIBlurEffect *)effectView.effect];
 UIVisualEffectView *subEffectView = [[UIVisualEffectView alloc] initWithEffect:brancy];
 subEffectView.frame = effectView.bounds;
 [effectView.contentView addSubview:subEffectView];
 [subEffectView.contentView addSubview:label];     

如需了解更多,请参考Demo

你可能感兴趣的:(iOS 图片模糊效果)