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
网友评论