使用Core Image 滤镜

  CoreImage 是一个功能强大的框架,通过这个框架很容易对图像进行处理,比如模糊,色彩,像素等,使用CoreImage主要和CIContent,CIImage,CIFilter打交道。

 Core Image三个核心API

CIContext. 所有图像处理都是在一个CIContext 中完成的,这很像是一个Core Image处理器或是OpenGL的上下文。

CIImage. 这个类保存图像数据。它可以从UIImage、图像文件、或者是像素数据中构造出来。

CIFilter. 滤镜类包含一个字典结构,对各种滤镜定义了属于他们各自的属性。滤镜有很多种,比如鲜艳程度滤镜,色彩反转滤镜,剪裁滤镜等等。

了解了以上三个api我们就可以使用了,使用的过程大致如下:

1.创建CIContent对象我们需要使用这个对象将CIImage转为CGImageRef,这个对象可以重复使用,当我们使用CIContent时尽量重复使用,避免频繁创建造成性能问题。

创建方法:

使用Core Image 滤镜_第1张图片
创建CIContent

2.过滤器,CIFilter一般通过filterWithName方法获取,参数为过滤器名字,每个过滤器有自己唯一的属性,通过设置好这些属性对图像进行处理。

3.创建CIImage,它代表需要处理的图像,有多个种创建方法,具体可点进头文件查看。

4.通过[filter outputImage]获得处理过后的CIImage,然后通过CIContent createCGImage: fromRect:方法得到CGImageRef从而得到UIImage,当然我们也可以通过UImage的分类imageWithCIImage得到,这个方法每次都创建了CIContent,并没有对CIContent的重复使用,频繁使用可能影响性能。

下面列举常用的几个滤镜:

色彩控制滤镜-CIColorControls

使用Core Image 滤镜_第2张图片

其中imageFromCIImage:Content如下

使用Core Image 滤镜_第3张图片

该方法主要实现将CIImage转换为UIImage。

反转颜色滤镜-CIColorInvert

使用Core Image 滤镜_第4张图片

棕色滤镜-CISepiaTone

使用Core Image 滤镜_第5张图片

模糊滤镜-CIGaussianBlur

使用Core Image 滤镜_第6张图片

像素滤镜-CIPixellate

使用Core Image 滤镜_第7张图片

人脸检测

使用Core Image 滤镜_第8张图片

featuresWithImage: content:方法如下:

使用Core Image 滤镜_第9张图片

获得左眼/右眼/嘴部位置,通过该方法可以获取脸部的左眼,右眼,嘴部的位置

使用Core Image 滤镜_第10张图片
眼 

FacePartType 为枚举类型定义如下:

使用Core Image 滤镜_第11张图片

Core Image定义了上百种过滤器,但是也只有一部分能使用在ios上,可以通过以下方法获得内设的过滤器。

使用Core Image 滤镜_第12张图片

总结:CoreImage提供了简单的方法对图像进行处理,虽然方法简单,功能却很强大。就是有点不好记住,比如过滤器的名字,太多了不好记,至于过滤器要设置的属性,每个过滤器有自己的属性,记不住属性名,可以通过po [filter attributes]查看过滤器的属性信息。

你可能感兴趣的:(使用Core Image 滤镜)