CoreImage 是苹果 iOS5新增的一个 OC 框架,提供了强大的图像处理功能, 用于对基于像素的图像进行操做与分析, 提供了不少滤镜(Filter),造成强大的自定义效果css
CIImage 类框架
用于保存图像数据, 初始化方法:ide
1.imageWithCGImage: 2.imageWithContentsOfURL: 3.imageWithCVImageBuffer: 4.imageWithData:
CFFilter 滤镜类ui
实例化滤镜对象,经过键-值KVC来设置输入值,及效果的改变. spa
1. 一般 CIFilter 对象须要一个或多个图像做为输入,-> 2.经过 KVC 设置一些参数 -> 3.并产生 CIImage 类型的实体做为输出3d
CIFilter * filter = [CIFilter filterWithName:@"CIGaussianBlur"];
下面是查询须要的滤镜种类的方法:code
1.查询 效果分类中 包含什么效果:filterNamesInCategory:对象
(1)按住command 点击CIFilter 进入接口文件 找到第128行-148行所有都是 效果分类
(2)选择其中某一个分类 NSLog -> [CIFilter filterNamesInCategory:刚才拷贝的分类]; -> 打印出来的 是这个分类包含的全部 效果 -> 拷贝选择其中的某一个效果.
2.查询 使用的效果中 能够设置什么属性(KVC) attributes
NSLog -> [CIFilter filterWithName:刚才拷贝选择其中的某一个效果].attributes ->获得这个滤镜全部能够设置的属性
调用[CIFilter attributes]会返回filter详细信息,blog
CIContext 上下文接口
CIContext 又称上下文用来渲染 CIImage, 将做用在 CIImage 上的滤镜链 应用到原始的图片数据
获得处理后的图片:
使用步骤:
1.建立 CIImage对象
2.建立 CIFilter 滤镜对象
3.利用 KVC 设置滤镜对象的属性
4.经过滤镜对象获取处理后图片
5.建立 CIContext对象, 将获得的图片渲染到视图上
🌰例子:
//模糊设置处理
-(void)filterGaussianBlur { //建立CIContext对象 CIContext * context = [CIContext contextWithOptions:nil]; //获取图片 CIImage * image = [CIImage imageWithCGImage:[_image CGImage]]; //建立CIFilter CIFilter * gaussianBlur = [CIFilter filterWithName:@"CIGaussianBlur"]; //设置滤镜输入参数 [gaussianBlur setValue:image forKey:@"inputImage"]; //设置模糊参数 [gaussianBlur setValue:[NSNumber numberWithFloat:_slider.value*10] forKey:@"inputRadius"]; //获得处理后的图片 CIImage* resultImage = [gaussianBlur valueForKey:@"outputImage"]; CGImageRef imageRef = [context createCGImage:resultImage fromRect:CGRectMake(0,0,self.image.size.width,self.image.size.height)]; UIImage * image1 = [UIImage imageWithCGImage:imageRef]; [_imageView setImage:image1]; CFRelease(imageRef); }
//旧色调处理
-(void)filterSepiaTone { //建立CIContext对象(默认值,传入nil) CIContext * context = [CIContext contextWithOptions:nil]; //获取图片 CIImage *cimage = [CIImage imageWithCGImage:[_image CGImage]]; //建立CIFilter CIFilter * sepiaTone = [CIFilter filterWithName:@"CISepiaTone"]; //设置滤镜输入参数 [sepiaTone setValue:cimage forKey:@"inputImage"]; //获取滑块的Value,设置色调强度 [sepiaTone setValue:[NSNumber numberWithFloat:[_slider value]]forKey:@"inputIntensity"]; //建立处理后的图片 CIImage * resultImage = [sepiaTone valueForKey:@"outputImage"]; CGImageRef imageRef = [context createCGImage:resultImage fromRect:CGRectMake(0,0,self.image.size.width,self.image.size.height)]; UIImage * image = [UIImage imageWithCGImage:imageRef]; [_imageView setImage:image]; CFRelease(imageRef); }
参考:
https://www.jianshu.com/p/cd7bb24a68d0
https://www.jianshu.com/p/5ac1b631c33e
//获取 fileterName
https://www.jianshu.com/p/31dc42d691ac