iOS 開發中如何使用半透明模糊效果
雖然iOS很早就支援使用模糊效果對圖片等進行處理,但尤其在iOS7以後,半透明模糊效果得到大範圍廣泛使用。包括最新發布的iOS8也沿襲了這一設計,甚至在OS X 10.10版Yosemite中也開始大量使用半透明模糊。
在iOS開發當中,我們有很多選擇可以做半透明模糊效果,下面就是一些常見的方式或者說工具。
0. 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也做了更多支援。
1. 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的情況簡單得多。
2. vImage
其實,說完上面的Core Image和GPUImage,很多情況下就已經足夠用了。下面我們再來看一個,那就是vImage。vImage也是蘋果推出的庫,在Accelerate.framework中。
Accelerate這個framework主要是用來做數字訊號處理、影像處理相關的向量、矩陣運算的庫。我們可以認為我們的影像都是由向量或者矩陣資料構成的,Accelerate裡既然提供了高效的數學運算API,自然就能方便我們對影像做各種各樣的處理。
基於vImage我們可以根據影像的處理原理直接做模糊效果,或者使用現有的工具。UIImage+ImageEffects是個很好的影像處理庫,看名字也知道是對UIImage做的分類擴充套件。這個工具在iOS開發中被廣泛地使用著。
3. 效能與選擇
既然已經知道了3個方法做到半透明模糊效果,那麼我們要用的時候應該選擇哪個呢?這是個問題。
從系統版本的支援上來看,這幾個都差不多,都是iOS4、iOS5就支援了的,對於身在iOS8時代的開發者,這點相容已經夠了。
Core Image是蘋果自己的影像處理庫,本來就不錯,如果蘋果自身在某個版本做了優化處理,自然更好。主要是用起來比較麻煩,還要知道Filter的名字。
GPUImage來自第三方,但實現開放,用起來也比較簡單,在很多場景下是由於Core Image的選擇。
影像模糊處理是很複雜的計算,最終往往要看效能。這點上看,我更傾向選擇vImage。
在iOS開發中,選擇vImage,主要是從效能出發,這並不是說有非常精確的benchmark。但在幾個除錯時的主流機型上測,包括5c、5s等,在模糊半徑(blur radius)達到10左右的時候,配合動畫,vImage的處理時間會明顯比較短,不會“卡頓”。
想了解更多關於ios方面的知識請加qq:2296575155
相關文章
- 關於iOS開發中copy的使用iOS
- iOS開發UI篇--使用UICollectionView實現一個傾斜列表效果iOSUIView
- iOS 粒子發射效果iOS
- iOS開發基礎144-逐字列印效果iOS
- 玩轉iOS開發:iOS中的NSOperation開發(一)iOS
- iOS開發UI篇--使用UICollectionView實現一個列表頭部拉伸效果的案例iOSUIView
- Mediator(中介者)模式在iOS開發當中的使用模式iOS
- 小視訊原始碼,CSS 實現半透明邊框效果原始碼CSS
- iOS開發之XLForm的使用iOSORM
- 【iOS 開發】iOS 10.3 如何更換 app 圖示iOSAPP
- CSS3文字模糊效果CSSS3
- 玩轉iOS開發:iOS開發中的裝逼技術 – RunTime(一)iOS
- 玩轉iOS開發:iOS開發中的裝逼技術 – RunTime(二)iOS
- 如何在AE2022中使用 Keylight 效果?
- iOS開發Settings.bundle的使用iOS
- iOS開發之UIRefreshControl使用踩坑iOSUI
- iOS開發之使用Git的基本使用(二)iOSGit
- iOS開發之使用Git的基本使用(一)iOSGit
- iOS開發如何避免安全隱患iOS
- [譯]iOS開發者在Swift中應避免過度使用@objciOSSwiftOBJ
- iOS開發中的幾種鎖iOS
- iOS 工程開發中的 Code ReviewiOSView
- 「Premiere中文新手教程」速度感模糊效果REM
- 從0開發一個iOS企業級專案效果介紹iOS
- Android開發中陰影效果的實現Android
- [iOS開發]Carthage安裝和使用教程iOS
- iOS開發-UITabbarController的介紹與使用iOSUItabBarController
- iOS開發中,whistle的安裝使用及模擬器代理配置iOS
- 直播app開發,flutter 狀態列 AppBar 設定透明和半透明APPFlutter
- iOS 開發iOS
- 微信小程式如何開發跑馬燈效果?微信小程式
- 短視訊商城在ios短視訊開發上的應用效果iOS
- 直播平臺原始碼,用CSS製作毛玻璃效果(高斯模糊效果)原始碼CSS
- iTerm2 如何設定半透明視窗?
- CSS滑鼠懸浮圖片模糊切換效果CSS
- Mysql使用like全模糊和半模糊, Explain分析後的結果如何選擇?MySqlAI
- iOS開發-使用Safari除錯iOS APP H5頁面iOS除錯APPH5
- 【iOS開發】iOS App的加固保護原理:使用ipaguard混淆加固iOSAPP