日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

iOS 使用GPUImage实现iOS 7的模糊效果

發(fā)布時(shí)間:2025/3/17 编程问答 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 iOS 使用GPUImage实现iOS 7的模糊效果 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

iOS 7在視覺(jué)方面有許多改變,其中非常吸引人的功能之一就是在整個(gè)系統(tǒng)中巧妙的使用了模糊效果。許多第三方應(yīng)用程序已經(jīng)采用了這樣的設(shè)計(jì)細(xì)節(jié),并以各種奇妙的和具有創(chuàng)造性的方式使用它。
?
本文將通過(guò)幾種不同的技術(shù)來(lái)實(shí)現(xiàn)iOS 7中的模糊效果,當(dāng)然,這一切都利用了一個(gè)名為GPUImage的框架。
?
GPUImage是由Brad Larson創(chuàng)建的,它利用GPU,使在圖片和視頻上應(yīng)用不同的效果和濾鏡變得非常的容易,同時(shí)它還擁有出色的性能,并且它的性能要比蘋(píng)果內(nèi)置的相關(guān)APIs出色。
?
注意:本文需要一臺(tái)物理設(shè)備來(lái)編譯并運(yùn)行示例程序(在模擬器上無(wú)法使用)。同樣還需要一個(gè)iOS開(kāi)發(fā)者賬號(hào)。如果你還沒(méi)有開(kāi)發(fā)者賬號(hào)的話,可以來(lái)[這里](https://developer.apple.com/)注冊(cè)一個(gè)。注冊(cè)為開(kāi)發(fā)者之后,會(huì)有許多福利喲,例如可以使用物理設(shè)備來(lái)開(kāi)發(fā)程序,提前獲得蘋(píng)果的相關(guān)測(cè)試版程序,以及大量的開(kāi)發(fā)資源。

iOS中利用GPUImage實(shí)現(xiàn)模糊效果
下面我們先來(lái)看看本文的目錄結(jié)構(gòu):
開(kāi)始
為什么要是用模糊效果
深度引導(dǎo)
上下文
關(guān)注度
添加靜態(tài)的模糊效果
創(chuàng)建截圖Category
利用斷點(diǎn)測(cè)試截屏圖片
顯示截屏圖片
設(shè)置contentsRect
重置模糊濾鏡
對(duì)齊背景圖片
實(shí)時(shí)模糊
線程中簡(jiǎn)潔的分支
一些潛在的實(shí)時(shí)模糊方案
一個(gè)折中的方法——對(duì)視頻實(shí)時(shí)模糊
利用GPUImage對(duì)視頻進(jìn)行模糊處理
何去何從?
?
開(kāi)始
首先先來(lái)這里下載本文的starter工程,并將其解壓出來(lái)。
?
用Xcode打開(kāi)Video Blurring.xcodeproj,并將工程運(yùn)行到設(shè)備中。此時(shí)看到程序的效果如下所示:

點(diǎn)擊屏幕左上角的菜單(三條橫紋),可以看到界面中出現(xiàn)兩個(gè)選項(xiàng):錄制視頻和播放已有視頻。
?
請(qǐng)注意,現(xiàn)在所有的用戶界面都有一個(gè)灰色的背景,是不是感覺(jué)有點(diǎn)沉悶?zāi)?#xff0c;本文我們就利用iOS 7中的模糊效果來(lái)替換掉這些沉悶的灰色背景。
?
為什么要是用模糊效果
除了外觀看起來(lái)很棒以外,模糊效果還可以讓程序給用戶帶來(lái)3個(gè)重要的概念:深度引導(dǎo)、上下文和關(guān)注度。
?
深度引導(dǎo)
在用戶界面上,模糊效果可以給用戶提供一個(gè)深度引導(dǎo)效果,并且有利于用戶對(duì)程序?qū)Ш降睦斫狻T谥暗膇OS版本中的深度引導(dǎo)效果是通過(guò):三維斜面(three-dimensional bevels)和有關(guān)澤的按鈕(反映出一個(gè)模擬的光源),而在iOS 7中是通過(guò)模糊和視差(parallax)來(lái)實(shí)現(xiàn)的。
?
這里說(shuō)的視差效果,可以很明顯的觀察出來(lái):在裝有iOS 7的設(shè)備中,將設(shè)備從一側(cè)傾斜至另一側(cè),會(huì)發(fā)現(xiàn)設(shè)備中的圖標(biāo)在移動(dòng)(會(huì)獨(dú)立于背景)。這樣可以給用戶做出一個(gè)提示:界面是由不同的層構(gòu)成的,并且重要的界面元素是在最前面的——這也涉及到下面將要介紹的一個(gè)概念:上下文。
?
上下文
上下文可以讓用戶在程序內(nèi)獲得一種軸承的感覺(jué)。動(dòng)畫(huà)的過(guò)度效果就提供了一種非常優(yōu)秀的上下文,當(dāng)用戶點(diǎn)擊一個(gè)按鈕時(shí),在兩個(gè)view之間利用動(dòng)畫(huà)效果來(lái)切換畫(huà)面(而不是直接顯示一個(gè)新的view),可以讓用戶知道新的view是從哪里出現(xiàn)的,并且可以讓用戶很容易知道如何回到上一個(gè)view。
?
模糊效果可以將上一個(gè)view當(dāng)做背景顯示出來(lái),盡管上一個(gè)view已經(jīng)失去焦點(diǎn)了,不過(guò)可以給用戶提供更多的上下文:剛剛是在哪里。通知中心就是一個(gè)非常棒的例子:當(dāng)拉下通知中心時(shí),我們可以在背景中看到原來(lái)的view(即使現(xiàn)在正在處于通知中心界面)。
?
關(guān)注度
讓界面更加關(guān)注于某些選擇項(xiàng)上,而移除不需要的內(nèi)容,讓用戶可以更加快捷的進(jìn)行導(dǎo)航。用戶可以本能的忽略那些被模糊的界面元素,而將注意力集中到某些界面元素中。
?
通過(guò)本文,你將學(xué)到兩種模糊類型的實(shí)現(xiàn)方法:靜態(tài)模糊和動(dòng)態(tài)模糊。靜態(tài)模糊代表著快照的時(shí)間點(diǎn),它并不能反映被模糊界面元素的變化。大多數(shù)情況下,使用靜態(tài)模糊效果就足夠了。相反,動(dòng)態(tài)模糊則是對(duì)需要模糊的背景做出實(shí)時(shí)更新。
?
相信看到具體的效果才是最好的,下面我們就來(lái)看看模糊效果的具體實(shí)現(xiàn)吧!
?
添加靜態(tài)的模糊效果
創(chuàng)建一個(gè)靜態(tài)模糊效果首先是將當(dāng)前屏幕中的view轉(zhuǎn)換為一幅圖片。獲得圖片之后,只需要對(duì)圖片做模糊處理就可以了。將view轉(zhuǎn)換為一幅圖片(截屏)蘋(píng)果已經(jīng)提供了一些非常棒的APIs了,并且在iOS 7中又有了新的方法可以讓截屏更加快速。
?
這些新的方法屬于截屏APIs中的一部分,截屏APIs不僅可以對(duì)某個(gè)view截屏,還能把整個(gè)view層次截屏,如果你希望對(duì)某個(gè)view截屏,那么可以把view中的按鈕、標(biāo)簽、開(kāi)關(guān)等各種view也進(jìn)行截屏。
?
此處我們將截屏的邏輯實(shí)現(xiàn)到UIView的一個(gè)category中。這樣一來(lái),我們就可以很方便快捷的將任意的view(以及view中的內(nèi)容)轉(zhuǎn)換為一個(gè)圖片——也算是代碼的重用吧。
?
創(chuàng)建截圖Category
打開(kāi)File/New/File...,然后選擇iOS/Cocoa Touch/Objective-C category,如下圖所示:

將這個(gè)category命名為Screenshot,并將它的category選為UIView,如下圖所示:

