iOS中的CoreImage框架

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

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

CIImage:这是代表图像的类。
CIFilter:代表滤镜的一个类,能够通过key-value来设置输入值,用于为CIImage添加滤镜。
CIContext:用于渲染CIImage。
CIDetector:用于分析CIImage,得到CIFeature。
CIFeature\CIFaceFeature:这部分主要用于面部检测等应用。

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

  1. 初始化CIImage;
  2. 初始化滤镜CIFilter,通过键-值编码设置输入值。(也就是设置什么滤镜)
  3. 将图片输入到滤镜当中;
  4. 将处理好的图片输出;
  5. 初始化CIContext;
  6. 通过CIContext获取到CGImage句柄,最终获取到图片;如CIContext是基于GPU的,可以用Open ES 2.0画出来;
  7. 使用完后,记得释放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);

效果如下:

iOS中的CoreImage框架_第1张图片
原始图像(喵^-^)
iOS中的CoreImage框架_第2张图片
高斯模糊后的图片

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

//设置滤镜的模糊程度,设置成100
[blurFilter setValue:@(100) forKey:kCIInputRadiusKey];
//要查看有哪些属性可以设置,可以打印出属性来查看
NSLog(@"%@",[blurFilter attributes]);

Log出来的属性信息:


iOS中的CoreImage框架_第3张图片
打印出来的部分信息

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

iOS中的CoreImage框架_第4张图片
设置模糊程度5

iOS中的CoreImage框架_第5张图片
设置模糊程度100

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

CIColorControls:可调节图片的亮度、对比度、饱和度等。
CIColorInvert:反转颜色的滤镜。
CISepiaTone:变棕色的滤镜。
CIPixellate:像素滤镜。(恩,可以愉快的打马赛克了)

PS:

在上看到的文章也记录一下:使用Core Image 滤镜

你可能感兴趣的:(iOS中的CoreImage框架)