滤镜CoreImage
2016-03-29 08:56
253 查看
滤镜:对图片进行修改,修改成自己想要的效果。
CoreImage
是一个图像框架它基于OpenGL顶层创建的底层则用着色器来处理图像
是利用了GPU基于硬件加速来处理图像
CoreImage中有很多滤镜
它们能够一次给予一张图像或者视频帧多种视觉效果->滤镜链
而且滤镜可以连接起来组成一个滤镜链把滤镜效果叠加起来处理图像
需要用到的相关类
CIImage保存图像数据的类 跟UIImage进行转换
CIImageRef图像中的数据
CIFilter滤镜类图像属性进行细节处理的类它对所有的像素进行操作用键值来设置
CIContext上下文是实现对图像处理的具体对象 合成滤镜和图像的滤镜出来的图像并不是合成之后的图像
它的效果有很多种,下面介绍几种效果:
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
Category在点击CIFilter进去后找到128行,有个注释的是Category,后面就是它的分类
每个分类都有好多细分的分类,需要先选定一个,打印出它的数组元素,这些元素就是我们对图片进行的操作,到这里我们还是需要打印下,看看这个小分类有什么文本属性,像inputImage这些文本属性。所以打印时需要添加点attributes
NSLog(@"%@",[CIFilter
filterNamesInCategory:kCICategoryStillImage]) ;找出想要的效果
NSLog(@"%@",[CIFilter
filterWithName:@"CIBloom"].attributes);找出具体的效果
下面举个列子,具体的打印出来的结果,需要大家自己操作。
1、有张我们对它操作的图片,图片本身应该都是UIImage格式,要对其操作的需要时CIImage格式,所以这一步进行转换。转换必须是我这么写,还有一种已经失效。我这是用的图片视图上的图片并不是直接添加的图片
CIImage *image
= [CIImageimageWithCGImage:imageView.image.CGImage];
2、找到效果分类,分类中的分类,分类的文本属性,修改文本属性
这里可以同时修改多个文本属性
CIFilter*fil
= [CIFilterfilterWithName:@"CIBloom"];
[fil setValue:image forKey:kCIInputImageKey];
[fil setValue:@(0.5) forKey:kCIInputIntensityKey];
3、创建个上下文
CIContext *conteng = [CIContext
contextWithOptions:nil];
4、获得滤镜,其实滤镜也是一张图片
CIImage
*sssss = fil.outputImage;
5、将滤镜和图片合并
CGImageRef resf = [conteng createCGImage:sssss fromRect:sssss.extent];
6、将ref格式转换为UI
imageView.image = [UIImage imageWithCGImage:resf];
经过这几步就能实现了,对图片的一些操作
CoreImage
是一个图像框架它基于OpenGL顶层创建的底层则用着色器来处理图像
是利用了GPU基于硬件加速来处理图像
CoreImage中有很多滤镜
它们能够一次给予一张图像或者视频帧多种视觉效果->滤镜链
而且滤镜可以连接起来组成一个滤镜链把滤镜效果叠加起来处理图像
需要用到的相关类
CIImage保存图像数据的类 跟UIImage进行转换
CIImageRef图像中的数据
CIFilter滤镜类图像属性进行细节处理的类它对所有的像素进行操作用键值来设置
CIContext上下文是实现对图像处理的具体对象 合成滤镜和图像的滤镜出来的图像并不是合成之后的图像
它的效果有很多种,下面介绍几种效果:
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
Category在点击CIFilter进去后找到128行,有个注释的是Category,后面就是它的分类
每个分类都有好多细分的分类,需要先选定一个,打印出它的数组元素,这些元素就是我们对图片进行的操作,到这里我们还是需要打印下,看看这个小分类有什么文本属性,像inputImage这些文本属性。所以打印时需要添加点attributes
NSLog(@"%@",[CIFilter
filterNamesInCategory:kCICategoryStillImage]) ;找出想要的效果
NSLog(@"%@",[CIFilter
filterWithName:@"CIBloom"].attributes);找出具体的效果
下面举个列子,具体的打印出来的结果,需要大家自己操作。
1、有张我们对它操作的图片,图片本身应该都是UIImage格式,要对其操作的需要时CIImage格式,所以这一步进行转换。转换必须是我这么写,还有一种已经失效。我这是用的图片视图上的图片并不是直接添加的图片
CIImage *image
= [CIImageimageWithCGImage:imageView.image.CGImage];
2、找到效果分类,分类中的分类,分类的文本属性,修改文本属性
这里可以同时修改多个文本属性
CIFilter*fil
= [CIFilterfilterWithName:@"CIBloom"];
[fil setValue:image forKey:kCIInputImageKey];
[fil setValue:@(0.5) forKey:kCIInputIntensityKey];
3、创建个上下文
CIContext *conteng = [CIContext
contextWithOptions:nil];
4、获得滤镜,其实滤镜也是一张图片
CIImage
*sssss = fil.outputImage;
5、将滤镜和图片合并
CGImageRef resf = [conteng createCGImage:sssss fromRect:sssss.extent];
6、将ref格式转换为UI
imageView.image = [UIImage imageWithCGImage:resf];
经过这几步就能实现了,对图片的一些操作
相关文章推荐
- call to OpenGL ES API with no current context (logged once per thread)可能会导致加载问题?
- Maven简单命令
- Eclipse背景颜色自定义设置:
- 帝国cms调用栏目自定义字段(栏目简介)如何操作
- 如何在 Linux 上安装服务器管理软件 Cockpit
- 29 继承(一)
- Shell脚本分割Nginx日志,并定期清理
- http://www.linuxidc.com/Linux/2014-06/102856.htm
- [leetcode] 212. Word Search II 解题报告
- DJANGO之自定义模板过滤器
- MD5加密操作
- 出差(三十四)
- php email
- stl之set
- 团队作业(一)
- Kafka源码分析(4)
- 使用git把项目提交到github
- 为什么Lisp语言如此先进
- Mysql日常使用维护命令总结
- 简单学习Java+MongoDB