转自:http://www.molotang.com/articles/1921.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/gatsbywang/p/5152971.html

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

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

    转载:http://www.cocoachina.com/ios/20141223/10731.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. 运行php能运行asp么,配置使web server即能运行asp又能运行PHP(不装Apache)
  2. java qq登陆api_java方式接入QQ登录
  3. 中文论文万能句型_SCI 论文写作万能句型汇总(很实用)
  4. 网站长尾关键词优化有门道!
  5. HTTP的请求头标签 If-Modified-Since与Last-Modified 相等就是200新的请求 不等就是304没有变化
  6. 第二篇|腾讯开源项目盘点:ncnn、xLua、libco等
  7. mpvue微信小程序http请求-fly.js
  8. python中if语句最多支持的分支是_Python多分支if语句的使用
  9. android获取详细地址,Android获取当前子网掩码地址(亲测可用)
  10. SparkSql学习笔记(包含IDEA编写的本地代码)
  11. 如何解决在Windows Server 2008 R2 上安装证书服务重启后出现 CertificationAuthority 91错误事件...
  12. POJ 1066 Treasure Hunt(计算几何)
  13. 服务器中有大量CLOSE_WAIT的连接
  14. Java并发编程实战——并发编程的优缺点
  15. 基于遗传算法的TSP算法
  16. 索尼koov机器人比赛_搭上“想象”去成长 索尼KOOV可编程教育机器人评测
  17. 【论文解读 AAAI 2020】Graph-Based Reasoning over Heterogeneous External Knowledge for 常识问答
  18. 输入在第一行中给出一个正整数n(1)。第二行输入n个整数,用空格分开。在一行中输出最大值及最大值的最小下标,中间用一个空格分开。
  19. Python的PyOpenGL
  20. gcrobustvar:基于VAR的稳健性Granger因果检验

热门文章

  1. 2017职称英语和计算机考试,2017年职称英语考试取消了吗
  2. vue-cli3构建项目时elementUI按需引入问题
  3. 合同电子档备份-NXCRM客户管理系统v2.2.5
  4. 小程序功能模块-飞鱼知识变现小程序2.5.3源码
  5. 品牌设计工作室html5模板
  6. 最新Linux之Nacos高可用集群配置
  7. SpringCloud Hoxton版微服务-入门篇
  8. 一个XP使用者眼中的Windows 7
  9. jquery:使用 SoundManager 2 创建简单的网页音频播放器
  10. Google AdWords广告的12个技巧