#Core Image框架提供:
- 访问内置图像处理过滤器
- 特征检测功能
- 支持自动图像增强
- 将多个过滤器链接在一起以创建自定义效果的功能
- 支持创建在GPU上运行的自定义过滤器
- 基于反馈的图像处理功能
##CIImage 介绍 - CIImage 由Core Image过滤器处理或生成的图像的表示。
- CIImage对象具有与之关联的图像数据,但它不是图像。可以将CIImage对象视为图像“食谱”。
- CIImage对象具有生成图像所需的所有信息,但Core Image在被告知这样做之前实际上不会渲染图像.
- CIContext 和CIImage对象是不可变的,这意味着每个都可以在线程之间安全地共享。
几乎任何图像数据源创建Core Image图像对象,包括:-
引用要加载的图像文件的URL或NSData包含图像文件数据的对象.
-
Quartz2D,UIKit中,或者了AppKit图像表示(CGImageRef,UIImage,或NSBitmapImageRep对象).
-
Metal,OpenGL或OpenGL ES纹理.
-
CoreVideo图像或像素缓冲区(CVImageBufferRef或CVPixelBufferRef).
-
IOSurfaceRef 在进程之间共享图像数据的对象.
-
内存中的图像位图数据(指向此类数据的指针,或CIImageProvider按需提供数据的对象).
创建CIImage方式之一:CIImage *image = [CIImage imageWithCGImage:[UIImage imageNamed:@"youyong"].CGImage];
-
##CIFilter过滤器描述
-
CIFilter该类的实例是表示图像处理效果的可变对象以及控制该效果行为的任何参数。
-
过滤器参数定义为键值对; 要使用参数,通常使用valueForKey:和setValue:forKey:键或基于键值编码构建的其他功能(例如Core Animation)。
-
注意: CIFilter对象是可变的,因此您无法在不同的线程之间安全地共享它们。每个线程都必须创建自己的CIFilter对象。
-
一些更常见的输入参数类型具有关联的键,例如kCIInputImageKey。如果无法推断关联的键常量,则只需使用过滤器引用中的***字符串文字***即可。
查看系统自带过滤器类别
创建CIGaussianBlur类型的CIFIter:
CIImage *image = [CIImage imageWithCGImage:[UIImage imageWithContentsOfFile:urlString].CGImage]; CIFilter *filter = [CIFilter filterWithName:@"CIGaussianBlur"]; //高斯分布 [filter setValue:image forKey:kCIInputImageKey]; [filter setValue:@(10) forKey:kCIInputRadiusKey]; //默认为10.0 CIImage *resultImage = [filter outputImage]; UIImageView *imageView = [[UIImageView alloc] initWithFrame:CGRectMake(0, 0, 400, 200)]; imageView.backgroundColor = [UIColor clearColor]; imageView.center = self.view.center; imageView.image = [UIImage imageWithCIImage:resultImage]; [self.view addSubview:imageView];
效果如下:
使用CIContext构建自己的工作流
CIContext是管理大量资源和状态的重量级对象。反复创建和销毁上下文会产生很大的性能成本,因此如果您计划执行多个图像处理操作,请尽早创建上下文并将其存储以供将来重用。 -
使用CIContext名称以render或开头的方法create来指定显式目标。想要实时渲染Core Image结果,即在过滤器参数中设置动画效果,生成动画过渡效果,或者处理已经每秒渲染多次的视频或其他可视内容,请小心使用此方法。即使CIContext使用此方法创建的对象可以使用GPU自动渲染,呈现渲染结果也可能涉及CPU和GPU内存之间的昂贵复制操作。
Core Image轻松地在应用程序的用户界面中为游戏,视频或图像添加视觉效果,而无需构建复杂的渲染代码。以下部分介绍了在应用程序中使用Core Image的几种常用方法,以及为每种方法提供的便利系统框架。- 在UIKit中处理静止图像
注意:请勿使用Core Image创建作为用户界面设计一部分的模糊效果(如半透明侧边栏,工具栏以及macOS,iOS和tvOS系统界面的背景中所见)UIVisualEffectView(iOS / tvOS)类,它们自动匹配系统外观并提供高效的实时渲染。 - 使用AV Foundation处理视频
可以使用AVVideoComposition对象在回放或导出期间将核心图像过滤器应用于视频的每个帧. - 使用Core Image Context构建自己的工作流
CIContext是管理大量资源和状态的重量级对象.反复创建和销毁上下文会产生很大的性能成本,因此在执行多个图像处理操作,尽早创建上下文并将其存储以供将来重用。
有以下几种渲染方式可以参考:- 使用CIContext进行渲染:该方法非常适合于渲染已处理图像以导出到文件(例如,使用该writeJPEGRepresentationOfImage:toURL:colorSpace:options:error:方法)的任务。
- 用Metal实时渲染:Metal框架提供对GPU的低开销访问,实现图形渲染和并行计算工作流的高性能.此类工作流程是图像处理不可或缺的一部分,因此Core Image尽可能在Metal上构建。
- 使用OpenGL或OpenGL ES进行实时渲染:基于GPU的高性能渲染.
- 使用Quartz 2D进行基于CPU的渲染:如果应用程序不需要实时渲染和绘制视图则使用CoreGraphics.
- 在UIKit中处理静止图像