Core Image 是 IOS 的图片处理框架,有使用方便、易于管理,性能优异的特点。
用途
-
在照片、视频处理,把滤镜作为最后一步,添加水印
-
给照相机提供实时效果
-
面部检测,自动滤镜增益,图片分析算法
-
更多
理解Core Image 框架
CIImage
带便图像的对象
CIFilter
表示滤镜,使用key-value coding设置输入值,滤镜强度和输入的CIImage 包含了一个对输入图像的引用以及需要应用于数据的滤镜
CIContext
用于渲染CIImage,当一个图片被渲染,作用于图片的滤镜链会被应用到原始的图像数据上。 CIContext可以是基于CPU的,输出为CGImageRef,也可以是基与GPU的,开发者可通过Open ES 2.0 画出来
CIDetector
CIDetector用于分析CIImage,以得到CIFeature,每个CIDetector都要用一个探测器类型(NSString)来初始化。这个类型用于告诉探测器要找什么特征
CIFeatureCIFaceFeature
当一个CIDetector 分析一个图像,返回值是一个根据探测器类型探测到的CIFeature数组。每一个CIFaceFeature都包含了一个面部的CGRect引用,以及检测到的面孔的左眼、右眼、嘴部对应的CGpoint
Core Image 处理图片的工作流程
- 创建新的CIImage
- 创建新的CIFilter,通过键-值编码设置输入值,一定要给inputImage加入一个值,这个属性是图像数据源
- 从CIFilter中生成输出图片。通过访问CIFilter的outputImage属性,可以得到输出图像,这是一个新的CIImage对象,包含了原始图片的数据以及一个滤镜链。 在得到输出图像后,可以使用滤镜来渲染出最终的效果图像。也可以将其作为一个新滤镜的输入图像,这样会产生出一条滤镜链
- 用CIContext 渲染CIImage 对象,这个CIContext 可以是基于CPU的,输出为CGImageRef,通过 LibDispatch(GCD)渲染 ,更加可靠,也更加易用。也可以是基于GPU的,开发者可通过Open ES 2.0 画出来。使用GPU渲染时CPU没有负担,更好地性能,但无法在后台运行
使用例子:
<span style="font-size:12px;"> //添加棕色的滤镜
CIImage *myCoreImage = [CIImage imageWithCGImage:self.myImageView.image.CGImage options:nil];
// 创建Filter,@"CISepiaTone"这个名字是系统指定的
CIFilter *sepia = [CIFilter filterWithName:@"CISepiaTone"];
// 设置Filter
[sepia setValue:myCoreImage forKey:@"inputImage"];
NSNumber *intensity = [NSNumber numberWithFloat:.5f];
[sepia setValue:intensity forKey:@"inputIntensity"];
// 生成新的 CIImage
CIImage *outputImage = [sepia outputImage];
// 取出UIImage
CGImageRef renderImage = [_imageContext createCGImage:outputImage fromRect:[outputImage extent]];
[self.myImageView setImage:[UIImage imageWithCGImage:renderImage]];</span>
DemoCoreImage 是直接从IOS 核心框架拿过来的。
CoreImageMySelf 是我自己提取的只为实现优化功能的demo
提取的功能模块有,filter的使用、自动优化的使用、脸部检测
Demo 下载地址:https://github.com/caigee/iosdev_sample
下的DemoCoreImage
厚吾(http://blog.youkuaiyun.com/mangosnow)
本文遵循“署名-非商业用途-保持一致”创作公用协议