CoreImage的使用及常見濾鏡工具(一)

概述:git

CoreImage是一個圖像框架,它基於OpenGL頂層建立,底層則用着色器來處理圖像,這意味着它利用了GPU基於硬件加速來處理圖像。CoreImage中有不少濾鏡,它們可以一次給予一張圖像或者視頻幀多種視覺效果。並且濾鏡能夠鏈接起來組成一個濾鏡鏈,把濾鏡效果疊加起來處理圖像。github

CoreImage框架最先出現於iOS5,iOS6也對這個框架進行了擴展,這篇博客的Demo是基於iOS7的。app

 

CoreImage框架最經常使用的類:框架

 

* CIImage工具

保存圖像數據的類,能夠經過UIImage,圖像文件或者像素數據來建立,包括未處理的像素數據如:性能

- imageWithCVPixelBuffer:spa

- imageWithData:.net

方法等等。3d

也能夠經過圖像數據類好比UIImage,CGImageRef等等。orm

 

* CIFilter

濾鏡類,這個框架中對圖片屬性進行細節處理的類。它對全部的像素進行操做,用一些鍵-值設置來決定具體操做的程度。

 

* CIContext

上下文類,如CoreGraphics以及CoreData中的上下文用於處理繪製渲染以及處理託管對象同樣,CoreImage的上下文也是實現對圖像處理的具體對象。

這裏須要注意的是在Context建立的時候,咱們須要給它設定爲是基於GPU仍是CPU。(這裏使用GPU)

基於GPU的話,處理速度更快,由於利用了GPU硬件的並行優點。可是GPU受限於硬件紋理尺寸,並且若是你的程序在後臺繼續處理和保存圖片的話,那麼須要使用CPU,由於當app切換到後臺狀態時GPU處理會被打斷。

 

簡單使用:

簡介完三個類以後,介紹下簡單使用步驟:

實例化一個CIImage,

建立一個你須要的CIFilter濾鏡並給濾鏡設置屬性,

建立CIContext上下文來初始化一個CGImageRef對象,

再將其賦給UIImage對象進行顯示。

 

這篇文章採用工具類的方法來進行濾鏡處理。

 

下面是一個簡單的棕色濾鏡的使用:

傳入一個圖片的path,生成CIImage對象,而後經過SepiaTone濾鏡通過處理,強度自定義便可(範圍:0~1之間)。

UIImage不是有個類方法直接經過CIImage對象生成UIImage嗎?可是那樣每一次都要建立一個CIContext對象,對於頻繁調用時會很消耗性能。

因此,這裏的context在工具類初始化的時候已經初始化了。

 

這裏使用GPU來進行圖片渲染的處理。上面已經提到過,這樣速度會更快些。

若是想用CPU,則能夠調用[CIContext contextWithOptions:]傳入一個字典,將CPU做爲渲染鍵值。

 

工具類裏提供了4個方法可以快速的使用該濾鏡渲染。

 

下面繼續介紹其餘的濾鏡

仿射變換濾鏡

仍是經過兩種傳入途徑,一個路徑,一個圖片

如今咱們已經使用了兩個濾鏡。那麼可不能夠把兩個濾鏡連起來用呢?

答案是能夠的,這就是通常所說的濾鏡鏈,咱們能夠得到上一個濾鏡的輸出圖片做爲下一個濾鏡的輸入,而後進行渲染處理,而處理的次數怎麼處理則咱們由咱們本身需求而隨意更改。

 

因而我把上面兩個濾鏡鏈接起來使用。

CIImage *ciimg = [_tool transOutputWithPath:path transform:CGAffineTransformMakeRotation(M_PI)];
_image = [_tool sepiaImageWithCIImage:ciimg intensity:1.0];

_imageView.image = _image;

通過兩個工具方法處理後,咱們獲得了通過濾鏡鏈處理的圖像,以下:

混合濾鏡

 

若是你的圖片的透明通道爲YES想在下方添加一個底層的圖片的話,能夠用CISourceAtopCompositing濾鏡。

拉直濾鏡

 

若是你的圖片因爲拍攝時稍微傾斜或者抖動,可使用這個濾鏡並傳入一個旋轉角度參數來修正圖片。

色彩控制濾鏡

 

能夠傳入顏色的亮度,對比度和飽和度來給圖片過濾。

 

反轉顏色濾鏡

 

給圖片使用反色。

 

面部檢測初步

 

CoreImage類中提供了一個CIDectetor類來給咱們提供兩種類型的檢測器。

其中一種便是面部檢測。

建立檢測器時傳入Type參數指定爲面部便可,options中能夠傳入一個檢測精度。

 

 

下面是返回圖片中全部左眼位置、右眼位置以及嘴部位置的方法。

 

左眼:

右眼:

嘴部:

這篇博客介紹了CoreImage出現以來最基本的幾個濾鏡。

以後會對這個濾鏡處理工具繼續進行擴充。

 

Demo下載

CSDN資源:點擊打開連接

GitHub倉庫:點擊打開連接

 

 

以上就是本篇博客的所有內容,歡迎指正和交流~轉載註明出處~

相關文章
相關標籤/搜索