iOS开发使用半透明模糊效果方法整理
轉(zhuǎn)載:http://www.cocoachina.com/ios/20141223/10731.html
?
?
雖然iOS很早就支持使用模糊效果對(duì)圖片等進(jìn)行處理,但尤其在iOS7以后,半透明模糊效果得到大范圍廣泛使用。包括今年最新發(fā)布的iOS8也沿襲了這一設(shè)計(jì),甚至在OS X 10.10版Yosemite中也開(kāi)始大量使用半透明模糊。
在iOS開(kāi)發(fā)當(dāng)中,我們有很多選擇可以做半透明模糊效果,下面就是一些常見(jiàn)的方式或者說(shuō)工具。
0. Core Image
作為設(shè)計(jì)和體驗(yàn)方面的領(lǐng)導(dǎo)者,蘋(píng)果自己對(duì)圖片效果和圖片處理的支持一定是非常好的,在iOS平臺(tái)上,5.0之后就出現(xiàn)了Core Image的API。Core Image的API被放在CoreImage.framework庫(kù)中。
在iOS和OS X平臺(tái)上,Core Image都提供了大量的濾鏡(Filter),這也是Core Image庫(kù)中比較核心的東西之一。按照官方文檔記載,在OS X上有120多種Filter,而在iOS上也有90多。
下面是一段Core Image做模糊的示例代碼:
| 1 2 3 4 5 6 7 8 | 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都是按字符串的名字去創(chuàng)建的,比如高斯模糊濾鏡就是“CIGaussianBlur”,這里有一個(gè)官方列表可以參看。
除了這里提到的多種Filter之外,Core Image還提供了CIDetector等類(lèi),可以支持人臉識(shí)別等,在OS X上Core Image也做了更多支持。
1. GPUImage
除了蘋(píng)果官方提供的之外,第三方也有這方面圖片處理的工具。一個(gè)叫Brad Larson的老兄就搞了一套叫做GPUImage的開(kāi)源庫(kù)。同樣的,里面提供了很多Filter。
同樣是做高斯模糊,用GPUImage可以這樣:
| 1 2 3 4 | GPUImageGaussianBlurFilter?*?blurFilter?=?[[GPUImageGaussianBlurFilter?alloc]?init]; blurFilter.blurRadiusInPixels?=?2.0; UIImage?*?image?=?[UIImage?imageNamed:@"xxx"]; UIImage?*blurredImage?=?[blurFilter?imageByFilteringImage:image]; |
至少看起來(lái),代碼上比使用Core Image的情況簡(jiǎn)單得多。
2. vImage
其實(shí),說(shuō)完上面的Core Image和GPUImage,很多情況下就已經(jīng)足夠用了。下面我們?cè)賮?lái)看一個(gè),那就是vImage。vImage也是蘋(píng)果推出的庫(kù),在A(yíng)ccelerate.framework中。
Accelerate這個(gè)framework主要是用來(lái)做數(shù)字信號(hào)處理、圖像處理相關(guān)的向量、矩陣運(yùn)算的庫(kù)。我們可以認(rèn)為我們的圖像都是由向量或者矩陣數(shù)據(jù)構(gòu)成的,Accelerate里既然提供了高效的數(shù)學(xué)運(yùn)算API,自然就能方便我們對(duì)圖像做各種各樣的處理。
基于vImage我們可以根據(jù)圖像的處理原理直接做模糊效果,或者使用現(xiàn)有的工具。UIImage+ImageEffects是個(gè)很好的圖像處理庫(kù),看名字也知道是對(duì)UIImage做的分類(lèi)擴(kuò)展。這個(gè)工具被廣泛地使用著。
3. 性能與選擇
既然已經(jīng)知道了3個(gè)方法做到半透明模糊效果,那么我們要用的時(shí)候應(yīng)該選擇哪個(gè)呢?這是個(gè)問(wèn)題。
從系統(tǒng)版本的支持上來(lái)看,這幾個(gè)都差不多,都是iOS4、iOS5就支持了的,對(duì)于身在iOS8時(shí)代的開(kāi)發(fā)者,這點(diǎn)兼容已經(jīng)夠了。
Core Image是蘋(píng)果自己的圖像處理庫(kù),本來(lái)就不錯(cuò),如果蘋(píng)果自身在某個(gè)版本做了優(yōu)化處理,自然更好。主要是用起來(lái)比較麻煩,還要知道Filter的名字。
GPUImage來(lái)自第三方,但實(shí)現(xiàn)開(kāi)放,用起來(lái)也比較簡(jiǎn)單,在很多場(chǎng)景下是由于Core Image的選擇。
圖像模糊處理是很復(fù)雜的計(jì)算,最終往往要看性能。這點(diǎn)上看,我更傾向選擇vImage。
在本人開(kāi)發(fā)的iOS應(yīng)用中,選擇了vImage,出發(fā)點(diǎn)是性能,這并不是說(shuō)有非常精確的benchmark。但在幾個(gè)調(diào)試時(shí)的主流機(jī)型上測(cè),包括5c、5s等,在模糊半徑(blur radius)達(dá)到10左右的時(shí)候,配合動(dòng)畫(huà),vImage的處理時(shí)間會(huì)明顯比較短,不會(huì)“卡頓”。
以上是本人對(duì)iOS上實(shí)現(xiàn)半透明模糊效果實(shí)現(xiàn)的整理。
轉(zhuǎn)載于:https://www.cnblogs.com/yunis/p/4181700.html
總結(jié)
以上是生活随笔為你收集整理的iOS开发使用半透明模糊效果方法整理的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 如何在MyEclipse中将项目部署To
- 下一篇: 通过邮箱验证注册——.net代码