GPUImage圖片處理的使用

關於GPUImage

這裏直接引用官方描述: The GPUImage framework is a BSD-licensed iOS library that lets you apply GPU-accelerated filters and other effects to images, live camera video, and movies. In comparison to Core Image (part of iOS 5.0), GPUImage allows you to write your own custom filters, supports deployment to iOS 4.0, and has a simpler interface. However, it currently lacks some of the more advanced features of Core Image, such as facial detection.算法

內容大意爲:GPUImage是使用GPU處理圖像的、他能夠對圖片、實時畫面、視頻進行處理。他容許你自定義濾鏡、支持iOS4.0。然而,目前缺少核心形象的一些更高級的功能,好比面部檢測。app

GPUImage是一個基於GPU圖像和視頻處理的開源iOS框架,提供各類各樣的圖像處理濾鏡,而且支持照相機和攝像機的實時濾鏡; 基於GPU的圖像加速,所以能夠加速對實時攝像頭視頻、電影以及image的濾鏡和其它效果處理,而且可以自定義圖像濾鏡。 GPUImage支持ARC。框架

使用GPUImage處理圖片比Core Image更簡單,只須要將過濾器賦給圖片對象便可,不用考慮context或者設備等其餘問題。GPUImage提供了除高斯模糊外的其餘幾種不一樣效果的模糊,雖然Core Image也提供了幾種模糊效果,但目前在iOS上能用的就只有高斯模糊,而GPUImage可用的有FastBlur, GaussianBlur, GaussianSelectiveBlur 和 BoxBlur。GPUImage還支持自定義的過濾器。ide

濾鏡基本原理

濾鏡處理的原理就是把靜態圖片或者視頻的每一幀進行圖形變換再顯示出來。它的本質就是像素點的座標和顏色變化。學習

圖像處理流程

數據源須要實現GPUImageOutput接口,然後續各個環節(包括最後處理輸出結果)的對象都要實現GPUImageInput接口。每一個處理環節都是從上一個環節獲取圖像數據,進行處理後再將結果傳遞給下一個。下游的處理對象稱爲上一步的target。使用addTarget:方法爲處理鏈路添加每一個環節的對象。一個常見的鏈條以下:數據源(例如GPUImageVideoCamera或者GPUImageMovie,或GPUImageStillCamera,或GPUImagePicture )->各種filter->GPUImageView若是須要將結果輸出到文件,只要把上述流程中最末的GPUImageView改成一個GPUImageMovieWriter便可。ui

使用步驟:

方法一:編譯成靜態庫,而後導入.a靜態庫和usr文件夾 方法二:解壓文件,在解壓好的文件夾中有個bulid.sh文件,打開終端google

cd GPUImage的文件夾位置

而後將bulid.sh文件拖入到終端中,運行設計

3.添加code

運行以後,文件夾中會多出一個名爲bulid的文件夾,在此文件夾中找到 release-iPhone文件夾。在該文件夾下有兩個文件,將這兩個文件夾拷貝到所要添加的工程中;視頻

4.導入所需庫 添加下面這些系統framework: CoreMedia CoreVideo OpenGLES AVFoundation QuartzCore

GUPImage裏有一張標準圖以下 標準圖

設計師用 Photoshop 調出來的色彩效果輸出在了這種「格子圖」上,在 App 裏經過解析「格子圖」獲得了色彩的變化規則,而後把這個規則應用在了圖片/視頻上,這種規則就是一種濾鏡的算法。注意,這裏只能進行顏色上的調整(曲線,色彩平衡等),其餘效果調整也只限於利用圖層間混合模式的更改,例如可作暗角、漏光等效果。

GPUImage中自帶三種這樣的濾鏡GPUImageAmatorkaFilter,這個濾鏡就是lookup_amatorka.png 參照基本圖在PS上作出來的、GPUImageMissEtikateFilter、GPUImageSoftEleganceFilter,根據這樣的方法,把標準圖給設計師,設計師添加完產品須要的調色動做,把新圖導入程序,調用上面GPUImage中的方法,就獲得了想要的濾鏡。

使用過程當中遇到的一些問題:

-[UIView nextAvailableTextureIndex]: unrecognized selector sent to instance 0x16658d00

在storyboard裏面把viewControl的view的類改成GPUImageView!!否則會報錯,這也是煩擾了我半天的問題!google到了stackOverFlow才找到的答案。。 若是還報錯,看看target-build setting裏面,other linker flags 裏面是否添加了 -fobjc-arc -ObjC 這兩項

5.若是程序運行時在[[[GPUImageContextsharedImageProcessingContext] context] renderbufferStorage:GL_RENDERBUFFER fromDrawable:(CAEAGLLayer*)self.layer]; 出現EXC_BAD_ACCESS。 須要修改Product->Scheme->Edit Scheme->Options->GPU Frame Capture 選擇 Disabled。

最後

若是你最近的工做很閒,注意了,這多是危機的先兆!

你們若是想看更多幹貨能夠幫忙點個關注跟喜歡,其實做爲一個開發者,有一個氛圍良好的學習交流圈子很重要,你們能夠加入個人一個iOS交流羣656315826,你們一塊兒交流成長!

相關文章
相關標籤/搜索