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

摘要:
今年发布的最新iOS 8也遵循了这一设计,即使在OSX10.10 Yosemite中,也使用了大量半透明的蓝光。在iOS开发中,我们有很多选项来实现半透明模糊效果。以下是一些常用的方法或工具。在我开发的iOS应用程序中,我选择vImage是为了性能,这并不意味着有一个非常准确的基准。以上是我对iOS上半透明模糊效果的整理。

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

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

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

c9866c580cedf926be750bb691252d21.png

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上实现半透明模糊效果实现的整理。

免责声明:文章转载自《[转]iOS开发使用半透明模糊效果方法整理》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇4个可以发送完整电子邮件的命令行工具ubuntu下配置3D显卡加速驱动下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

c++读写二进制文件

要读取文件必须包含<fstream>头文件,这里包含了C++读写文件的方法,可以使用fstream 类,这个类可以对文件进行读写操作。   1、打开文件。   打开文件可以有两种方式,第一种可以使用fstream 类的构造函数。 ios::in :输入文件(同ios_base::in) ios::out :输出文件(同ios_base::out...

.net core面试题

第1题,什么是ASP net core? 首先ASP net core不是 asp net的升级版本。它遵循了dot net的标准架构, 可以运行于多个操作系统上。它更快,更容易配置,更加模块化,可扩展性更强。   第2题,asp dot core有哪些好的功能? 第一是依赖注入。 第二是日志系统架构。 第三是引入了一个跨平台的网络服务器,kestrel。...

iOS 如何在一个已经存在多个project的workspace中引入cocoapods管理第三方类库

一) 具体方法在 iOS 如何在一个存在多个project的workspace中引入cocoapods管理第三方类库 二)Question && Solution Cocoapods 版本1.0.1 我在按上述链接转换的时候,遇到的问题: 1, [!] `xcodeproj` was renamed to `project`. Please...

iOS开发中使用[[UIApplication sharedApplication] openURL:]加载其它应用

iOS 应用程序之间(1) 在iOS开发中,经常需要调用其它App,如拨打电话、发送邮件等。UIApplication:openURL:方法是实现这一目的的最简单方法,该方法一般通过提供的url参数的模式来调用不同的App。   通过openURL方法可以调用如下应用:   调用谷歌地图(Google Maps) 调用邮件客户端(Apple Mail)...

利用pyinstaller打包加密Python项目

  最近用Python给媳妇写了两个小项目,给解决了她的每天重复的一些人工操作。媳妇很开心,但是问题来了,她是个Python小白,对她来说,需要安装配置Python环境和一大堆第三方模块是个麻烦事儿。而且后续把这些工作交接给别人的话,一是又需要重新安装Python环境,二是我辛苦给她写的源码就这样暴露了。   为了解决这个问题,于是就开始百度。果然Pyth...

CentOS 7 安装 .Net Core 2.0 详细步骤

        轰轰烈烈的Core 热潮,从部署环境开始。参照了网上不少前辈的教程,也遇到不少的坑,这边做个完整的笔记。 一、构建.Net core 2的应用程web发布,因为是用来测试centos上的core 环境,先直接用vs17自带的core实例。   发布   二、部署CentOS 7的core环境 1、连接并启动之前安装的虚拟机,“root”登...