您的位置:首页 > 移动开发 > IOS开发

iOS中的CoreImage框架

2016-09-07 16:21 363 查看
Core Image是iOS中的图像处理框架,使用上比较简单方便,常用于照片的滤镜处理,还有就是面部检测(没有识别)等用途。

CoreImage框架里主要包括以下几个我们常用的模块:

CIImage:这是代表图像的类。

CIFilter:代表滤镜的一个类,能够通过key-value来设置输入值,用于为CIImage添加滤镜。

CIContext:用于渲染CIImage。

CIDetector:用于分析CIImage,得到CIFeature。

CIFeature\CIFaceFeature:这部分主要用于面部检测等应用。

在使用CoreImage的时候,处理流程比较简单,基本流程如下:

初始化CIImage;

初始化滤镜CIFilter,通过键-值编码设置输入值。(也就是设置什么滤镜)

将图片输入到滤镜当中;

将处理好的图片输出;

初始化CIContext;

通过CIContext获取到CGImage句柄,最终获取到图片;如CIContext是基于GPU的,可以用Open ES 2.0画出来;

使用完后,记得释放CGImageRef;

下面有一个为图片加上高斯模糊的例子:

UIImage *image = [UIImage imageNamed:@"cat.jpg"];

//coreImage使用部分
CIImage *ciImage = [[CIImage alloc] initWithImage:image];

//选择高斯模糊滤镜
CIFilter *blurFilter = [CIFilter filterWithName:@"CIGaussianBlur"];
//将图片输入到滤镜
[blurFilter setValue:ciImage forKey:kCIInputImageKey];
//输出图像
CIImage *outCiImage = [blurFilter valueForKey:kCIOutputImageKey];
CIContext *ciContext = [CIContext contextWithOptions:nil];
CGImageRef outCGImage = [ciContext createCGImage:outCiImage fromRect[outCiImage extent]];
//最终图片
UIImage *blurImage = [UIImage imageWithCGImage:outCGImage];
//释放
CGImageRelease(outCGImage);


效果如下:

原始图像(喵^-^):



高斯模糊后的图片:



如果要设置模糊程度,即在将图片输入滤镜后,修改滤镜的值就是了,如:

//设置滤镜的模糊程度,是采用kvc的形式
[blurFilter setValue:@(100) forKey:kCIInputRadiusKey];

//要查看有哪些属性可以设置,可以打印出属性来查看
NSLog(@"%@",[blurFilter attributes]);


Log出来的属性信息:



这里面可以看到,在上面设置滤镜的图片的时候用的kCIOutputImageKey对应的就是inputImage那个字段;而下面inputRadius就是可以调节模糊程度的,告诉了这个值的一些信息,如类型、默认值、描述等,一般带input的字段就可以设置值来调节了,所以对应着就是设置kCIInputRadiusKey值就可以改变模糊程度了。

下面是不同的模糊程度的对比:

设置模糊程度5:



设置模糊程度100:



其他滤镜用法相似。列举常用的几个:

CIColorControls:可调节图片的亮度、对比度、饱和度等。

CIColorInvert:反转颜色的滤镜。

CISepiaTone:棕色滤镜。

CIPixellate:像素滤镜。(恩,可以打马赛克了)

PS:

在简书上看到的文章也记录一下:使用Core Image 滤镜
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  ios