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

雖然iOS很早就支持使用模糊效果對圖片等進行處理,但尤爲在iOS7之後,半透明模糊效果獲得大範圍普遍使用。包括今年最新發布的iOS8也沿襲了這一設計,甚至在OS
X 10.10版Yosemite中也開始大量使用半透明模糊。工具

在iOS開發當中,咱們有不少選擇能夠作半透明模糊效果,下面就是一些常見的方式或者說工具。
  1. 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」,這裏有一個官方列表能夠參看。code

    除了這裏提到的多種Filter以外,Core Image還提供了CIDetector等類,能夠支持人臉識別等,在OS X上Core Image也作了更多支持。圖片

  2. GPUImage開發

    除了蘋果官方提供的以外,第三方也有這方面圖片處理的工具。一個叫Brad Larson的老兄就搞了一套叫作GPUImage的開源庫。一樣的,裏面提供了不少Filter。圖片處理

    一樣是作高斯模糊,用GPUImage能夠這樣:

    GPUImageGaussianBlurFilter * blurFilter = [[GPUImageGaussianBlurFilter alloc] init];
    blurFilter.blurRadiusInPixels = 2.0;
    UIImage * image = [UIImage imageNamed:@"xxx"];
    UIImage *blurredImage = [blurFilter imageByFilteringImage:image];
    至少看起來,代碼上比使用Core Image的狀況簡單得多。

  3. vImage

    其實,說完上面的Core Image和GPUImage,不少狀況下就已經足夠用了。下面咱們再來看一個,那就是vImage。vImage也是蘋果推出的庫,在Accelerate.framework中。

    Accelerate這個framework主要是用來作數字信號處理、圖像處理相關的向量、矩陣運算的庫。咱們能夠認爲咱們的圖像都是由向量或者矩陣數據構成的,Accelerate裏既然提供了高效的數學運算API,天然就能方便咱們對圖像作各類各樣的處理。

    基於vImage咱們能夠根據圖像的處理原理直接作模糊效果,或者使用現有的工具。UIImage+ImageEffects是個很好的圖像處理庫,看名字也知道是對UIImage作的分類擴展。這個工具被普遍地使用着。

  4. 性能與選擇

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

    從系統版本的支持上來看,這幾個都差很少,都是iOS四、iOS5就支持了的,對於身在iOS8時代的開發者,這點兼容已經夠了。

    Core Image是蘋果本身的圖像處理庫,原本就不錯,若是蘋果自身在某個版本作了優化處理,天然更好。主要是用起來比較麻煩,還要知道Filter的名字。

    GPUImage來自第三方,但實現開放,用起來也比較簡單,在不少場景下是因爲Core Image的選擇。

    圖像模糊處理是很複雜的計算,最終每每要看性能。這點上看,我更傾向選擇vImage。

    在本人開發的iOS應用中,選擇了vImage,出發點是性能,這並非說有很是精確的benchmark。但在幾個調試時的主流機型上測,包括5c、5s等,在模糊半徑(blurradius)達到10左右的時候,配合動畫,vImage的處理時間會明顯比較短,不會「卡頓」。

相關文章
相關標籤/搜索