iOS 开发中如何使用半透明模糊效果

虽然iOS很早就支持使用模糊效果对图片等进行处理,但尤为在iOS7之后,半透明模糊效果获得大范围普遍使用。包括最新发布的iOS8也沿袭了这一设计,甚至在OS X 10.10版Yosemite中也开始大量使用半透明模糊。
在iOS开发当中,咱们有不少选择能够作半透明模糊效果,下面就是一些常见的方式或者说工具。
0. Core Image

做为设计和体验方面的领导者,苹果本身对图片效果和图片处理的支持必定是很是好的,在iOS平台上,5.0以后就出现了Core Image的API。Core Image的API被放在CoreImage.framework库中。
在iOS和OS X平台上,Core Image都提供了大量的滤镜(Filter),这也是Core Image库中比较核心的东西之一。按照官方文档记载,在OS X上有120多种Filter,而在iOS上也有90多。
下面是一段Core Image作模糊的示例代码:
CIContext *context = [CIContext contextWithOptions:nil];
CIImage *image = [CIImage imageWithContentsOfURL:imageURL];
CIFilter *filter = [CIFilter filterWithName:@"CIGaussianBlur"];
[filter setValue:image forKey:kCIInputImageKey];
[filter setValue:@2.0f forKey: @"inputRadius"];
CIImage *result = [filter valueForKey:kCIOutputImageKey];
CGImageRef outImage = [context createCGImage: result fromRect:[result extent]];
UIImage * blurImage = [UIImage imageWithCGImage:outImage]
这里能够看到,Core Image为了作得比较灵活,Filter都是按字符串的名字去建立的,好比高斯模糊滤镜就是“CIGaussianBlur”
除了这里提到的多种Filter以外,Core Image还提供了CIDetector等类,能够支持人脸识别等,在OS X上Core Image也作了更多支持。

1. GPUImage

除了苹果官方提供的以外,第三方也有这方面图片处理的工具。一个叫Brad Larson的老兄就搞了一套叫作GPUImage的开源库。一样的,里面提供了不少Filter。
一样是作高斯模糊,用GPUImage能够这样:
GPUImageGaussianBlurFilter * blurFilter = [[GPUImageGaussianBlurFilter alloc] init];
blurFilter.blurRadiusInPixels = 2.0;
UIImage * image = [UIImage imageNamed:@"xxx"];
UIImage *blurredImage = [blurFilter imageByFilteringImage:image];
至少看起来,代码上比使用Core Image的状况简单得多。

2. vImage
其实,说完上面的Core Image和GPUImage,不少状况下就已经足够用了。下面咱们再来看一个,那就是vImage。vImage也是苹果推出的库,在Accelerate.framework中。
Accelerate这个framework主要是用来作数字信号处理、图像处理相关的向量、矩阵运算的库。咱们能够认为咱们的图像都是由向量或者矩阵数据构成的,Accelerate里既然提供了高效的数学运算API,天然就能方便咱们对图像作各类各样的处理。
基于vImage咱们能够根据图像的处理原理直接作模糊效果,或者使用现有的工具。UIImage+ImageEffects是个很好的图像处理库,看名字也知道是对UIImage作的分类扩展。这个工具在iOS开发中被普遍地使用着。

3. 性能与选择

既然已经知道了3个方法作到半透明模糊效果,那么咱们要用的时候应该选择哪一个呢?这是个问题。
从系统版本的支持上来看,这几个都差很少,都是iOS四、iOS5就支持了的,对于身在iOS8时代的开发者,这点兼容已经够了。
Core Image是苹果本身的图像处理库,原本就不错,若是苹果自身在某个版本作了优化处理,天然更好。主要是用起来比较麻烦,还要知道Filter的名字。
GPUImage来自第三方,但实现开放,用起来也比较简单,在不少场景下是因为Core Image的选择。
图像模糊处理是很复杂的计算,最终每每要看性能。这点上看,我更倾向选择vImage。
在iOS开发中,选择vImage,主要是从性能出发,这并非说有很是精确的benchmark。但在几个调试时的主流机型上测,包括5c、5s等,在模糊半径(blur radius)达到10左右的时候,配合动画,vImage的处理时间会明显比较短,不会“卡顿”。
以上是对iOS开发中实现半透明模糊效果实现的整理。工具

相关文章
相关标签/搜索