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"