CoreImage 是一个功能强大的框架,通过这个框架很容易对图像进行处理,比如模糊,色彩,像素等,使用CoreImage主要和CIContent,CIImage,CIFilter打交道。
Core Image三个核心API
CIContext. 所有图像处理都是在一个CIContext 中完成的,这很像是一个Core Image处理器或是OpenGL的上下文。
CIImage. 这个类保存图像数据。它可以从UIImage、图像文件、或者是像素数据中构造出来。
CIFilter. 滤镜类包含一个字典结构,对各种滤镜定义了属于他们各自的属性。滤镜有很多种,比如鲜艳程度滤镜,色彩反转滤镜,剪裁滤镜等等。
了解了以上三个api我们就可以使用了,使用的过程大致如下:
1.创建CIContent对象我们需要使用这个对象将CIImage转为CGImageRef,这个对象可以重复使用,当我们使用CIContent时尽量重复使用,避免频繁创建造成性能问题。
创建方法:

2.过滤器,CIFilter一般通过filterWithName方法获取,参数为过滤器名字,每个过滤器有自己唯一的属性,通过设置好这些属性对图像进行处理。
3.创建CIImage,它代表需要处理的图像,有多个种创建方法,具体可点进头文件查看。
4.通过[filter outputImage]获得处理过后的CIImage,然后通过CIContent createCGImage: fromRect:方法得到CGImageRef从而得到UIImage,当然我们也可以通过UImage的分类imageWithCIImage得到,这个方法每次都创建了CIContent,并没有对CIContent的重复使用,频繁使用可能影响性能。
下面列举常用的几个滤镜:
色彩控制滤镜-CIColorControls

其中imageFromCIImage:Content如下

该方法主要实现将CIImage转换为UIImage。
反转颜色滤镜-CIColorInvert

棕色滤镜-CISepiaTone

模糊滤镜-CIGaussianBlur

像素滤镜-CIPixellate

人脸检测

featuresWithImage: content:方法如下:

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

FacePartType 为枚举类型定义如下:

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

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