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);
效果如下:
如果要设置模糊程度,即在将图片输入滤镜后,修改滤镜的值就是了,如:
//设置滤镜的模糊程度,设置成100
[blurFilter setValue:@(100) forKey:kCIInputRadiusKey];
//要查看有哪些属性可以设置,可以打印出属性来查看
NSLog(@"%@",[blurFilter attributes]);
Log出来的属性信息:
这里面可以看到,在上面设置滤镜的图片的时候用的kCIOutputImageKey对应的就是inputImage那个字段;而下面inputRadius就是可以调节模糊程度的,告诉了这个值的一些信息,如类型、默认值、描述等,一般带input的字段就可以设置值来调节了,所以对应着就是设置kCIInputRadiusKey值就可以改变模糊程度了。
如下面是不同的模糊程度的对比:
其他滤镜用法相似。列举常用的几个:
CIColorControls:可调节图片的亮度、对比度、饱和度等。
CIColorInvert:反转颜色的滤镜。
CISepiaTone:变棕色的滤镜。
CIPixellate:像素滤镜。(恩,可以愉快的打马赛克了)
PS:
在简书上看到的文章也记录一下:使用Core Image 滤镜