此次的文章是我對濾鏡效果一個學習,文章的文字比較少,花的主要功夫其實都在代碼裏面。demo的連接在下文已經給出了。git
下面是咱們經常使用的使用濾鏡的場景github
我簡單的查了一下,可使用CoreImage,也可使用GPUImage來實現。
我此次主要說的是是使用GPUImage來實現濾鏡效果。框架
GPUImage這個框架有多強大我就再也不贅述了,想必你們也瞭解到了,畢竟這是當前作濾鏡此類功能最流行的框架。學習
咱們從一個例子來入手吧,下面是給已有圖片添加濾鏡的例子。你們能夠先看一眼這個圖。spa
這張圖呢,是給已有的圖片添加濾鏡效果的一個大概流程圖,咱們在拿到一個原始的圖片,先用它來生成一個GPUImagePicture,而後建立咱們須要的濾鏡,而後用濾鏡來處理咱們GPUImagePicture,最後,能夠從這個filter類中取處處理後的圖片。就這麼簡單code
我簡單的寫了一下代碼,你們請看視頻
// 原圖 UIImage *inputImage = [UIImage imageNamed:@"WID-small.jpg"]; // 生成GPUImagePicture _sourcePicture = [[GPUImagePicture alloc] initWithImage:inputImage smoothlyScaleOutput:YES]; // 隨便用一個濾鏡 _sepiaFilter = [[GPUImageTiltShiftFilter alloc] init]; // 若是要顯示話,得建立一個GPUImageView來進行顯示 GPUImageView * imageView = [[GPUImageView alloc] initWithFrame:self.view.bounds]; self.view = imageView; // [_sepiaFilter forceProcessingAtSize:imageView.sizeInPixels]; // 我的理解,這個add其實就是把_sourcePicture給_sepiaFilter來處理 [_sourcePicture addTarget:_sepiaFilter]; // 用這個imageView來顯示_sepiaFilter處理的效果 [_sepiaFilter addTarget:imageView]; // 開始! [_sourcePicture processImage];
一個濾鏡效果就這樣簡單的實現了。圖片
其餘的場景跟這種狀況的原理也是相同的,整個添加濾鏡的過程你們能夠理解成分爲三部分。rem
第一部分,就是輸入的數據,無論是實時的數據,仍是已經存在的數據,都算做輸入。get
第二部分就是濾鏡,GPUImage這個框架給咱們提供了大量的濾鏡效果了,咱們能夠根據咱們的須要選擇使用,若是全部的不知足,濾鏡還能夠自定義。濾鏡拿到咱們的輸入的原始數據進行處理。
第三部分就是輸出,咱們在作濾鏡的效果時,確定是要讓用戶能看到添加了濾鏡以後的效果是什麼樣子的,因此咱們須要顯示處理後的數據。
這三部分的實現GPUImage爲咱們封裝好了對應的類,咱們只須要按需使用就能夠。
我參考了網上的文章和GPUImage的官方demo以後,把幾種經常使用場景的是實現彙總了一下。
你們能夠去下載這個代碼,算是GPUImage使用的簡單入門。
https://github.com/Sunxb/GPUI...
demo裏面包括咱們這這經常使用場景的實現,而後我還寫了混合濾鏡的使用,還有一些其餘細節的東西。
GPUImage入門很簡單,但畢竟這麼強大的框架,要學透仍是要咱們在平常的使用中繼續的探索了。一塊兒加油。