1、CoreImage介绍
coreImage是IOS5中新加入的一个Objective-c的框架,提供了强大高效的图像处理功能,用来对基于像素的图像进行操作与分析。IOS提供了很多强大的滤镜(Filter),其中IOS5中有48种,而到了最新的IOS6 Filter已经增加到了93种之多,并且这一数字会继续增加。这些Filter提供了各种各样的效果,并且还可以通过滤镜链将各种效果的Filter叠加起来,形成强大的自定义效果,如果你对该效果很满意,还可以子类化滤镜。
2、类的介绍
1)CIImage:保存图像数据的类CGImageRef:图像中的数据
2) CIFilter:滤镜类图片属性进行细节处理的类它对所有的像素进行操作用键-值(KVC)来设置
3) CIContext:上下文是实现对图像处理的具体对象->滤镜对象输出的图像并不是合成之后的图像需要使用图像处理的上下文合并输出图像
3、按效果分类
kCICategoryDistortionEffect扭曲效果,比如bump、旋转、hole
kCICategoryGeometryAdjustment几何开着调整,比如仿射变换、平切、透视转换
kCICategoryCompositeOperation合并,比如源覆盖(source over)、最小化、源在顶(source atop)、色彩混合模式
kCICategoryHalftoneEffect Halftone效果,比如screen、line screen、hatched
kCICategoryColorAdjustment色彩调整,比如伽马调整、白点调整、曝光
kCICategoryColorEffect色彩效果,比如色调调整、posterize
kCICategoryTransition图像间转换,比如dissolve、disintegrate with mask、swipe
kCICategoryTileEffect瓦片效果,比如parallelogram、triangle
kCICategoryGenerator图像生成器,比如stripes、constant color、checkerboard
kCICategoryGradient渐变,比如轴向渐变、仿射渐变、高斯渐变
kCICategoryStylize风格化,比如像素化、水晶化
kCICategorySharpen锐化、发光
kCICategoryBlur模糊,比如高斯模糊、焦点模糊、运动模糊
按使用场景分类:
kCICategoryStillImage用于静态图像
kCICategoryVideo用于视频
kCICategoryInterlaced用于交错图像
kCICategoryNonSquarePixels用于非矩形像素
kCICategoryHighDynamicRange用于HDR
4、主要步骤:
1.实例CIImage ->先把UIImage->CGImageRef -> CIImage
2.创建CIFilter滤镜并给滤镜设置属性(KVC)
3.创建CIContext上下文
4.合并滤镜输出的图像->得到一个合并之后的图像
5.赋给UIImageView对象进行显示
6.如果想使用滤镜链可以再次叠加效果
下面给大家举一个例子
1、准备工作,初始化一张图片和按钮
imageView= [[UIImageView alloc]initWithFrame:self.view.frame];
imageView.image= [UIImage imageNamed:@"Nana1.jpeg"];
imageView.contentMode=UIViewContentModeScaleAspectFill;
[self.view addSubview:imageView];
button= [UIButton buttonWithType:UIButtonTypeCustom];
button.frame=CGRectMake(100,600,50,50);
[buttonsetTitle:@"TICK"forState:UIControlStateNormal];
button.backgroundColor= [UIColor brownColor];
[button ddTarget:selfaction:@selector(addBlurFilter)forControlEvents:UIControlEventTouchUpInside];
[self.view addSubview:button];
2、按钮的响应事件
-(void)addBlurFilter{
//1、原图 (注意:图片的形式要转化成CIImage的形式,否则会找不到图片)
CIImage *inputImage = [CIImage imageWithCGImage:imageView.image.CGImage];
//2、滤镜
CIFilter *filter = [CIFilter filterWithName:@"CIBoxBlur"];
//NSLog(@"%@",[CIFilter filterNamesInCategory:kCICategoryBlur]);
NSLog(@"%@",filter.attributes);
[filter setValue:inputImage forKey:kCIInputImageKey];
[filter setValue:@5forKey:kCIInputRadiusKey];
//3、CIContext图像的上下文
CIContext*context = [CIContext contextWithOptions:nil];
CIImage*outupImage = filter.outputImage;
CGImageRef imageRef = [context createCGImage:outupImage fromRect:outupImage.extent];
imageView.image= [UIImage imageWithCGImage:imageRef];
}
注意:1、再添加滤镜的时候,怎样查询效果分类中包含什么效果?
(1)按住command点击CIFilter进入接口文件找到128-148全部都是效果分类
(2)选择其中一个分类NSLog(@"%@",[CIFilter filterNamesInCategory:分类])打印出来是这个分类包含的所有效果选择一个效果。
2、查询使用的效果中可以设置什么属性(KVC)?
NSLog(@"%@",[CIFilter filterWithName:@"分类的分类"].attributes);得到这个滤镜所有可以设置的属性