强大的Core Image框架,各种滤镜处理图像
2016-05-12 16:44
399 查看
首先介绍一下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输入角度的取值范围"[b]-3.141592653589793-3.141592653589793"[/b]
[_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
在应用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输入角度的取值范围"[b]-3.141592653589793-3.141592653589793"[/b]
[_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
相关文章推荐
- 解决横屏时调用系统相册崩溃的问题
- iOS RC4加解密算法
- UIScrollView不能响应touch事件的解决办法
- 网络图片加载的封装-(从零开始搭建android框架系列(4))
- 走进科学之WAF(Web Appllication Firewall)篇
- 消费者端的Spring JMS 连接ActiveMQ接收生产者Oozie Server发送的Oozie作业执行结果
- 葱课 现场面试 2016.5.12
- php有三种工作模式
- TextView自动换行问题
- 2016.5.12 JavaScript笔记
- 我写博客的原因
- 无聊写一个自己接入微信支付的文章
- Flash游戏开发前言①
- ACM程序设计选修课——1036: Hungar的菜鸟赛季(YY)
- 公有PaaS的浴火重生
- Unix环境高级编程(阅读笔记)----sigaction函数
- CodeForces 444A DZY Loves Physics(结论题)
- 本地代码上传 -> Github
- 更新Xcode7 后 .dylib变成了.tbd的问题解决
- 简单地新闻头条滚动效果