將下面這個(gè)方法聲明到UIView+Screenshot.h中:
-(UIImage *)convertViewToImage;
接著將如下方法添加到UIView+Screenshot.m中:
-(UIImage *)convertViewToImage
{
??? UIGraphicsBeginImageContext(self.bounds.size);
??? [self drawViewHierarchyInRect:self.bounds afterScreenUpdates:YES];
??? UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
??? UIGraphicsEndImageContext();
?
??? return image;
}
上面的方法中,首先調(diào)用了UIGraphicsBeginImageContext(),最后調(diào)用的是UIGraphicsEndImageContext(),這兩行代碼可以理解為圖形上下文的一個(gè)事物處理過(guò)程。一個(gè)上下文可以理解為不同的概念,例如屏幕,或者此處可以理解為一幅圖片。這里的兩行代碼起到一個(gè)離屏畫(huà)布的作用——可以將view繪制上去。
?
drawViewHierarchyInRect:afterScreenUpdates:方法利用view層次結(jié)構(gòu)并將其繪制到當(dāng)前的上下文中。
?
最后,UIGraphicsGetImageFromCurrentImageContext()從圖形上下文中獲取剛剛生成的UIImage。
?
現(xiàn)在,我們已經(jīng)完成了category的實(shí)現(xiàn),接著我們只需要在使用到的地方將其import一下即可。
?
如下代碼所示,將代碼添加到DropDownMenuController.m頂部:
#import "UIView+Screenshot.h"
同時(shí),將如下方法添加到相同的文件中:
-(void)updateBlur
{
??? UIImage *image = [self.view.superview convertViewToImage];
}
上面的代碼確保是對(duì)superview進(jìn)行截屏,而不僅僅是當(dāng)前的view。不這樣做的話,截屏獲得的圖片只是menu本身。
?
利用斷點(diǎn)測(cè)試截屏圖片
為了測(cè)試截屏的效果,我們?cè)赾onvertViewToImage調(diào)用的下面一行添加一個(gè)斷點(diǎn)。這樣當(dāng)命中斷點(diǎn)時(shí),程序會(huì)在斷點(diǎn)中暫停執(zhí)行,這樣我們就可以看到截屏的圖片,以此確保截屏代碼的正確性:

在測(cè)試之前還有一件事情需要做:調(diào)用上面這個(gè)方法。
?
找到show方法,并在addToParentViewController下面直接調(diào)用一下updateBlur:
-(void)show {
??? [self addToParentViewController];
?
??? [self updateBlur]; // Add this line
?
??? CGRect deviceSize = [UIScreen mainScreen].bounds;
?
??? [UIView animateWithDuration:0.25f animations:^(void){
??????? _blurView.frame = CGRectMake(0, 0, deviceSize.size.height, MENUSIZE);
??????? _backgroundView.frame = CGRectMake(0, 0, _backgroundView.frame.size.width, MENUSIZE);
??? }];
}
編譯并運(yùn)行程序,點(diǎn)擊菜單按鈕,可以看到Xcode在斷點(diǎn)出停止了,如下所示:

在debugger左下角hand pane中選擇image,然后單擊快速查找圖標(biāo)按鈕,就可以預(yù)覽剛剛的截屏啦:

如上圖所示,正是我們所預(yù)期的。
?
顯示截屏圖片
將截取到的圖片顯示到菜單的背景中就是小菜一碟啦。
?
一般來(lái)說(shuō)我們都會(huì)利用UIImageView來(lái)顯示一幅圖片,而由于我們要利用GPUImage來(lái)模糊圖片,所以需要使用GPUImageView。
?
在這里的工程中,已經(jīng)添加好了GPUImage框架,我們只需要將頭文件import一下即可。
?
將下面的代碼添加到DropDownMenuController.m頂部:
#import <GPUImage/GPUImage.h>
注意:GPUImage被包含在一個(gè)框架中,所以在import語(yǔ)句中,需要利用尖括弧,而不是雙引號(hào)。
?
此時(shí),有一個(gè)_blurView,類型為UIView——是菜單的灰色背景。將UIView修改為GPUImageView,如下所示:
@implementation DropDownMenuController {
??? GPUImageView *_blurView;
??? UIView *_backgroundView;
}
?修改之后,Xcode會(huì)報(bào)一個(gè)warning:大意是你利用UIView進(jìn)行實(shí)例化,而不是預(yù)期的GPUImageView。
?
可以通過(guò)下面的方法消除這個(gè)警告,在viewDidLad中修改做如下修改:
_blurView = [[GPUImageView alloc] initWithFrame:CGRectMake(0, 0, deviceSize.size.height, 0)];
緊隨其后,將如下兩行代碼添加進(jìn)去,并移除設(shè)置背景色的代碼:
_blurView.clipsToBounds = YES;
_blurView.layer.contentsGravity = kCAGravityTop;
clipToBounds屬性設(shè)置為YES,把超出_blurView范圍的子view隱藏起來(lái),而contentsGravity確保圖片出現(xiàn)在image view的頂部。
?
由于_blurView已經(jīng)用于背景了,所以此處不需要額外設(shè)置了。
?
接著,我們還需要聲明一個(gè)用于模糊效果的過(guò)濾器。
?
將如下代碼添加到DropDownMenuController.m:文件的@implementation中:
GPUImageiOSBlurFilter *_blurFilter;
?
找到之前添加的斷點(diǎn),右鍵單擊,并選中Delete Breakpoint:

下面是非常重要的一步了——初始化模糊濾鏡。將如下代碼添加到DropDownMenuController.m中:
-(void)updateBlur
{
??? if(_blurFilter == nil){
??????? _blurFilter = [[GPUImageiOSBlurFilter alloc] init];
???????? _blurFilter.blurRadiusInPixels = 1.0f;
?
??? }
?
??? UIImage *image = [self.view.superview convertViewToImage];
}
注意:上面將模糊半徑設(shè)置為一個(gè)像素,這里暫時(shí)將這個(gè)值設(shè)置低一點(diǎn),這樣可以確保圖片的正確定位,當(dāng)一切ok之后,再增加模糊半徑即可。
?
下面是時(shí)候?qū)D片顯示到GPUImageView中了。不過(guò)并不是簡(jiǎn)單的實(shí)例化一個(gè)UIImage,并將其添加到GPUImageView中。首先需創(chuàng)建一個(gè)GPUImagePicture。
?
將如下代碼添加到updateBlur方法的底部:
GPUImagePicture *picture = [[GPUImagePicture alloc] initWithImage:image];
至此,我們獲得了一個(gè)圖片,模糊濾鏡和iamge view。
?
接著再將如下代碼添加到updateBlur底部:
[picture addTarget:_blurFilter];
[_blurFilter addTarget:_blurView];
?
[picture processImage];
?上面這幾行代碼,就像膠水一樣,將所有的事情關(guān)聯(lián)起來(lái)。將濾鏡當(dāng)做target添加到圖片中,然后將image view當(dāng)做濾鏡的target。
?
上面代碼對(duì)圖片的處理全程發(fā)生在GPU上,也就是說(shuō)當(dāng)進(jìn)行模糊計(jì)算和顯示時(shí),并不會(huì)影響到用戶界面。當(dāng)處理結(jié)束時(shí),會(huì)把圖片顯示到image view上面。
?
編譯并運(yùn)行程序,點(diǎn)擊菜單按鈕,可以看到如下類似畫(huà)面:

上面的圖片看起來(lái)是不是有點(diǎn)奇怪?看到的圖片被縮放到適配到菜單視圖中了。要對(duì)此做出修正,我們需要指定圖片的哪一部分需要顯示在GPUImageView中——也就是處理截屏視圖的上半部分。
?
設(shè)置contentsRect
按照如下代碼所示修改DropDownMenuController.m文件中的show方法:
-(void)show
{
??? [self addToParentViewController];
?
??? [self updateBlur];
?
??? CGRect deviceSize = [UIScreen mainScreen].bounds;
?
??? [UIView animateWithDuration:0.25f animations:^(void){
??????? _blurView.frame = CGRectMake(0.0f, 0.0f, deviceSize.size.height, MENUSIZE);
??????? _backgroundView.frame = CGRectMake(0.0f, 0.0f, _backgroundView.frame.size.width, MENUSIZE);
??????? _blurView.layer.contentsRect = CGRectMake(0.0f, 0.0f, 1.0f, MENUSIZE / 320.0f); // Add this line!
??? }];
}
通過(guò)指定_blurView.layer.contentsRect來(lái)定義一個(gè)矩形,在單元坐標(biāo)空間(unit coordinate space)中,表示只使用layer content的一部分。
?
編譯并運(yùn)行程序,點(diǎn)擊菜單按鈕,會(huì)看到如下圖所示效果:

雖然已經(jīng)使用了圖片的一部分,看起來(lái)還是不正確,這是因?yàn)樗目s放比例還不適合!此處還缺少對(duì)正確內(nèi)容的縮放。
?
將下面這行代碼添加到show方法中動(dòng)畫(huà)block的尾部:
_blurView.layer.contentsScale = (MENUSIZE / 320.0f) * 2;
contentsScale屬性聲明了layer在邏輯坐標(biāo)空間(以點(diǎn)為單位)和物理坐標(biāo)空間(以像素為單位)之間的映射關(guān)系。更高比例因子表示在渲染layer時(shí),一個(gè)點(diǎn)代表著多個(gè)像素點(diǎn)。
?
編譯并運(yùn)行程序,點(diǎn)擊菜單按鈕,可以看到縮放比例已經(jīng)正常了:

