Core Image 给图片加模糊效果

在iOS开发当中,我们有很多选择可以做半透明模糊效果,下面就是一些常见的方式或者说工具。
1. Core Image

Core Image是苹果自己的图像处理库,它的API被放在CoreImage.framework库中。
Core Image提供了大量的滤镜(Filter),在iOS上有90多种Filter. Core Image在创建Filter时是使用字符串的名字去创建的,这里有一个官方列表可以参看。

- (UIImage *)blurryImage:(UIImage *)image withBlurLevel:(CGFloat)blur {
           CIImage *inputImage = [CIImage imageWithCGImage:image.CGImage];
           CIFilter *filter = [CIFilter filterWithName:@"CIGaussianBlur" 
                                        keysAndValues:kCIInputImageKey, inputImage, @"inputRadius", @(blur), nil];
           CIImage *outputImage = filter.outputImage;
           CIContext *context = [CIContext contextWithOptions:nil];
           CGImageRef outImage = [context createCGImage:outputImage fromRect:[outputImage extent]];
           UIImage *blurImage = [UIImage imageWithCGImage:outImage];
           CGImageRelease(outImage);
           return blurImage;
}

2. GPUImage

除了苹果官方提供的之外,第三方也有这方面图片处理的工具。一个叫Brad Larson的老兄就搞了一套叫做GPUImage的开源库。同样的,里面提供了很多Filter。
同样是做高斯模糊,代码上比使用Core Image的情况简单得多。

  GPUImageGaussianBlurFilter * blurFilter = [[GPUImageGaussianBlurFilter alloc] init];
  blurFilter.blurRadiusInPixels = 2.0;
  UIImage * image = [UIImage imageNamed:@"xxx"];
  UIImage *blurredImage = [blurFilter imageByFilteringImage:image];

3. vImage

vImage也是苹果推出的库,在Accelerate.framework中。
Accelerate这个framework主要是用来做数字信号处理、图像处理相关的向量、矩阵运算的库。我们可以认为我们的图像都是由向量或者矩阵数据构成的,Accelerate里既然提供了高效的数学运算API,自然就能方便我们对图像做各种各样的处理。
基于vImage我们可以根据图像的处理原理直接做模糊效果,或者使用现有的工具。UIImage+ImageEffects是个很好的图像处理库,看名字也知道是对UIImage做的分类扩展。这个工具被广泛地使用着。

UIImageView *me = [[UIImageView alloc] initWithFrame:CGRectMake(10, 480, 614 ,381)]; 
[me setImage:[[UIImage imageNamed:@"me.png"] applyBlurWithRadius:5 
                                             tintColor:[UIColor colorWithWhite:1 alpha:0.2] 
                                             saturationDeltaFactor:1.8 
                                             maskImage:nil]]; 
[self.view addSubview:me];

你可能感兴趣的:(Core Image 给图片加模糊效果)