使用iOS原生框架實現實時濾鏡效果

2021-06-09 13:49:21 字數 1083 閱讀 2454

從ios5開始,原先僅支援macos的影象處理框架:coreimage就已經提供給了ios開發者,意味著ios裝置上從此也可以很容易就能處理的各種效果,色彩,**,飽和度,變形神馬的,然而蘋果關於這個的官方文件不怎麼完善也沒有示例**,所以大家很少用它。    

然而濾鏡效果是乙個屬於門檻比較高的影象處理領域的問題,需要複雜的rgb、hsv、yuv等顏色空間矩陣的各種變換疊加演算法來實現。普通開發者不可能自己實現這類濾鏡函式,同時開源的資源又不多大家能搜尋到的就那麼幾個,即便gpuimage可以出實時的進行濾鏡疊加。

其實並不像個開源社群所描述的只有gpuimage能達到實時濾鏡的目的,ios原生框架就可以!而且非常簡單,在2011,2012的wwdc上都有提到過。通過corevideo提供實時影象資料,通過coreimage轉化成疊加了濾鏡效果的影象,並「有效」的呈現到顯示屏上。

關於如何有效呈現,如果是通常的處理辦法,應用層會將得到的資源推到opengl層進行處理,然後再返回給應用層,應用層將設定給ui控制項後,再推給opengl層才最終顯示到螢幕上。這中間的image i/o自然會產生一些的資源消耗和時間浪費。對於一般的靜態展示沒問題,但是如果想要實時重新整理的fps達到30左右或以上的(我個人測試來看,達到這個數值標準基本上就是流暢的),對於老裝置(iphone4及以下)來說就不可能,反映出來的就是非常的卡,我想gpuimage也是在這種條件下進行的實驗比對吧。

較高效的處理辦法就是,由應用層將資源傳給opengl層進行處理完畢後,直接顯示到螢幕上。達到這個目的就不能用通常的uiview中的calayer來載入資源,而是需要eagllayer,通過它來影象資料buffer渲染到螢幕上。經測試工具coreanimation顯示,iphone4能將常用濾鏡sepia tone跑到31,對於4s來說更不在話下。因此通過gles層來直接渲染影象非常關鍵。

coreimage在ios5中提供49種濾鏡,ios6是94個,這些濾鏡很多又可以任意疊加,理論上可以實現非常多的濾鏡效果。而且mac os上目前支援一百多種濾鏡,相信未來會酌情陸續移植到ios上來。自己寫或是使用一些濾鏡編輯器,開發者可以方便直觀的調配濾鏡引數,如果有個美術幫忙,那就更方便了。所以從開發的穩定性,擴充套件性,易用性,維護性等角度來看,採用原生框架實現實時濾鏡的技術優勢是不言而喻的。

redis排重 使用Redis實現實時排名

redis用途很廣泛,分布式使用者session快取 爬蟲url佇列 活動頁面的動態列表資訊等。使用redis實現排行榜系統也是很常見的方案。假如設計乙個積分排名系統。如果積分資料都存放在資料庫中,積分的更新是動態的,每次訪問排行頁面都需要對資料進行重新排序,在真實的產品應用中幾乎是不可接受的。re...

PHP使用swoole來實現實時非同步任務佇列

使用者開啟了我們的 他要做的就是勾選需要發郵件的 商列表,然後把結算郵件發出去。假如我們需要發1封郵件,我們寫個函式執行即可。考慮到網路可能會稍微有點延遲,但是是可以接受的,使用者會乖乖等你的網頁發完郵件了再關閉網頁。假如我們要發布10封郵件,用乙個for迴圈,迴圈10遍執行發郵件操作。這時候,也許...

使用c語言easy x庫實現實時鐘錶

include這是最終的效果圖 新建畫布 initgraph width,high width,high在開頭定義為常量 在畫布 繪製乙個圓 定義圓心座標為 width 2,high 2 int center x width 2 int center y high 2 繪製乙個圓,顏色為藍色,半徑為...