转载:http://www.cocoachina.com/ios/20141223/10731.html

虽然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做模糊的示例代码:

1
2
3
4
5
6
7
8
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可以这样:

1
2
3
4
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做的分类扩展。这个工具被广泛地使用着。

3. 性能与选择

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

从系统版本的支持上来看,这几个都差不多,都是iOS4、iOS5就支持了的,对于身在iOS8时代的开发者,这点兼容已经够了。

Core Image是苹果自己的图像处理库,本来就不错,如果苹果自身在某个版本做了优化处理,自然更好。主要是用起来比较麻烦,还要知道Filter的名字。

GPUImage来自第三方,但实现开放,用起来也比较简单,在很多场景下是由于Core Image的选择。

图像模糊处理是很复杂的计算,最终往往要看性能。这点上看,我更倾向选择vImage。

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

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

转载于:https://www.cnblogs.com/yunis/p/4181700.html

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

  1. [转]iOS开发使用半透明模糊效果方法整理

    转自:http://www.molotang.com/articles/1921.html 虽然iOS很早就支持使用模糊效果对图片等进行处理,但尤其在iOS7以后,半透明模糊效果得到大范围广泛使用.包 ...

  2. iOS开发中常用的方法

    iOS开发中常用的方法 系统弹窗: 过期方法: UIAlertView *alertView = [[UIAlertView alloc]initWithTitle:@"确认报价" ...

  3. iOS开发所需英语词汇整理

    提示:双击可以打开文本copy 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 ...

  4. iOS开发-Umeng第三方登录-个人整理

    官方网址: http://dev.umeng.com/social/ios/operation#2 一.注册友盟账号 登陆友盟官网,在我的产品页面添加新应用,然后获取到Appkey. http://w ...

  5. iOS开发-Email的发送方法

    IOS系统框架提供的两种发送Email的方法:openURL 和 MFMailComposeViewController.借助这两个方法,我们可以轻松的在应用里加入如用户反馈这类需要发送邮件的功能. ...

  6. IOS开发之----常用加密方法

    本文转载至 http://blog.csdn.net/wildfireli/article/details/23191983 (AES.MD5.Base64) 分类: iPhone 2014-04-0 ...

  7. ios开发 html 字体模糊效果,CSS3实现苹果手机解锁的字体闪亮效果示例

    0.前言 2016年08月18日 今天看到注意到苹果手机的滑动解锁,提示字上会有一道白光闪过,感觉很炫酷,所以突然就来了兴致想要做一个当鼠标放在字体上(模拟手指)时,白光一闪而过,照亮字体的效果. 1 ...

  8. iOS开发 ☞ 那些最熟悉的陌生方法

    原文链接:http://blog.csdn.net/magicZYJ/article/details/51873894 1.addSubview 当我们调用 [superView addSubview ...

  9. iOS开发-UIColor转UIIamge方法

    只能说太神奇了,完美应用到我的毕业设计 - (UIImage*) createImageWithColor: (UIColor*) color {CGRect rect=CGRectMake(0,0, ...

最新文章

  1. 成都机场迎春运客流高峰 日均起降航班超1000架次
  2. 启动controller节点nova组件服务,报错ERROR 13
  3. Office 2010 Multi-language Pack download
  4. python三十六:shelve模块
  5. 蒙特卡罗(Monte Carlo)方法
  6. BZOJ 4422 (线段树、DP、扫描线、差分)
  7. idea中Terminal终端无法执行GIT命令
  8. matlab求根的原程序,MATLAB求根程序求帮助
  9. 自定义异常throw
  10. vant组件做表格_落户上海!分享心得,再做个积分计算器
  11. kotlin 泛型约束
  12. 在IE浏览器中url传参长度问题
  13. 理解Python中的with…as…语法
  14. 2016推免面试经历纪实——四川大学计算机学院
  15. js中的json和ascii转换
  16. spire.doc 让java操作word文档更简单优雅
  17. 5G网下通过网络编码增强转发策略的NDN物联网内容分发模型
  18. (转)tensorflow入门教程(二十六)人脸识别(上)
  19. 2022 CCF中国软件大会(CCF Chinasoft)“面向人工智能的边缘计算技术”论坛成功召开...
  20. php如何实现备忘录,备忘录模式及php实现

热门文章

  1. php mysql事务处理回滚操作
  2. DevOps笔记-03:DevOps可以给我们带来什么?
  3. USB、TTL电平、232电平之间的相互转换
  4. 10.STM32中用I2C接口发送数据到EEPROM寄存器在从此寄存器读数据
  5. mybaits十二:使用collection嵌套结果集查询
  6. csdn将文章添加到专栏
  7. ReactOS 0.0.21从开机启动,到加载驱动的过程
  8. 云计算开发技术,Python自动化运维开发实战三部分
  9. python之路---09 初始函数 参数
  10. springcloud(四):熔断器Hystrix