iOS開發使用半透明模糊效果方法整理

2021-09-19 10:08:44 字數 2492 閱讀 1113

雖然ios很早就支援使用模糊效果對等進行處理,但尤其在ios7以後,半透明模糊效果得到大範圍廣泛使用。包括今年最新發布的ios8也沿襲了這一設計,甚至在os

x 10.10版yosemite中也開始大量使用半透明模糊。

在ios開發當中,我們有很多選擇可以做半透明模糊效果,下面就是一些常見的方式或者說工具。
core image

作為設計和體驗方面的領導者,蘋果自己對效果和處理的支援一定是非常好的,在ios平台上,5.0之後就出現了core image的api。core image的api被放在coreimage.framework庫中。

在ios和os x平台上,core image都提供了大量的濾鏡(filter),這也是core image庫中比較核心的東西之一。按照官方文件記載,在os x上有120多種filter,而在ios上也有90多。

下面是一段core image做模糊的示例**:

cicontext *context = [cicontext contextwithoptions:nil];

ciimage *image = [ciimage imagewithcontentsofurl:imageurl];

cifilter *filter = [cifilter filterwithname:@"cigaussianblur"];

[filter setvalue:image forkey:kciinputimagekey];

[filter setvalue:@2.0f forkey: @"inputradius"];

ciimage *result = [filter valueforkey:kcioutputimagekey];

cgimageref outimage = [context createcgimage: result fromrect:[result extent]];

uiimage * blurimage = [uiimage imagewithcgimage:outimage];

這裡可以看到,core image為了做得比較靈活,filter都是按字串的名字去建立的,比如高斯模糊濾鏡就是「cigaussianblur」,這裡有乙個官方列表可以參看。

除了這裡提到的多種filter之外,core image還提供了cidetector等類,可以支援人臉識別等,在os x上core image也做了更多支援。

gpuimage

除了蘋果官方提供的之外,第三方也有這方面處理的工具。乙個叫brad larson的老兄就搞了一套叫做gpuimage的開源庫。同樣的,裡面提供了很多filter。

同樣是做高斯模糊,用gpuimage可以這樣:

gpuimagegaussianblurfilter * blurfilter = [[gpuimagegaussianblurfilter alloc] init];

blurfilter.blurradiusinpixels = 2.0;

uiimage * image = [uiimage imagenamed:@"***"];

uiimage *blurredimage = [blurfilter imagebyfilteringimage:image];

至少看起來,**上比使用core image的情況簡單得多。

vimage

其實,說完上面的core image和gpuimage,很多情況下就已經足夠用了。下面我們再來看乙個,那就是vimage。vimage也是蘋果推出的庫,在accelerate.framework中。

accelerate這個framework主要是用來做數字訊號處理、影象處理相關的向量、矩陣運算的庫。我們可以認為我們的影象都是由向量或者矩陣資料構成的,accelerate裡既然提供了高效的數**算api,自然就能方便我們對影象做各種各樣的處理。

基於vimage我們可以根據影象的處理原理直接做模糊效果,或者使用現有的工具。uiimage+imageeffects是個很好的影象處理庫,看名字也知道是對uiimage做的分類擴充套件。這個工具被廣泛地使用著。

效能與選擇

既然已經知道了3個方法做到半透明模糊效果,那麼我們要用的時候應該選擇哪個呢?這是個問題。

從系統版本的支援上來看,這幾個都差不多,都是ios4、ios5就支援了的,對於身在ios8時代的開發者,這點相容已經夠了。

core image是蘋果自己的影象處理庫,本來就不錯,如果蘋果自身在某個版本做了優化處理,自然更好。主要是用起來比較麻煩,還要知道filter的名字。

gpuimage來自第三方,但實現開放,用起來也比較簡單,在很多場景下是由於core image的選擇。

影象模糊處理是很複雜的計算,最終往往要看效能。這點上看,我更傾向選擇vimage。

在本人開發的ios應用中,選擇了vimage,出發點是效能,這並不是說有非常精確的benchmark。但在幾個除錯時的主流機型上測,包括5c、5s等,在模糊半徑(blur

radius)達到10左右的時候,配合動畫,vimage的處理時間會明顯比較短,不會「卡頓」。

iOS開發使用半透明模糊效果方法整理

雖然ios很早就支援使用模糊效果對等進行處理,但尤其在ios7以後,半透明模糊效果得到大範圍廣泛使用。包括今年最新發布的ios8也沿襲了這一設計,甚至在os x 10.10版yosemite中也開始大量使用半透明模糊。在ios開發當中,我們有很多選擇可以做半透明模糊效果,下面就是一些常見的方式或者說...

iOS開發使用半透明模糊效果方法整理

雖然ios很早就支援使用模糊效果對等進行處理,但尤其在ios7以後,半透明模糊效果得到大範圍廣泛使用。包括今年最新發布的ios8也沿襲了這一設計,甚至在os x 10.10版yosemite中也開始大量使用半透明模糊。在ios開發當中,我們有很多選擇可以做半透明模糊效果,下面就是一些常見的方式或者說...

OC IOS開發使用半透明模糊效果方法合集

雖然ios很早就支援使用模糊效果對等進行處理,在ios7以後,半透明模糊效果得到大範圍廣泛使用。包括今年最新發布的ios8也沿襲了這一設計,甚至在os x 10.10以後也大量使用半透明模糊。在ios開發當中,我們有很多選擇可以做半透明模糊效果,下面就說一下常用的方式,工具。0.core image...