美文网首页
iOS图形处理篇:Core Image

iOS图形处理篇:Core Image

作者: younger_times | 来源:发表于2018-02-12 00:43 被阅读186次

Core Image 滤镜是 iOS 5 的新增框架,通过使用这个框架,程序可以非常容易地对图片进行各种特效处理,包括色彩调节、降噪、扭曲等。简单来说,Core Image 滤镜完全可以与 Photoshop 滤镜媲美。

Core Image 的三个核心API

  • CIContext:它是 Core Image 处理的核心 API,所有图片的处理都在它的管理下完成。
  • CIFilter:它代表过滤器。所有的过滤器都由该 CIFilter 代表,在创建 CIFilter 时传入不同的参数即可创建不同类型的过滤器。
  • ClImage:它代表 Core Image 过滤器处理的图片,CIFilter 过滤器的输入图片、输出图片都由该 ClImage 代表。程序可通过 UlImage、图片文件或像素数据来创建 CIImage。

1. 创建 CIContext 对象。

在 iOS 平台上有如下三种方式创建 CIContext。

  • 第一种方式:创建基于 CPU 的 CIContext 对象。
ctx = [CIContext contextWithOptions: @ {kCIContextUseSoftwareRenderer: [NSNumber numberWithBool: YES] };
  • 第二种方式:创建基于 GPU 的 CIContext 对象。
ctx =  [CIContext contextWithOptions: nil];
  • 第三种方式:创建基于 OpenGL 优化的 CIContext 对象,可获得实时性能。
EAGLContext * eaglctx  [[EAGLContext alloc]
initWithAPI: kEAGLRenderingAPIOpenGLES2];
ctx =  [CIContext contextWithEAGLContext: eaglctx];

Note

如果使用基于 OpenGL 优化的 CIContext 对象,程序还需要为该应用增力口 OpenGL ES 框架。

采用基于 GPU 的 CIContext 将可以获得更好的性能,因此,一般建议创建基于 GPU 的 CIContext。但基于 GPU 的 CIContext 对象无法跨应用访问。比如,应用打开 UlImagePickerController 选取照片进行美化,如果直接在 UlImagePickerContollerDeleg 的委托方法里调用 CIContext 对象进行处理,那么系统会自动将其降为基于 CPU 的,速度会变慢,因此,建议在委托方法中只把照片保存下来,回到主类里调用 CIContext 进行处理。

2. 创建CIFilter过滤器

创建 CIFilter 过滤器。CIFilter 提供了 filterWithName:类方法来创建 CIFilter 对象。该方法需要传入过滤器的名字一 Core Image 提供了大量的过滤器,不同的过滤器有不同的名字。需要说明的是,并非该文档中列出的所有过滤器都可在 iOS 平台上使用,有些过滤器只能在 OS X 系统上使用。

参考CIFilter

Note

除此之外,还可以通过 CIFilter 的 filterNamesInCategory:类方法获取该平台内建支持的所有过滤器,再调用指定 CIFilter 对象的 attributes 实例方法,即可看到该过滤器支持的所有属性。

3. 创建CIImage对象

该CIImage将要作为过滤器处理源图片

4. 调用CIFilter

调用setValue:beginImage for Key: 做属性赋值

5. 设置CIFilter参数

6. 调用CIFilter outputImage属性

获取处理后的图片,返回CIImage

7. 转换

调用 CIContext 的不同方法将 CIlmage 转换为 CGImageRef,或者将该 CIImage 绘制到指定区域中。


核心代码

// 创建基于 CPU 的 CIContext 对象
_ctx=  [CIContext contextwithOptions: @ {kCIContextUseSoftwareRenderer:
 [NSNumber numberWithBool: YES]; 

// 创建基于 GPU 的 CIContext 对象
_ctx=  [CIContext contextwithOptions: nil]; 

 // 创建基于 OpenGL 优化的 CIContext 对象 
 EAGLContext * eaglctx = [[EAGLContext alloc]initWithAPI: kEAGLRenderingAPIOpenGLES2];
_ctx=  [CIContext contextWithEAGLContext: eaglctx]; // 根据过滤器名来创建过滤器 
_filter1=  [CIFilter filterWithName: @"CIPixellate"]; 
_filter2 =  [CIFilter filterWithName: @"CIHueAdjust"]; 
_filter3 =  [CIEilter filterWithName: @"CIBumpDistortion"]; 
_filter4 =  [CIFilter filterWithName: @ "CIGaussianBlur"];

// 设置过滤器参数
 [_filter1 setValue: _beginImage forKey: @" inputImage"];  
[_filter1 setValue:  [CIVector vectorWithX: 150 Y:240]forKey: @ " inputCenter"];  
[_filter1 setValue:  [NSNumber numberWithFloat: slideValue]forKey: @ " inputScale"];

// 得到过滤器处理后的图片
CIImage* outImage = [_ _filter1 outputImage]; CGImageRef tmp =  [_ctx createCGImage: outImagefromRect:[outImage extent]];

// 将处理后的图片转换为 UIImage
resultImage =  [UIImage imageWithCGImage: tmp]; 
CGImageRelease  (tmp); // 显示图片
 [self. Iv setImage: _ _resultImage];

相关文章

  • 资源收集

    iOS图形处理概论:OpenGL ES,Metal,Core Graphics,Core Image,GPUIma...

  • iOS图形处理篇:Core Image

    Core Image 滤镜是 iOS 5 的新增框架,通过使用这个框架,程序可以非常容易地对图片进行各种特效处理,...

  • iOS图像处理(二)-Core Image

    iOS图像处理-Core Image

  • Core Image

    概念 Core Image:一个OS X和iOS的图像处理框架,Core Image框架最早出现于iOS5,iOS...

  • Core Image

    Core Image前言 Core Image是iOS推出一个进行图像处理相关的库,也可以进行视频方面的处理。滤镜...

  • Core Graphics 绘图&2d形变

    绘图 iOS图像处理之Core Graphics和OpenGL ES初见iOS支持两套图形API族:Core Gr...

  • iOS 渲染流程

    图形渲染技术栈 如图,App 使用Core Graphics、Core Animation、Core Image ...

  • iOS图像处理(二)Core Image介绍

    前言 Core Image框架是iOS中一个重要的处理图像的框架,它能处理来自于Core Graphics、Cor...

  • 人脸识别

    iOS图像处理(四)CIDetector特征识别(人脸识别) 前言 CIDetecror是Core Image框架...

  • 封装 Core Image 的 API - 高阶函数方式

    上一篇:封装 Core Image 的 API - 延展方式 Why Core Image 是一个强大的图像处理框...

网友评论

      本文标题:iOS图形处理篇:Core Image

      本文链接:https://www.haomeiwen.com/subject/ihxrtftx.html