iOS-实现滤镜效果的四种方式

本文介绍了在iOS中实现滤镜效果的四种方法:CIFilter、GPUImage、vImage API以及UIVisualEffectView。通过代码示例展示了如何使用这些技术进行图片处理,特别提到了GPUImage的简洁语法和vImage的高性能。文章还讨论了不同方法的性能和适用场景,并建议在考虑性能时首选vImage,而iOS8及以上版本推荐使用UIVisualEffectView实现毛玻璃效果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

demo地址:

https://github.com/AbeDay/ios–.git


使用CIFilter来完成IOS中滤镜效果

在IOS中可以使用系统自带的方法来达到路径效果:需要用到的类为:CIContext, CIImage, CIFilter

使用CIFilter实现滤镜效果的方法步骤如下:
1.创建图像上下文CIContext

    ​2.创建过滤原图片CIImage

    ​3.创建滤镜CIFilter

    ​4.调用CIFilter的setValue: forKey:方法为滤镜指定源图片

    ​5.设置滤镜参数【可选】

    ​6.取得输出图片显示或保存
下面是一个简单的代码例子:
     //获取毛玻璃图片
    self.orignalImage = [CIImage imageWithContentsOfURL:[[NSBundle mainBundle] URLForResource:@"image1" withExtension:@"png"]];
    //获取滤镜,并设置(使用KVO键值输入)
    CIFilter *filter = [CIFilter filterWithName:@"CIGaussianBlur" keysAndValues:@"inputImage", self.orignalImage, @"inputRadius", @1.0f, nil];
    //从滤镜中获取图片
    CIImage *result = filter.outputImage;
    self.filterImage = [UIImage imageWithCIImage:result];
    //将图片添加到filterImageView上
    self.filterImageView.image = filterImage;
注意:

在iOS和OS X平台上,Core Image都提供了大量的滤镜(Filter),这也是Core Image库中比较核心的东西之一。按照官方文档记载,在OS X上有120多种Filter,而在iOS上也有90多。可以通过查看官方文档,来查看相应效果需要参数数据:
https://developer.apple.com/library/mac/documentation/GraphicsImaging/Reference/CoreImageFilterReference/#//apple_ref/doc/filter/ci/CIGaussianBlur


使用GPUImage来完成IOS中滤镜效果

除了苹果官方提供的之外,第三方也有这方面图片处理的工具。一个叫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的情况简单得多。

在使用这个库在完成滤镜的时候,我们可以使用下面的两种方式来完成:

1. 官方比较详细的操作方法:
UIImage *inputImage = [UIImage imageNamed:@"Lambeau.jpg"];

GPUImagePicture *stillImageSource = [[GPUImagePicture alloc] initWithImage:inputImage];
GPUImageSepiaFilter *stillImageFilter = [[GPUImageSepiaFilter alloc] init];

[stillImageSource addTarget:stillImageFilter];
[stillImageFilter useNextFrameForImageCapture];
[stillImageSource processImage];

UIImage *currentFilteredVideoFrame = [stillImageFilter imageFromCurrentFramebuffer];
2. 针对当个的滤镜操作方法:
GPUImageSepiaFilter *stillImageFilter2 = [[GPUImageSepiaFilter alloc] init];
UIImage *quickFilteredImage = [stillImageFilter2 imageByFilteringImage:inputImage];
GPUImage库的详细使用看github上的文档:

GPUImage库可以完成许多操作,比如拍照时使用滤镜,录像时使用滤镜等……下面是github上的网址,可以参考https://github.com/BradLarson/GPUImage

这边有一个别人归纳的比较好的GPUImage滤镜总结:
// Base classes
#import "GPUImageOpenGLESContext.h"
#import "GPUImageOutput.h"
#import "GPUImageView.h"
#import "GPUImageVideoCamera.h"
#import "GPUImageStillCamera.h"
#import "GPUImageMovie.h"
#import "GPUImagePicture.h"
#import "GPUImageRawDataInput.h"
#import "GPUImageRawDataOutput.h"
#import "GPUImageMovieWriter.h"
#import "GPUImageFilterPipeline.h"
#import "GPUImageTextureOutput.h"
#import "GPUImageFilterGroup.h"
#import "GPUImageTextureInput.h"
#import "GPUImageUIElement.h"
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值