美文网首页干货iOS移动开发iOS碎片
iOS开发使用半透明模糊效果方法整理

iOS开发使用半透明模糊效果方法整理

作者: ch32053 | 来源:发表于2014-12-23 13:57 被阅读3722次

本篇文章主要是对在iOS上做半透明模糊效果的开发实现做整理。

虽然iOS很早就支持使用模糊效果对图片等进行处理,但尤其在iOS7以后,半透明模糊效果得到大范围广泛使用。包括今年最新发布的iOS8也沿袭了这一设计,甚至在OS X 10.10版Yosemite中也开始大量使用半透明模糊。

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

1. 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”,这里有一个列表可以参看:
https://developer.apple.com/library/ios/documentation/GraphicsImaging/Reference/CoreImageFilterReference/index.html#//apple_ref/doc/filter/ci/CIGaussianBlur

除了这里提到的多种Filter之外,Core Image还提供了CIDetector等类,可以支持人脸识别等,在OS X上Core Image也做了更多支持。

2. GPUImage

除了苹果官方提供的之外,第三方也有这方面图片处理的工具。一个叫Brad Larson的老兄就搞了一套叫做GPUImage的开源库。同样的,里面提供了很多Filter。

https://github.com/BradLarson/GPUImage

同样是做高斯模糊,用GPUImage可以这样:

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

至少看起来,代码上比使用Core Image的情况简单得多。

3. vImage

其实,说完上面的Core Image和GPUImage,很多情况下就已经足够用了。下面我们再来看一个,那就是vImage。vImage也是苹果推出的库,在Accelerate.framework中。

Accelerate这个framework主要是用来做数字信号处理、图像处理相关的向量、矩阵运算的库。我们可以认为我们的图像都是由向量或者矩阵数据构成的,Accelerate里既然提供了高效的数学运算API,自然就能方便我们对图像做各种各样的处理。

基于vImage我们可以根据图像的处理原理直接做模糊效果,或者使用现有的工具。UIImage+ImageEffects是个很好的图像处理库,看名字也知道是对UIImage做的分类扩展。这个工具被广泛地使用着。

4. 性能与选择

既然已经知道了3个方法做到半透明模糊效果,那么我们要用的时候应该选择哪个呢?这是个问题。

  • 从系统版本的支持上来看,这几个都差不多,都是iOS4、iOS5就支持了的,对于身在iOS8时代的开发者,这点兼容已经够了。
  • Core Image是苹果自己的图像处理库,本来就不错,如果苹果自身在某个版本做了优化处理,自然更好。主要是用起来比较麻烦,还要知道Filter的名字。
  • GPUImage来自第三方,但实现开放,用起来也比较简单,在很多场景下是由于Core Image的选择。
  • 图像模糊处理是很复杂的计算,最终往往要看性能。这点上看,我更倾向选择vImage。

在本人开发的iOS应用中,选择了vImage,出发点是性能,这并不是说有非常精确的benchmark。但在几个调试时的主流机型上测,包括5c、5s等,在模糊半径(blur radius)达到10左右的时候,配合动画,vImage的处理时间会明显比较短,不会“卡顿”。

以上是本人对iOS上实现半透明模糊效果实现的整理。

参考:

转载自:http://www.molotang.com/articles/1921.html

相关文章

  • iOS开发使用半透明模糊效果方法整理

    iOS开发使用半透明模糊效果方法整理 iOS开发使用半透明模糊效果方法整理

  • iOS开发使用半透明模糊效果方法整理

    本篇文章主要是对在iOS上做半透明模糊效果的开发实现做整理。 虽然iOS很早就支持使用模糊效果对图片等进行处理,但...

  • iOS实现模糊效果的几种方法

    iOS7后,半透明模糊效果得到了广泛的使用,所以iOS开发过程中经常需要用到半透明模糊效果,本文对比列举几种实现半...

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

    虽然iOS很早就支持使用模糊效果对图片等进行处理,但尤其在iOS7以后,半透明模糊效果得到大范围广泛使用。包括最新...

  • iOS开发探索-高斯模糊&毛玻璃效果

    iOS开发中有的时候需要将图片设置模糊,来实现特定的效果获取更好的用户体验, iOS7之后半透明模糊效果得到大范围...

  • iOS的毛玻璃效果

    简要说明 毛玻璃(高斯模糊)效果是iOS开发中经常使用到的一个实现模糊效果的技能,实现这个效果有三种方法: 在iO...

  • Core Image 给图片加模糊效果

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

  • UIView动画合集

    iOS开发-UIView之动画效果的实现方法(合集) 前言:在开发APP中,我们会经常使用到动画效果。使用动画可以...

  • 高斯模糊

    高斯模糊 【iOS 开发】实现毛玻璃(高斯模糊)效果 - CocoaChina_让移动开发更简单

  • 图片高斯模糊效果

    iOS开发的时候有的时候需要将图片设置模糊,或者通过点击下拉方法,去除模糊。关于图片实现高斯模糊效果有三种方式,C...

网友评论

  • 5a3db39f0bd6:@wangyangyang 恩,是的,想问下你对coreImage滤镜那块熟悉吗?
  • ch32053:@DUALgu 现在程序要兼容iOS7的
  • 5a3db39f0bd6:你好苹果iOS8提供了UIeffecview最方便的实现模糊效果,而且还可以实现实时模糊,coreimage如果处理大图会很卡

本文标题:iOS开发使用半透明模糊效果方法整理

本文链接:https://www.haomeiwen.com/subject/ohratttx.html