标签:
首先介绍一下Core Image,他是一个很强大的图像处理框架,他可以让你简单的应用各种滤镜来处理图像,比如说色相,饱和度,亮度等等。。。他是运用GPU(CPU)实时地处理图像数据和视频的帧。而且Core Image滤镜可以叠加在一起,产生多滤镜的效果。因为没有滤镜都有属于自己唯一的参数,可以通过修改这些参数来达到预期效果。
在应用Core Image时,要注意着三个比较总要的类:CIContext ,CIImage ,CIFilter.
1.CIContext:所有的图像处理都在一个CIContext中完成,相当于OpenGL中的上下文;
2.CIImage:用来保存图像数据。同时他可以通过像素数据构造出来;
//创建CIImage对象
UIImage *image = [UIImage imageNamed:@"test.png"];
NSData *data = UIImagePNGRepresentation(image);
self.ciImage = [CIImage imageWithData:data];
3.CIFiter:包含了一个字典结构的滤镜类,同时滤镜有很多中。各种滤镜都定义了他们独自不同的属性。他的种类有很多,可以参考http://blog.sina.com.cn/s/blog_5fb39f9101018g34.html
//打印所有的滤镜类型
NSArray *cifilter = [CIFilter filterNamesInCategory:kCICategoryBuiltIn];
NSLog(@"滤镜名称:\n%@\n滤镜数:%ld", cifilter,cifilter.count);
废话不多说,直接上代码
//创建CIImage对象
UIImage *image = [UIImage imageNamed:@"girl.png"];
NSData *data = UIImagePNGRepresentation(image);
self.ciImage = [CIImage imageWithData:data];
// 创建基于CPU的CIContext对象
self.context = [CIContext contextWithOptions:nil];
// 创建过滤器
//调节色相
self.colourFilter = [CIFilter filterWithName:@"CIHueAdjust"];
[self.colourFilter setDefaults];
// 设置过滤器参数,来改变图像数据
在设置过滤器的参数时,你要明确当前过滤器的属性,可以通过打印出相应过滤器的字典数据查看并进一步更改:
NSLog(@"CIHueAdjust______%@",[self.colourFilter attributes]);
/**
inputAngle = {
CIAttributeClass = NSNumber;
CIAttributeDefault = 0;
CIAttributeDescription = "An angle (in radians) to use to correct the hue of an image.";
CIAttributeDisplayName = Angle;
CIAttributeIdentity = 0;
CIAttributeSliderMax = "3.141592653589793";
CIAttributeSliderMin = "-3.141592653589793";
CIAttributeType = CIAttributeTypeAngle;
};
inputImage = {
CIAttributeClass = CIImage;
CIAttributeDescription = "The image to use as an input image. For filters that also use a background image, this is the foreground image.";
CIAttributeDisplayName = Image;
CIAttributeType = CIAttributeTypeImage;
};
*/
//可以看到inputAngle输入角度的取值范围"-3.141592653589793-3.141592653589793"
[_colourFilter setValue:_ciImage forKey:@"inputImage"];
[_colourFilter setValue:[NSNumber numberWithFloat:2] forKey:@"inputAngle"];
// 得到过滤后的图片
CIImage *outputImage = [_colourFilter outputImage];
// 转换图片
CGImageRef cgimg = [_context createCGImage:outputImage fromRect:[outputImage extent]];
UIImage *newImg = [UIImage imageWithCGImage:cgimg];
// 显示图片
[_imageView setImage:newImg];
CGImageRelease(cgimg);
具体demo链接https://github.com/White007/CIFilterDemo.git
标签:
原文地址:http://www.cnblogs.com/vfeng/p/5430639.html