沒(méi)錯(cuò)——看起來(lái)好多了!現(xiàn)在關(guān)閉程序,然后重新打開(kāi),ou~~發(fā)生了什么?如下圖所示:

看起來(lái)這還是有點(diǎn)問(wèn)題。如果在對(duì)view進(jìn)行animation之前將contentScale設(shè)置回2.0,會(huì)解決half bar的問(wèn)題。
?
將如下代碼添加到DropDownMenuController.m中show方法里面的animation block上面:
_blurView.layer.contentsScale = 2.0f;
?
編譯并運(yùn)行程序,然后點(diǎn)擊菜單,接著關(guān)閉菜單,再打開(kāi)菜單,此時(shí)菜單開(kāi)起來(lái)如下所示:

現(xiàn)在半個(gè)尺寸的黑色box已經(jīng)沒(méi)有問(wèn)題了——但是現(xiàn)在是全尺寸的黑色box!
?
重置模糊濾鏡
上面問(wèn)題產(chǎn)生的原因是由于進(jìn)行了二次模糊計(jì)算。解決的方法是移除模糊濾鏡中的所有target。如果不這樣做的話,之后對(duì)濾鏡的調(diào)用不會(huì)輸出任何的內(nèi)容——進(jìn)而引起黑色box的問(wèn)題。
?
按照如下代碼更新一下updateBlur方法:
-(void)updateBlur
{
??? if(_blurFilter == nil){
??????? _blurFilter = [[GPUImageiOSBlurFilter alloc] init];
??????? _blurFilter.blurRadiusInPixels = 1.0f;
??? }
?
??? UIImage *image = [self.view.superview convertViewToImage];
?
??? GPUImagePicture *picture = [[GPUImagePicture alloc] initWithImage:image];
??? [picture addTarget:_blurFilter];
??? [_blurFilter addTarget:_blurView];
?
??? [picture processImageWithCompletionHandler:^{
??????? [_blurFilter removeAllTargets];
??? }];
}
?上面的代碼用processImageWithCompletionHandler:替換了processImage方法。這個(gè)新的方法有一個(gè)completion block,當(dāng)image 處理結(jié)束時(shí),會(huì)運(yùn)行這個(gè)block。一旦image處理結(jié)束,我們就可以安全的將濾鏡中的target全部移除。
?
編譯并運(yùn)行程序,點(diǎn)擊菜單,檢查一下黑色box問(wèn)題是不是已經(jīng)解決掉了:

多次打開(kāi)和關(guān)閉菜單,確保之前的那個(gè)bug已經(jīng)解決掉啦!
?
現(xiàn)在仔細(xì)觀察一下打開(kāi)菜單的模糊效果——有些東西看起來(lái)不正確。為了更加明顯的觀察到問(wèn)題,我們減慢動(dòng)畫(huà)的時(shí)間,讓其慢慢的移動(dòng)。
?
在show方法中,將animation bloc的持續(xù)時(shí)間修改為10.0f。
?
編譯并運(yùn)行程序,點(diǎn)擊菜單,然后觀察一下菜單出場(chǎng)的慢動(dòng)作:

恩,現(xiàn)在可能你已經(jīng)發(fā)現(xiàn)問(wèn)題了。被模糊的圖片從頂部往下滑動(dòng)——而我們的本意是希望模糊效果從上往下滑(并不是圖片本身)。
?
對(duì)齊背景圖片
此處我們需要對(duì)靜態(tài)模糊效果使用一些技巧。當(dāng)出現(xiàn)菜單時(shí),我們需要利用背景來(lái)將模糊效果對(duì)其。所以在這里我們不是對(duì)image view做移動(dòng)處理,而是需要對(duì)image view做擴(kuò)展處理,從0開(kāi)始擴(kuò)展至image view的全尺寸。這樣就可以確保菜單打開(kāi)時(shí),圖片依然保留在原位。
?
在show方法中,我們已經(jīng)將菜單打開(kāi)至全尺寸了,所以現(xiàn)在只需要將contentRect的高度設(shè)置為0即可(當(dāng)image view首次創(chuàng)建并隱藏的時(shí)候)。
?
將下面的代碼添加至DropDownMenuController.m文件的viewDidLoad方法中——在_blurView初始化的下方:
_blurView.layer.contentsRect = CGRectMake(0.0f, 0.0f, 1.0f, 0.0f);
?
同時(shí),在相同的一個(gè)文件中,將下面的代碼添加到animation block的尾部:
_blurView.layer.contentsRect = CGRectMake(0.0f, 0.0f, 1.0f, 0.0f);
?
contentRect屬性是可以動(dòng)畫(huà)方式設(shè)置的。因此在動(dòng)畫(huà)期間會(huì)rect會(huì)自動(dòng)的插補(bǔ)上。
編譯并運(yùn)行程序??梢钥吹?#xff0c;問(wèn)題已經(jīng)解決:

這樣看起來(lái)自然多了。現(xiàn)在我們已經(jīng)有一個(gè)具有模糊背景的滑動(dòng)菜單了。
?
現(xiàn)在是時(shí)候把動(dòng)畫(huà)所需時(shí)間調(diào)整一下了(為了更好的效果,其實(shí)之前設(shè)置的值是為了測(cè)試所用):設(shè)置為0.25秒,接著在updateBlur方法中將_blurFilter.blurRadiusInPixels設(shè)置為4.0f。
?
編譯并運(yùn)行程序,多次打開(kāi)菜單,看看效果如何:

實(shí)時(shí)模糊
實(shí)時(shí)模糊涉及到的技術(shù)具有一定的難度,有些難點(diǎn)需要解決才行。為了有效的進(jìn)行實(shí)時(shí)模糊,我們需要不停(每秒60幀)的截屏、模糊計(jì)算和顯示。使用GPUImage每秒中處理60張圖片(模糊并顯示圖片)一點(diǎn)問(wèn)題都沒(méi)有。
?
真正棘手的問(wèn)題是什么呢?如何實(shí)時(shí)的截取屏幕圖片,信不信由你!
?
由于截取的屏幕是主用戶界面,所有必須使用CPU的主線程來(lái)截屏,并將其轉(zhuǎn)換為一幅圖片。
?
提醒:如果事物每秒鐘的變化速度在46幀以上,那么人眼就無(wú)法識(shí)別出來(lái)了。這對(duì)于開(kāi)發(fā)者來(lái)說(shuō)也是一種解脫——現(xiàn)代處理器在各幀之間可以完成更多的大量工作。
?
線程中簡(jiǎn)潔的分支
當(dāng)運(yùn)行程序時(shí),會(huì)執(zhí)行大量的指令列表。每一個(gè)指令列表都運(yùn)行在各自的線程中,而我們又可以在多個(gè)線程中并發(fā)運(yùn)行各自的指令列表。一個(gè)程序在主線程中開(kāi)始運(yùn)行,然后會(huì)根據(jù)需要,創(chuàng)建新的線程,并在后臺(tái)執(zhí)行線程。如果之前你并沒(méi)有管理過(guò)多線程,你可能在寫(xiě)程序的時(shí)候總是在主線程中執(zhí)行指令。
?
主線程主要處理與用戶的交互,以及界面的更新。確保主線程的響應(yīng)時(shí)間是非常關(guān)鍵的。如果在主線程上做了太多的任務(wù),你會(huì)明顯的感覺(jué)到主界面響應(yīng)遲鈍。
?
如果你曾經(jīng)使用過(guò)Twitter貨Facebook,并滾動(dòng)操作過(guò)它里面的內(nèi)容,你可能已經(jīng)感覺(jué)到后臺(tái)線程在執(zhí)行操作了——在滾動(dòng)的過(guò)程中,并不是所有的個(gè)人圖片立即顯示出來(lái),滾動(dòng)過(guò)程中,程序會(huì)啟動(dòng)后臺(tái)線程來(lái)獲取圖片,當(dāng)圖片獲取成功之后,再顯示到屏幕中。
?
如果不使用后臺(tái)線程,那么table view的滾動(dòng)過(guò)程中,如果在主線程上去獲取個(gè)人圖片,會(huì)感覺(jué)到table view被凍結(jié)住了。由于圖片的獲取需要一些時(shí)間,所以最好將這樣耗時(shí)的操作讓后臺(tái)線程來(lái)做,這樣就能對(duì)用戶界面做平滑的操作和響應(yīng)了。
?
那么對(duì)本文的程序有什么影響呢?之間介紹了,UIView的截屏APIs操作必須在主線程中運(yùn)行。這就意味著每次截屏?xí)r,整個(gè)用戶界面都會(huì)被凍結(jié)中。
?
對(duì)于靜態(tài)模糊效果時(shí),由于這個(gè)截屏操作很快,你不會(huì)感覺(jué)到界面的凍結(jié)。并且只需要截屏一次。然而在實(shí)時(shí)模糊效果中需要每秒中截屏60次。如果在主線程中做這樣頻繁的截屏操作,那么animation和transition會(huì)變得非常的遲鈍。
?
更糟糕的時(shí),如果用戶界面復(fù)雜度增加,那么在截屏過(guò)程中就需要消耗更多的時(shí)間,那么就會(huì)導(dǎo)致整個(gè)程序無(wú)法使用了!
?
那么怎么辦呢!
?
一些潛在的實(shí)時(shí)模糊方案
這里有一個(gè)關(guān)于實(shí)時(shí)模糊方案:源代碼開(kāi)源的live blur libraries,它通過(guò)降低截屏的速度來(lái)實(shí)現(xiàn)實(shí)時(shí)模糊效果,并不是使用每秒截屏60次,可能是20、30或者40次。即使看起來(lái)沒(méi)有多大區(qū)別,但是你的眼睛還是能發(fā)現(xiàn)一定的遲鈍——模糊效果并沒(méi)有跟程序的其它部分同步起來(lái)——這樣一來(lái),界面看起會(huì)沒(méi)有模糊效果更加的糟糕。
?
實(shí)際上蘋(píng)果在它們自己的一些程序中處理實(shí)時(shí)模糊并不存在類似的問(wèn)題——但是蘋(píng)果并沒(méi)有公開(kāi)相關(guān)的API。在iOS 7中UIView的截屏方法,相比于舊方法,性能有了很大的提升,但還是不能滿足實(shí)時(shí)模糊的需求。
?
一些開(kāi)發(fā)者利用UIToolbar的模糊效果來(lái)做一些不好的操作。沒(méi)錯(cuò),這是有效果的,但是強(qiáng)烈建議不要在程序中使用它們。雖然這不是私有API,但是這并不算是一種可行的方法,蘋(píng)果也可能會(huì)reject你的程序。也就是說(shuō)在,在之后的iOS 7版本中,并不能保證還能正常使用。
?
蘋(píng)果可以在任何時(shí)候?qū)IToolBar做出修改,或許你的程序就有問(wèn)題了。在iOS 7.0.3更新中,蘋(píng)果的修改已經(jīng)影響到UIToolbar和UINavigationBar了,有些開(kāi)發(fā)者也因此報(bào)告出利用相關(guān)模糊效果已經(jīng)失效了!所以最好不要陷入這樣潛在的陷阱里面!
?
一個(gè)折中的方法——對(duì)視頻實(shí)時(shí)模糊
OK,此時(shí)你可能在想,要想在程序中做到實(shí)時(shí)模糊是不可能的了。那么還有什么方法可以突破限制,做到實(shí)時(shí)模糊效果呢?
?
在許多場(chǎng)景中,靜態(tài)模糊是可以接受的。上一節(jié)中,我們對(duì)view做適當(dāng)?shù)男薷?#xff0c;讓用戶看起來(lái)是對(duì)背景圖做的實(shí)際模糊處理。當(dāng)然,這對(duì)于靜止不動(dòng)的背景是合適的,并且還可以在模糊背景上實(shí)現(xiàn)一些不錯(cuò)的效果。
?
我們可以做一些實(shí)驗(yàn),看看能不能找到一些效果來(lái)實(shí)現(xiàn)之前無(wú)法做到的實(shí)時(shí)模糊效果呢?
?
有一個(gè)方法可以試試:對(duì)實(shí)時(shí)視頻做模糊處理,雖然截屏是一個(gè)非常大的瓶頸,但是GPUImage非常的強(qiáng)大,它能夠?qū)σ曨l進(jìn)行模糊(無(wú)論是來(lái)自攝像頭的視頻或者已經(jīng)錄制好的視頻,都沒(méi)問(wèn)題)。
?
利用GPUImage對(duì)視頻進(jìn)行模糊處理
利用GPUImage對(duì)視頻的模糊處理與圖片的模糊處理類似。針對(duì)圖片,我們實(shí)例化一個(gè)GPUImagePicture,然后將其發(fā)送給GPUImageiOSBlurFilter,接著再將其發(fā)送給GPUImageView。
?
類似的方法,對(duì)于視頻,我們使用GPUImageVideoCamera或GPUImageMovie,將后將其發(fā)送給GPUImageiOSBlurFilter,接著再將其發(fā)送給一個(gè)GPUImageView。GPUImageVideoCamera用于設(shè)備中的實(shí)時(shí)攝像頭,而GPUImageMovie用于已經(jīng)錄制好的視頻。
?
在我們的starter工程中,已經(jīng)實(shí)例化并配置好了GPUImageVideoCamera?,F(xiàn)在的任務(wù)是將播放和錄制按鈕的灰色背景替換為視頻的實(shí)時(shí)濾鏡效果。
?
首先是將此處提供的灰色背景實(shí)例UIView替換為GPUImageView。完成之后,我們需要調(diào)整每個(gè)view的contentRect(基于view的frame)。
?
這聽(tīng)起來(lái)對(duì)每個(gè)view都需要做大量的工作。為了讓任務(wù)變得簡(jiǎn)單,我們創(chuàng)建一個(gè)GPUImageView的子類,并把自定義的代碼放進(jìn)去,以便重用。
?
打開(kāi)File/New/File…,然后選擇iOS/Cocoa Touch/Objective-C class,如下所示:

將類命名為BlurView,繼承自GPUImageView,如下圖所示:

打開(kāi)ViewController.m文件,將下面的import添加到文件頂部:
#import "BlurView.h"
還是在ViewController.m中,在@implementation中找到_recordView和_controlView的聲明,將其修改為BlurView類型,如下所示:
BlurView *_recordView; //Update this!
UIButton *_recordButton;
BOOL _recording;
?
BlurView *_controlView; //Update this too!
UIButton *_controlButton;
BOOL _playing;
?然后按照如下代碼修改viewDidLoad方法:
_recordView = [[BlurView alloc] initWithFrame:
??????????????? CGRectMake(self.view.frame.size.height/2 - 50, 250, 110, 60)]; //Update this!
//_recordView.backgroundColor = [UIColor grayColor]; //Delete this!
?
_recordButton = [UIButton buttonWithType:UIButtonTypeCustom];
_recordButton.frame = CGRectMake(5, 5, 100, 50);
[_recordButton setTitle:@"Record" forState:UIControlStateNormal];
[_recordButton setTitleColor:[UIColor redColor] forState:UIControlStateNormal];
[_recordButton setImage:[UIImage imageNamed:@"RecordDot.png"] forState:UIControlStateNormal] ;
[_recordButton addTarget:self
????????????????? action:@selector(recordVideo)
??????? forControlEvents:UIControlEventTouchUpInside];
?
[_recordView addSubview:_recordButton];
_recording = NO;
?
_recordView.hidden = YES;
[self.view addSubview:_recordView];
?
?
_controlView = [[BlurView alloc] initWithFrame:
???????????????? CGRectMake(self.view.frame.size.height/2 - 40, 230, 80, 80)]; //Update this!
//_controlView.backgroundColor = [UIColor grayColor]; //Delete this!
接著,需要?jiǎng)?chuàng)建模糊圖片,將其顯示到上面構(gòu)建的image view中。回到@implementation中,將下面的兩個(gè)聲明添加進(jìn)去:
GPUImageiOSBlurFilter *_blurFilter;
GPUImageBuffer *_videoBuffer;
?現(xiàn)在你已經(jīng)知道GPUImageiOSBlurFilter的作用了,那么GPUImageBuffer的作用是什么呢?它的任務(wù)是獲取視頻的輸出,并獲取每一幀,這樣我們就可以方便的對(duì)其做模糊處理。一個(gè)額外的好處就是它可以提升程序的性能!
?
一般來(lái)說(shuō),視頻輸出的內(nèi)容會(huì)通過(guò)模糊濾鏡處理,然后發(fā)送到背景視圖中(被顯示出來(lái))。不過(guò),在這里使用buffer的話,發(fā)送到buffer的視頻輸出內(nèi)容,會(huì)被分為背景視圖和模糊濾鏡。這樣可以對(duì)視頻的輸出顯示做到平滑處理。
?
將下面的代碼添加到viewDidLoad方法的頂部(在super調(diào)用的后面):
_blurFilter = [[GPUImageiOSBlurFilter alloc] init];
?
_videoBuffer = [[GPUImageBuffer alloc] init];
[_videoBuffer setBufferSize:1];
?
還是在同一個(gè)文件中,將如下高亮顯示的語(yǔ)句添加到useLiveCamera方法中:
-(void)useLiveCamera
{
??? if (![UIImagePickerController isSourceTypeAvailable: UIImagePickerControllerSourceTypeCamera]) {
??????? UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"No camera detected"
??????????????????????????????????????????????????????? message:@"The current device has no camera"
?????????????????????????????????????????????????????? delegate:self
????????????????????????????????????????????? cancelButtonTitle:@"Ok"
????????????????????????????????????????????? otherButtonTitles:nil];
??????? [alert show];
??????? return;
??? }
?
??? _liveVideo = [[GPUImageVideoCamera alloc] initWithSessionPreset:AVCaptureSessionPreset1280x720
???????????????????????????????????????????????????? cameraPosition:AVCaptureDevicePositionBack];
??? _liveVideo.outputImageOrientation = UIInterfaceOrientationLandscapeLeft;
?
??? [_liveVideo addTarget:_videoBuffer];?????????? //Update this
??? [_videoBuffer addTarget:_backgroundImageView]; //Add this
??? [_videoBuffer addTarget:_blurFilter];????????? //And this
??? [_blurFilter addTarget:_recordView];?????????? //And finally this
?
??? [_liveVideo startCameraCapture];
?
??? _recordView.hidden = NO;
??? _controlView.hidden = YES;
}
?
上面的模糊背景是用于錄制按鈕的。對(duì)于播放按鈕也要做類似的處理。
[_recordedVideo addTarget:_videoBuffer];
[_videoBuffer addTarget:_backgroundImageView];
[_videoBuffer addTarget:_blurFilter];
[_blurFilter addTarget:_controlView];
?
編譯并運(yùn)行程序,打開(kāi)錄制操作,看看情況如何:

好消息是看起來(lái)基本正常!壞消息是整個(gè)屏幕被縮放到錄制按鈕中去了。這個(gè)問(wèn)題跟之前遇到的類似。我們需要給BlurView這是適當(dāng)?shù)腸ontentRect。
?
打開(kāi)BlurView.m,用下面的代碼替換掉initWithFrame:方法:
- (id)initWithFrame:(CGRect)frame
{
??? self = [super initWithFrame:frame];
??? if (self) {
??????? CGRect deviceSize = [UIScreen mainScreen].bounds;
??????? self.layer.contentsRect = CGRectMake(frame.origin.x/deviceSize.size.height,
???????????????????????????????????????????? frame.origin.y/deviceSize.size.width,
???????????????????????????????????????????? frame.size.width/deviceSize.size.height,
???????????????????????????????????????????? frame.size.height/deviceSize.size.width);
??????? self.fillMode = kGPUImageFillModeStretch;
??? }
??? return self;
}
?contentRect的每個(gè)參數(shù)必須在0.0f和1.0f之間。在這里只需要利用view的位置除以屏幕的size,得到的值即可。
?
編譯并運(yùn)行程序,看看效果如何:

恭喜!至此已經(jīng)完成了靜態(tài)模糊和實(shí)時(shí)視頻模糊的實(shí)現(xiàn)?,F(xiàn)在你已經(jīng)完全可以在程序中添加iOS 7的模糊效果啦!
?
何去何從?
可以在這里下載到完整的工程。
?
本文不僅指導(dǎo)你在程序中使用iOS 7的模糊效果,還介紹了如何使用GPUImage框架,這個(gè)框架也是我非常希望你能看到的東西。重要的是,本文指出了為什么要使用模糊,什么時(shí)候使用模糊效果是合適的,這在iOS 7的新設(shè)計(jì)語(yǔ)言中是一個(gè)關(guān)鍵的概念。當(dāng)然也希望在未來(lái)的版本中,蘋(píng)果能夠?qū)⑾嚓P(guān)APIs提供給開(kāi)發(fā)者使用,不過(guò)在那之前,GPUImage是一個(gè)不錯(cuò)的替代品。

總結(jié)

以上是生活随笔為你收集整理的iOS 使用GPUImage实现iOS 7的模糊效果的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。

www在线观看国产 | 欧美日韩亚洲在线观看 | 亚洲精品国偷自产在线91正片 | 天堂av网站 | 日韩午夜av | 看国产黄色大片 | 精品中文字幕在线 | 深夜成人av | 久久免费大片 | 亚洲美女精品视频 | 久久精品久久精品久久 | 国外成人在线视频网站 | 久久99久久久久久 | 色综合天天狠狠 | 欧美日韩中字 | 欧美激情第八页 | 99在线视频观看 | 天天色天天草天天射 | 69国产成人综合久久精品欧美 | 日本精品视频一区二区 | 日批在线观看 | 久爱综合 | 亚洲精品欧洲精品 | 色婷婷av在线 | 在线欧美中文字幕 | 99精品国产高清在线观看 | 在线a人v观看视频 | 成人精品一区二区三区中文字幕 | 日日夜夜精品免费 | 激情欧美xxxx | 91麻豆视频网站 | 亚洲另类在线视频 | 夜夜天天干 | 人人澡超碰碰97碰碰碰软件 | 在线免费观看黄色 | 欧美福利网站 | 毛片无卡免费无播放器 | 久久99视频免费 | 国产一区欧美日韩 | 国产成人精品一区在线 | 一区二区三区福利 | 69精品视频在线观看 | 日韩免费在线视频观看 | 久久99国产精品免费 | 久久婷五月 | 亚洲va韩国va欧美va精四季 | 最近中文字幕高清字幕免费mv | 免费精品在线观看 | 免费人人干 | 国产精品6999成人免费视频 | 日韩福利在线观看 | 色偷偷网站视频 | 国产精品女同一区二区三区久久夜 | 久久精品视频网 | 亚洲专区免费观看 | 久久久综合香蕉尹人综合网 | a极黄色片 | 国产在线免费av | a特级毛片 | 欧美韩国日本在线 | 国产亚洲资源 | 日本护士三级少妇三级999 | 亚洲精品乱码久久久久久按摩 | 午夜狠狠操 | 视频高清 | 久草在线视频免费资源观看 | 天天草天天干 | 亚洲综合精品在线 | 国产手机在线精品 | 亚洲三级在线免费观看 | 欧美日韩中文国产 | 国产三级国产精品国产专区50 | 国产群p| 久久精品免费电影 | 综合网五月天 | 99热这里只有精品在线观看 | 色综合久久久网 | 亚洲91网站 | 精品在线你懂的 | 午夜丰满寂寞少妇精品 | 亚洲黄色影院 | 粉嫩av一区二区三区四区 | www.福利视频 | 精品免费在线视频 | 9999精品 | 亚洲综合欧美日韩狠狠色 | 一区二区三区日韩视频在线观看 | 欧美日韩不卡一区 | 亚洲午夜久久久久久久久久久 | 久久久片| 亚洲精品视频在线观看免费视频 | 2023国产精品自产拍在线观看 | 久久这里只有精品9 | 五月婷婷色 | 精品国产亚洲一区二区麻豆 | 久草国产在线观看 | 黄污网| 久久av一区二区三区亚洲 | 久久国产网站 | 亚洲国产免费看 | 人人视频网站 | 日本精品久久久久中文字幕 | www免费网站在线观看 | 碰超在线| 欧美最爽乱淫视频播放 | av在线免费网 | 在线视频你懂 | 成人中文字幕av | 久久久久国产精品免费网站 | 99999精品 | 国产资源网站 | 免费看的黄色网 | 日韩专区在线观看 | 欧美日韩中文字幕视频 | 在线91色 | 一区三区视频在线观看 | 日韩av在线免费看 | 国产成人久久精品一区二区三区 | 国产精品精品 | 中文国产字幕在线观看 | 国产在线a | 免费在线国产黄色 | 国产精品视频专区 | 国产精品久久久久久爽爽爽 | 96国产精品视频 | 亚洲伊人第一页 | 中文国产成人精品久久一 | 高清国产在线一区 | 欧美日韩aaaa | 成年人视频在线免费观看 | 午夜久久视频 | 午夜黄色一级片 | 久久麻豆视频 | 国产精品正在播放 | 香蕉视频在线视频 | 亚洲人成人在线 | 天天做天天干 | 国产黑丝一区二区 | 黄色网址av | 久久国产视频网站 | 国产特黄色片 | 久久久五月天 | 人人插超碰| 在线观看中文 | 国产精品久久久一区二区三区网站 | 亚洲自拍av在线 | 久久久精品99 | 缴情综合网五月天 | 精品久久久久久亚洲综合网站 | 女人18毛片90分钟 | 一级性视频 | 国产精品9区 | 久久久高清一区二区三区 | 天天操天天操天天操天天 | 亚洲年轻女教师毛茸茸 | 久久99精品一区二区三区三区 | 国产亚洲小视频 | 成人禁用看黄a在线 | 人人干狠狠干 | 免费看黄在线观看 | 网站在线观看你们懂的 | 欧美视频99 | 久久久www成人免费精品张筱雨 | 永久免费视频国产 | 亚洲精品国产精品国产 | 国产免费av一区二区三区 | 一区二区三区高清 | 国产色女| 99视频在线精品国自产拍免费观看 | 九九精品在线观看 | 国产黄色视| 成人作爱视频 | 久久黄色免费视频 | 91精品在线麻豆 | 亚洲成人麻豆 | 在线中文字幕一区二区 | 狠狠狠色丁香综合久久天下网 | 欧美乱大交 | 精品国产aⅴ一区二区三区 在线直播av | 欧美性受极品xxxx喷水 | 国产一区二区三区免费观看视频 | 久久免费a | 天天色草 | 婷婷激情综合网 | 伊人久操 | 激情五月综合网 | 五月天久久综合网 | 国产精品一区二区三区四区在线观看 | 国产精品久久一 | 伊人国产女 | 午夜资源站 | 国产成人一区二区啪在线观看 | 福利久久久| 日韩精品中文字幕一区二区 | 欧美在线日韩在线 | 超碰人在线 | 人成午夜视频 | 91少妇精拍在线播放 | 91热爆在线观看 | 成人黄色大片网站 | 天操夜夜操| 黄色av电影一级片 | 日韩午夜在线播放 | 性色av香蕉一区二区 | 最新国产在线 | 夜夜躁狠狠燥 | 日韩一级成人av | www.久久色 | 久久91久久久久麻豆精品 | 亚洲精品在线视频播放 | 国产小视频精品 | 久久激情片 | 久久精品中文视频 | 久久久国产精品久久久 | 在线观看一区二区视频 | 中文免费在线观看 | 久久久久久久国产精品 | 人人网av | 久久视精品 | 欧美成人影音 | 国产无遮挡又黄又爽馒头漫画 | 99re热精品视频 | 日韩和的一区二在线 | 四虎伊人 | 久久人人97超碰精品888 | 亚洲国产偷 | 一区二区欧美激情 | 午夜电影av | 青青河边草免费观看完整版高清 | 国产无遮挡又黄又爽在线观看 | 国产精品青青 | 在线视频日韩精品 | 亚洲国内精品在线 | av软件在线观看 | 久久精品国产一区二区三区 | av黄色在线播放 | 天天伊人网 | 在线观看日韩精品 | 一区二区激情视频 | 亚洲精品视频免费观看 | 18av在线视频 | 日韩首页 | 草久久久久 | 91亚洲精品久久久蜜桃 | 日韩欧美91 | 999男人的天堂 | 亚洲尺码电影av久久 | 91av原创| 久久精品首页 | 天天插天天干天天操 | 日韩精品一区二区三区三炮视频 | av在线播放快速免费阴 | 久在线观看视频 | 亚洲va欧美va| 日韩精品高清视频 | 国产精品美女久久久久久免费 | 久久精品网站视频 | 久久久久久高潮国产精品视 | 97色综合| 91亚洲精品久久久久图片蜜桃 | 成人片在线播放 | 天天综合操 | 91久久人澡人人添人人爽欧美 | 精品一区中文字幕 | 人人爽人人澡人人添人人人人 | 麻豆综合网 | www操操操 | 国产视频在线一区二区 | 视频在线国产 | 国产精品激情 | 在线观看亚洲电影 | 正在播放日韩 | 国产韩国精品一区二区三区 | 久久97久久97精品免视看 | 91chinesexxx| 国产精品乱看 | 国产亚洲精品久久久久久久久久 | www.天天色.com | 国产超碰在线 | 国产一级视屏 | 69中文字幕| 色婷婷狠狠18| 九九视频在线播放 | 亚洲狠狠婷婷 | 中文字幕欧美三区 | 日批视频在线观看免费 | 人人澡人人添人人爽一区二区 | 最近中文字幕高清字幕免费mv | 久久免费成人 | 国产专区在线 | 久射网| www婷婷| 久久久久久久亚洲精品 | 深爱婷婷| 91在线区| 色黄视频免费观看 | 免费看黄网站在线 | 久久精品五月 | 在线日本看片免费人成视久网 | 98超碰人人 | 六月激情网 | 国产在线观看99 | 欧日韩在线视频 | 亚洲乱码久久 | 国产亚洲精品久久久久久久久久久久 | 91粉色视频| 日韩中文在线观看 | 欧美日韩免费一区 | 亚洲国产中文字幕在线观看 | 黄色视屏av | 福利视频网站 | 色综合天天做天天爱 | 91久久国产自产拍夜夜嗨 | 中文字幕a∨在线乱码免费看 | 午夜精品一区二区国产 | www.福利 | 在线观看免费av网 | 91成人精品一区在线播放 | 久久99精品国产麻豆宅宅 | 一区二区欧美激情 | 国产精品高潮久久av | 久久久精品 一区二区三区 国产99视频在线观看 | 91污视频在线 | 欧美一区免费观看 | 夜夜操网 | 人人看97 | 亚洲视频免费在线观看 | 国产超碰在线 | 精品国产一区二区三区久久久蜜臀 | 久久网站av | 五月天婷婷综合 | 又爽又黄又无遮挡网站动态图 | 在线观看视频黄 | 日本久久久久久久久久 | 成人av免费在线观看 | 欧美亚洲xxx | 久久狠狠干 | 99视频精品视频高清免费 | 国产一区二区在线播放 | 日韩最新理论电影 | 亚洲区另类春色综合小说 | 久久精品这里热有精品 | 六月丁香社区 | av电影免费看 | 久热精品国产 | 99超碰在线观看 | 成人一区二区三区中文字幕 | 日韩精品中文字幕av | 97在线观看免费观看高清 | 综合激情网 | 久久免费中文视频 | 国产高清av免费在线观看 | 97人人艹| www免费黄色 | 国产精品高潮在线观看 | 欧美,日韩| 亚洲精品99 | 精品欧美在线视频 | 中文字幕二区三区 | 国产精品96久久久久久吹潮 | 丁香婷婷综合五月 | 国产精品美女毛片真酒店 | 1000部18岁以下禁看视频 | 亚洲精品视频在线观看网站 | 亚洲综合视频在线 | 国产精品美女久久久久久久久久久 | 一区二区三区日韩视频在线观看 | 超碰人人99 | 久久综合久久综合这里只有精品 | 欧美一区二区精品在线 | 国产成人在线一区 | 久草视频一区 | 国产精品福利在线播放 | 国产亚洲成人网 | 欧美日韩国产一区二区在线观看 | 国产视频第二页 | 午夜国产在线观看 | 国产成人精品国内自产拍免费看 | 精品嫩模福利一区二区蜜臀 | 99九九99九九九视频精品 | 人人澡人人爱 | 成人在线电影观看 | 日韩精品一区二区免费视频 | 成人av网页 | 亚洲一级黄色av | 在线播放 日韩专区 | 欧美日韩免费在线视频 | 夜夜躁日日躁狠狠久久av | 狠狠的操你 | 久久久高清免费视频 | 五月天狠狠操 | 色天天天| 日本超碰在线 | 色夜视频 | 一色av | 欧美日本日韩aⅴ在线视频 插插插色综合 | 综合国产视频 | 色婷婷在线视频 | 午夜色大片在线观看 | 一本一本久久a久久精品综合 | 国产精品涩涩屋www在线观看 | 久久兔费看a级 | 亚洲国产美女精品久久久久∴ | 亚洲视频久久久 | 欧美亚洲一级片 | 在线观看精品一区 | 色婷婷久久久综合中文字幕 | 日韩三级免费观看 | 超碰在线最新网址 | 亚洲理论电影网 | av电影免费| 国产精品黑丝在线观看 | 亚洲最大的av网站 | 奇米导航 | 97碰碰精品嫩模在线播放 | 国产精品私人影院 | 中文字幕亚洲字幕 | 少妇18xxxx性xxxx片 | 久久久久久久久福利 | 国产精品中文久久久久久久 | 九九电影在线 | 丁香婷婷在线观看 | 国产资源在线观看 | 国产亚洲精品久久网站 | 91亚洲欧美 | 国产精品女同一区二区三区久久夜 | 精品国产1区 | 91亚洲精品国偷拍 | 国产亚洲成av人片在线观看桃 | 亚洲天天综合 | 探花视频免费在线观看 | 国产又粗又硬又爽的视频 | av片一区| 中文在线免费观看 | 免费视频久久 | а天堂中文最新一区二区三区 | 国产在线一区二区 | 日韩在线视频网 | 国产精品久久久久久久毛片 | 人人爽人人澡人人添人人人人 | 人人爽人人爱 | 日韩av免费一区二区 | wwwwwww黄| 中文字幕久久久精品 | 欧美亚洲三级 | 四虎欧美 | 最新中文字幕在线资源 | 日韩av午夜 | 91精品国产一区 | 五月天久久久 | 亚洲精品在线电影 | 日韩黄色中文字幕 | 久久久免费精品国产一区二区 | 久久国产免费看 | www.com久久 | 国产亚洲精品久久19p | 中文乱码视频在线观看 | 超碰在线97国产 | 在线国产一区二区三区 | 成人在线视频你懂的 | 草久久av | 在线视频免费观看 | 三级大片网站 | 国产xx在线 | 日韩av看片 | 成 人 黄 色 视频播放1 | 免费网站黄 | 精品视频免费播放 | 色橹橹欧美在线观看视频高清 | 91色影院 | 午夜国产福利视频 | 成人av视屏| 久久精品国产成人精品 | 欧美日韩网址 | 97超碰中文| 国产999精品久久久影片官网 | 亚洲三级在线免费观看 | 国内综合精品午夜久久资源 | 国产一二三四在线视频 | 97超在线视频 | 黄色免费电影网站 | 最近免费中文字幕大全高清10 | 97福利| 亚洲精选在线观看 | 国产精品毛片 | 免费一级日韩欧美性大片 | 午夜久久福利影院 | 91日韩在线| 黄色av高清 | 91免费的视频在线播放 | 8x成人在线| 国产精品99久久久久久小说 | 国产麻豆精品久久 | 久久论理 | 国产精品99免费看 | 最新日韩精品 | 一区二区三区日韩视频在线观看 | 91欧美视频网站 | 色综合久久88色综合天天 | 69久久久久久久 | 黄色软件在线观看 | 一级片免费在线 | 国产精品国产三级国产不产一地 | 国产亚洲一级高清 | 亚洲国内精品视频 | 欧美成人亚洲成人 | 国产色视频 | 免费三级a | 国产一级91 | 伊人成人激情 | 五月天亚洲激情 | 亚洲精品在线视频网站 | 欧美日韩亚洲在线观看 | 国产一区二区高清不卡 | 日日夜夜精品免费观看 | 欧美日韩另类在线观看 | 在线观看网站你懂的 | 91九色在线 | 国产黄a三级 | 日韩一区二区三区在线观看 | 五月天色丁香 | 蜜臀aⅴ国产精品久久久国产 | 成人一区二区三区中文字幕 | 国产精品99久久久久久有的能看 | 永久精品视频 | 免费无遮挡动漫网站 | 日韩理论在线 | 国产亚洲精品bv在线观看 | 成人黄色小视频 | 六月色丁 | 午夜性生活片 | 夜夜爽88888免费视频4848 | 国产成人精品一区二三区 | 亚洲经典精品 | 97国产在线观看 | 亚洲高清视频在线观看 | 91精品国产自产91精品 | 九色porny真实丨国产18 | free. 性欧美.com | 一区二区三区高清不卡 | 日日干夜夜骑 | 久草在线中文视频 | 成人免费 在线播放 | 国产精品9999| 精品国产乱码久久 | 五月精品 | 日韩一区在线免费观看 | 91在线免费播放视频 | av日韩av| 色资源中文字幕 | 欧美大片aaa | 丁香婷婷综合激情 | 91成品视频 | 久草免费福利在线观看 | 超碰在线天天 | 亚洲国产精品va在线看黑人动漫 | 911av视频 | 国产在线精品二区 | 激情综合婷婷 | 在线黄色免费 | 欧洲精品视频一区 | 在线电影中文字幕 | 精品一区电影国产 | 99久精品视频 | 国产一区二区三区在线 | 午夜av电影院 | 国产美女视频网站 | av看片网 | 最新免费av在线 | 日韩av二区| 天天综合操 | 免费在线一区二区 | 亚洲精品乱码久久久久久9色 | 成人国产精品免费观看 | 99热播精品 | 香蕉精品在线观看 | 在线视频观看你懂的 | 一本—道久久a久久精品蜜桃 | 伊人五月在线 | 国产成人精品一区二区三区 | 久久久久久久国产精品影院 | 国产一级片网站 | 亚洲欧美视频一区二区三区 | 久久激五月天综合精品 | 91精品一区二区三区蜜桃 | 日韩中文字幕免费电影 | 午夜精品电影一区二区在线 | 奇米网在线观看 | 一区二区视频播放 | 婷婷伊人五月天 | 看污网站 | 欧洲色吧 | 欧美一级大片在线观看 | 国产精品原创 | 日本视频精品 | 精精国产xxxx视频在线播放 | 97超碰站 | 99精品视频免费全部在线 | 中文资源在线官网 | 久影院 | 日韩久久久久久 | 日韩午夜高清 | 精品国模一区二区 | 久草免费在线视频 | 一区在线电影 | 高清av免费看 | 日本二区三区在线 | 天天干天天操天天射 | 99热这里只有精品国产首页 | 91福利试看 | 天天干天天做天天操 | av在线播放观看 | 久热久草在线 | 国产激情久久久 | 久久综合偷偷噜噜噜色 | 国内精品视频在线播放 | 国产一级电影 | 在线视频一区二区 | 91久久精品日日躁夜夜躁国产 | 婷婷综合五月天 | 国产日韩中文字幕在线 | 久久精品人人做人人综合老师 | 人人插人人费 | 国产精品v欧美精品v日韩 | 亚洲成人精品国产 | 三级黄色大片在线观看 | 在线观看黄色 | 香蕉网在线播放 | 亚洲视频在线播放 | 在线观看久草 | 久久久精品二区 | 国产精品久久三 | 国精产品999国精产品岳 | 五月婷婷毛片 | 亚洲精品乱码久久久久v最新版 | 国产91精品一区二区 | 国产日女人| 亚洲国产综合在线 | a亚洲视频 | 色播激情五月 | 99视频精品全部免费 在线 | 中文字幕在线观看av | 亚洲五月婷婷 | 色夜视频 | 不卡的一区二区三区 | 99免费在线 | 国产在线观看午夜 | 精品视频资源站 | 国产成人精品网站 | 亚洲综合视频网 | 国产精品一区二区久久久久 | 99久久综合国产精品二区 | 欧美三人交 | 国产成人久久av免费高清密臂 | 免费一级黄色 | 91av亚洲| 日本中文字幕影院 | 日本久久中文字幕 | 男女视频国产 | 一级成人免费视频 | 亚洲性视频 | 玖草在线观看 | 国产精选在线观看 | 亚洲 中文 欧美 日韩vr 在线 | 国产91精品高清一区二区三区 | 欧美成人a在线 | 国产老妇av | 国产专区视频在线 | 日韩精品视频第一页 | 一区二区三区精品在线 | 视频一区二区在线观看 | 国产淫片 | 亚洲成人午夜av | 91精品啪啪 | 天天插天天色 | 亚洲区视频在线观看 | 日本精品久久久久久 | 久久精品成人欧美大片古装 | 免费看片网站91 | www.福利 | 91在线视频观看 | 婷婷精品 | 婷婷丁香视频 | 深夜免费福利网站 | 成人影片免费 | 久久99精品一区二区三区三区 | 69视频永久免费观看 | 丁香六月婷婷综合 | 五月天高清欧美mv | 成人在线视频免费看 | 久草在线免费在线观看 | 免费看国产黄色 | 久久久不卡影院 | 久久国产乱| 婷婷久久久 | 偷拍精偷拍精品欧洲亚洲网站 | 在线国产视频一区 | 亚洲激情 | 在线免费视频 你懂得 | 美州a亚洲一视本频v色道 | 国产黄色片免费在线观看 | 国产视频97| 国产精品毛片 | 日批视频在线观看免费 | 国产97免费 | 久久最新网址 | 国产精品白浆视频 | 奇米先锋 | 欧美一级电影片 | 91毛片在线观看 | 日韩激情视频在线观看 | 精品一区二区三区在线播放 | 天天干国产 | 免费在线观看日韩欧美 | 国产三级在线播放 | 国产成人99av超碰超爽 | 久久av免费电影 | 成人毛片久久 | 久久精品导航 | 国产精品久久久久999 | 国产精品久久久久久久久久 | 日韩爱爱片| 日韩精品专区在线影院重磅 | 美女网站色在线观看 | 国产成a人亚洲精v品在线观看 | 国产成人一区二区三区在线观看 | 日韩欧美视频 | 国产96在线视频 | 国产一二三精品 | 中文字幕人成乱码在线观看 | 毛片网站在线观看 | 日韩视频一区二区在线观看 | 西西444www大胆无视频 | 久久手机免费视频 | 久久综合九色综合97_ 久久久 | 深夜免费小视频 | av在线进入 | 精品成人在线 | 亚洲欧美怡红院 | 亚洲第一香蕉视频 | 精品国产乱码久久久久久1区2匹 | 怡红院成人在线 | 欧美天堂久久 | 亚洲国产欧美在线人成大黄瓜 | 日韩中文字幕免费在线观看 | 免费亚洲视频在线观看 | 性色在线视频 | 国产乱码精品一区二区三区介绍 | 国产99久久久精品 | 国产黄色理论片 | 国产亚洲精品久久网站 | 久久久久久久99精品免费观看 | 欧美精品v国产精品 | 久久久精品二区 | 精品国偷自产国产一区 | 欧美韩国日本在线观看 | 黄在线免费观看 | 欧美看片| 成人av资源网 | 91在线小视频 | 日韩二区三区 | 久久免费视频网 | 亚洲一区视频在线播放 | 日韩午夜电影 | av丝袜天堂 | 美女一级毛片视频 | 国产精品你懂的在线观看 | 久久久久亚洲最大xxxx | 97香蕉超级碰碰久久免费软件 | 在线免费成人 | 日韩在线一区二区免费 | 色狠狠综合天天综合综合 | 狂野欧美激情性xxxx | 97色在线观看免费视频 | 国产精品久久久久久爽爽爽 | 在线视频一二区 | 在线播放av网址 | 国产成a人亚洲精v品在线观看 | 韩国精品一区二区三区六区色诱 | 国产精品 国内视频 | 亚洲欧洲精品一区二区精品久久久 | 一区二区三区动漫 | 狠狠狠狠狠狠 | 97在线观看免费高清 | 国产一区二区影院 | 国产美女永久免费 | 五月婷婷久久丁香 | 午夜av在线| 日本中文字幕视频 | 久久夜色精品国产欧美乱 | 久久99久久99精品中文字幕 | 日韩在线 一区二区 | av在线免费网站 | 99这里有精品 | 欧美精品成人在线 | 中文字幕丰满人伦在线 | 麻豆精品视频在线 | 黄网在线免费观看 | 欧美一级片免费在线观看 | 伊人超碰在线 | 99久久9| 91理论片午午伦夜理片久久 | 日日日日干 | 色多视频在线观看 | 久久久精品免费看 | 人成在线免费视频 | 国产一区二区久久精品 | 天天操天天干天天爱 | 国产在线播放一区二区 | 日韩精品一区电影 | 中文字幕免费高清在线观看 | 日韩欧美在线观看一区二区三区 | 最近中文字幕高清字幕在线视频 | 97超碰在线免费观看 | 亚洲精品国产高清 | 激情综合狠狠 | 久久免费片 | 国产精品剧情 | 亚洲天堂在线观看完整版 | 欧美精品中文 | 色在线中文字幕 | 五月婷婷免费 | 一级免费片 | 999成人| 91免费日韩 | 精品电影一区 | 99精品免费视频 | 国产日韩精品一区二区三区在线 | 欧洲一区二区在线观看 | 欧美激情精品久久久久久 | av片子在线观看 | 九九视频免费在线观看 | 国产一级二级三级视频 | 九九热免费观看 | www亚洲一区 | 久久综合久久综合这里只有精品 | 黄色在线视频网址 | 成人av资源网站 | 天天干天天爽 | 日韩网站在线看片你懂的 | 中文久草 | 97超碰精品 | 亚洲国产电影在线观看 | 亚洲一二三久久 | 操综合 | 精品亚洲免a | 99热这里只有精品1 av中文字幕日韩 | 色婷婷在线观看视频 | 国产亚洲久一区二区 | 亚在线播放中文视频 | 欧美va天堂va视频va在线 | 色多多污污 | 香蕉久久国产 | 九九久久免费视频 | 亚洲精品国产品国语在线 | 国内精品久久久久 | 日韩欧美国产成人 | 91精品国产乱码在线观看 | 日本精品视频一区二区 | 欧美日在线 | 91豆麻精品91久久久久久 | 久久理论片 | 国产r级在线观看 | 亚洲三级黄色 | 黄色毛片一级 | 99在线视频免费观看 | 婷婷色在线视频 | 亚洲国产激情 | 福利视频| 亚洲精品视频大全 | 亚洲国产播放 | 97视频在线免费 | 91精品国产电影 | 久久视频这里有精品 | 在线看中文字幕 | 国产日韩欧美视频在线观看 | 日韩久久在线 | 国产亚洲精品久久网站 | 国产小视频精品 | 偷拍精品一区二区三区 | 色在线亚洲 | 久久婷婷综合激情 | 久久免费视频在线观看30 | 欧美日本日韩aⅴ在线视频 插插插色综合 | 亚洲三级精品 | 亚洲高清在线视频 | 免费av在 | 国产精品久久久久久电影 | 国产成人精品一区二区三区福利 | 涩涩网站在线播放 | 中文字幕乱码一区二区 | 日本久久电影 | 一级淫片a| 欧美精品三级 | 成人a级免费视频 | 成人午夜片av在线看 | av看片网址 | 成人午夜电影网站 | 午夜黄色影院 | 五月婷婷一级片 | 久久精品这里热有精品 | 国产.精品.日韩.另类.中文.在线.播放 | 久久免费视频精品 | 在线观看午夜 | 99麻豆久久久国产精品免费 | 中文字幕av电影下载 | 成人av视屏| 天天草av| 久久久一本精品99久久精品 | 日韩久久网站 | 91cn国产在线| 国产一区二区久久久 | 国产精品嫩草在线 | 中文在线www | 免费视频 你懂的 | 色综合激情网 | 日韩三级免费 | 四虎成人精品永久免费av | 婷婷久月 | 久久精品免费电影 | 国产精品久久久久999 | 国产精品永久久久久久久www | 青青河边草手机免费 | 免费在线观看av网站 | 亚洲精品视频久久 | 亚洲精品动漫在线 | 久久久免费精品视频 | 国产一级二级av | 69视频在线 | 午夜精品一区二区三区免费 | 在线国产日本 | 亚洲精品小视频在线观看 | 黄色特级片 | 亚洲天堂精品视频 | 免费v片 | 亚洲一区精品二人人爽久久 | 久久精品网站免费观看 | 欧美一级视频在线观看 | 久久视频在线视频 | 亚洲国产人午在线一二区 | 天天干天天射天天爽 | 中文在线字幕观看电影 | 久久人人爽人人人人片 | 精品视频中文字幕 | 国产小视频在线观看 | 日韩二区三区在线 | 香蕉视频日本 | 黄色a大片| av在线播放亚洲 | 亚洲黄色大片 | 国产精品久一 | 亚洲区色 | 欧美色图88 | 色婷婷啪啪免费在线电影观看 | 一区二区三区四区不卡 | 日韩欧美在线免费 | 日本精品在线视频 | 天天干 夜夜操 | 久久久久久久久福利 | 国模一区二区三区四区 | 夜夜嗨av色一区二区不卡 | 久久久五月婷婷 | 亚洲国产视频直播 | 亚洲视频免费在线观看 | 午夜精品一区二区三区可下载 | 亚洲免费资源 | 99热免费在线 | 国产精品初高中精品久久 | 国产精品视频内 | 中文字幕色在线视频 | 99亚洲精品在线 | 中文字幕精品三区 | 久久超碰在线 | 嫩草伊人久久精品少妇av | 久久免费国产精品1 | 黄色三级视频片 | 玖玖在线资源 | 91av视频播放 | 成人免费毛片aaaaaa片 | 不卡的av电影在线观看 | 久热电影 | 欧美一区三区四区 | 911久久香蕉国产线看观看 | 午夜国产一区二区三区四区 | 人人澡澡人人 | 亚洲影院国产 | 中文字幕刺激在线 | 国产小视频免费观看 | 美女网站视频免费黄 | 天天色天天操天天爽 | 青青视频一区 | 国产视频在线一区二区 | 正在播放五月婷婷狠狠干 | 色爽网站 | 亚洲欧美在线视频免费 | 一级特黄aaa大片在线观看 | aaa毛片视频 | 免费在线观看一级片 |