您的位置:首页 > 其它

滤镜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];

经过这几步就能实现了,对图片的一些操作
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: