? ? ? ? ? 近幾年,隨著直播、小視頻的崛起,對視頻圖片濾鏡處理要求也越來越高了。對做濾鏡我們首先想到就是OpenGL了,而且這個是跨平臺的,使用的GPU處理圖片和進(jìn)行復(fù)雜的計算,優(yōu)于以前的CPU去處理。當(dāng)然咱們蘋果也有OpenGL ES,這個是用于蘋果開發(fā),底層是一些C的Api,敢興趣的可以深層次研究,這里我們說一說GPUImage,這個是開源的,底層就是OpenGL。
那我們就入門的使用一下,下面是代碼:
? ? //創(chuàng)建一個原始圖片
? ? UIImageView *imageview = [[UIImageView alloc]init];
? ? imageview.frame=CGRectMake(0,0,250,300);
? ? imageview.image= [UIImage imageNamed:@"timg.jpg"];
? ? [self.view addSubview:imageview];
? //創(chuàng)建一種濾鏡類型(素描)
?? ?GPUImageSketchFilter *vignetteFileter = [[GPUImageSketchFilter alloc]init];
? //設(shè)置渲染的區(qū)域,這里設(shè)置為圖片的區(qū)域
? ? [vignetteFileter ?forceProcessingAtSize:imageview.bounds.size];
? ? [vignetteFileter ?useNextFrameForImageCapture];
?//將圖片數(shù)據(jù)給?GPUImagePicture?
? ? GPUImagePicture ? ?*imagePicture = [[GPUImagePicture ?alloc]initWithImage: [UIImage ? imageNamed:@"timg.jpg"]];
? //給GPUImagePicture 添加渲染類型(GPUImageSketchFilter 素描)
? ? [imagePicture ?addTarget:vignetteFileter];
? //開始渲染圖片
? ? [imagePicture ?processImage];
?? ?//素描
? ? UIImageView*SketchImage = [[UIImageViewalloc]init];
? ? SketchImage.frame=CGRectMake(0,350,100,200);
? ? SketchImage.image= [UIImageimageNamed:@"timg.jpg"];
? ? [self.viewaddSubview:SketchImage];
? ? SketchImage.image= [vignetteFileterimageFromCurrentFramebuffer];
這就是素描和懷舊2種效果圖,懷舊代碼同理沒有上:

這里是各種濾鏡效果類型:
// #import"GPUImageFilter.h"
#import"GPUImageTwoInputFilter.h"
#import"GPUImagePixellateFilter.h"http://像素化
#import"GPUImagePixellatePositionFilter.h"
#import"GPUImageSepiaFilter.h"http:// 褐色(懷舊)
#import"GPUImageColorInvertFilter.h"http:// 反色
#import"GPUImageSaturationFilter.h"http:// 飽和度
#import"GPUImageContrastFilter.h"http:// 對比度
#import"GPUImageExposureFilter.h"http:// 曝光
#import"GPUImageBrightnessFilter.h"http:// 亮度?
#import"GPUImageLevelsFilter.h"http:// 色階
#import"GPUImageSharpenFilter.h"http://銳化
#import"GPUImageGammaFilter.h"http://gamma:要應(yīng)用的灰度調(diào)整(0.0 - 3.0,默認(rèn)為1.0)#import"GPUImageSobelEdgeDetectionFilter.h"http://Sobel邊緣檢測算法(白邊,黑內(nèi)容,有點(diǎn)漫畫的反色效果)
#import"GPUImageSketchFilter.h"http://素描
#import"GPUImageToonFilter.h"http://卡通效果(黑色粗線描邊)#import"GPUImageSmoothToonFilter.h"http://相比上面的效果更細(xì)膩,上面是粗曠的畫風(fēng)#import"GPUImageMultiplyBlendFilter.h"http://通常用于創(chuàng)建陰影和深度效果#import"GPUImageDissolveBlendFilter.h"http://溶解
#import"GPUImageKuwaharaFilter.h"http://桑原(Kuwahara)濾波,水粉畫的模糊效果;處理時間比較長,慎用
#import"GPUImageKuwaharaRadius3Filter.h"
#import"GPUImageVignetteFilter.h"http://暈影,形成黑色圓形邊緣,突出中間圖像的效果#import"GPUImageGaussianBlurFilter.h"http://高斯模糊#import"GPUImageGaussianBlurPositionFilter.h"
#import"GPUImageGaussianSelectiveBlurFilter.h"http://高斯模糊,選擇部分清晰#import"GPUImageOverlayBlendFilter.h"http://疊加,通常用于創(chuàng)建陰影效果#import"GPUImageDarkenBlendFilter.h"http://加深混合,通常用于重疊類型#import"GPUImageLightenBlendFilter.h"http://減淡混合,通常用于重疊類型#import"GPUImageSwirlFilter.h"http://漩渦,中間形成卷曲的畫面#import"GPUImageSourceOverBlendFilter.h"http://源混合
#import"GPUImageColorBurnBlendFilter.h"http://色彩加深混合#import"GPUImageColorDodgeBlendFilter.h"http://色彩減淡混合#import"GPUImageScreenBlendFilter.h"http://屏幕包裹,通常用于創(chuàng)建亮點(diǎn)和鏡頭眩光#import"GPUImageExclusionBlendFilter.h"http://排除混合
#import"GPUImageDifferenceBlendFilter.h"http://差異混合,通常用于創(chuàng)建更多變動的顏色#import"GPUImageSubtractBlendFilter.h"http://差值混合,通常用于創(chuàng)建兩個圖像之間的動畫變暗模糊效果#import"GPUImageHardLightBlendFilter.h"http://強(qiáng)光混合,通常用于創(chuàng)建陰影效果#import"GPUImageSoftLightBlendFilter.h"http://柔光混合
#import"GPUImageColorBlendFilter.h"
#import"GPUImageHueBlendFilter.h"
#import"GPUImageSaturationBlendFilter.h"
#import"GPUImageLuminosityBlendFilter.h"
#import"GPUImageCropFilter.h"http://剪裁
#import"GPUImageGrayscaleFilter.h"http:// 灰度
#import"GPUImageTransformFilter.h"http://形狀變化
#import"GPUImageChromaKeyBlendFilter.h"http://色度鍵混合
#import"GPUImageHazeFilter.h"http://朦朧加暗
#import"GPUImageLuminanceThresholdFilter.h"http://亮度閾
#import"GPUImagePosterizeFilter.h"http://色調(diào)分離,形成噪點(diǎn)效果#import"GPUImageBoxBlurFilter.h"http://盒狀模糊
#import"GPUImageAdaptiveThresholdFilter.h"http://自適應(yīng)閾值#import"GPUImageUnsharpMaskFilter.h"
#import"GPUImageBulgeDistortionFilter.h"http://凸起失真,魚眼效果#import"GPUImagePinchDistortionFilter.h"http://收縮失真,凹面鏡#import"GPUImageCrosshatchFilter.h"http://交叉線陰影,形成黑白網(wǎng)狀畫面#import"GPUImageCGAColorspaceFilter.h"http://CGA色彩濾鏡,形成黑、淺藍(lán)、紫色塊的畫面#import"GPUImagePolarPixellateFilter.h"http://同心圓像素化#import"GPUImageStretchDistortionFilter.h"http://伸展失真,哈哈鏡#import"GPUImagePerlinNoiseFilter.h"http://柏林噪點(diǎn),花邊噪點(diǎn)#import"GPUImageJFAVoronoiFilter.h"
#import"GPUImageVoronoiConsumerFilter.h"
#import"GPUImageMosaicFilter.h"http://黑白馬賽克
#import"GPUImageTiltShiftFilter.h"http://條紋模糊,中間清晰,上下兩端模糊#import"GPUImage3x3ConvolutionFilter.h"http://3x3卷積,高亮大色塊變黑,加亮邊緣、線條等#import"GPUImageEmbossFilter.h"http://浮雕效果,帶有點(diǎn)3d的感覺#import"GPUImageCannyEdgeDetectionFilter.h"http://Canny邊緣檢測算法#import"GPUImageThresholdEdgeDetectionFilter.h"http://閾值邊緣檢測(效果與上差別不大)#import"GPUImageMaskFilter.h"http://遮罩混合
#import"GPUImageHistogramFilter.h"http:// 色彩直方圖,顯示在圖片上#import"GPUImageHistogramGenerator.h"http:// 色彩直方圖#import"GPUImageHistogramEqualizationFilter.h"
#import"GPUImagePrewittEdgeDetectionFilter.h"http://普瑞維特(Prewitt)邊緣檢測(效果與Sobel差不多,貌似更平滑)
#import"GPUImageXYDerivativeFilter.h"http://XYDerivative邊緣檢測,畫面以藍(lán)色為主,綠色為邊緣,帶彩色
#import"GPUImageHarrisCornerDetectionFilter.h"http://Harris角點(diǎn)檢測,會有綠色小十字顯示在圖片角點(diǎn)處
#import"GPUImageAlphaBlendFilter.h"http://透明混合,通常用于在背景上應(yīng)用前景的透明度#import"GPUImageNormalBlendFilter.h"http://正常#import"GPUImageNonMaximumSuppressionFilter.h"http://非最大抑制,只顯示亮度最高的像素,其他為黑
#import"GPUImageRGBFilter.h"http:// RGB
#import"GPUImageMedianFilter.h"http://中間值,有種稍微模糊邊緣的效果
#import"GPUImageBilateralFilter.h"http://雙邊模糊
#import"GPUImageCrosshairGenerator.h"http://十字
#import"GPUImageToneCurveFilter.h"http:// 色調(diào)曲線#import"GPUImageNobleCornerDetectionFilter.h"http://Noble角點(diǎn)檢測,檢測點(diǎn)更多#import"GPUImageShiTomasiFeatureDetectionFilter.h"http://ShiTomasi角點(diǎn)檢測,與上差別不大#import"GPUImageErosionFilter.h"http://侵蝕邊緣模糊,變黑白#import"GPUImageRGBErosionFilter.h"http://RGB侵蝕邊緣模糊,有色彩#import"GPUImageDilationFilter.h"http://擴(kuò)展邊緣模糊,變黑白#import"GPUImageRGBDilationFilter.h"http://RGB擴(kuò)展邊緣模糊,有色彩#import"GPUImageOpeningFilter.h"http://黑白色調(diào)模糊
#import"GPUImageRGBOpeningFilter.h"http://RGB擴(kuò)展邊緣模糊,有色彩#import"GPUImageClosingFilter.h"http://黑白色調(diào)模糊,暗色會被提亮#import"GPUImageRGBClosingFilter.h"http://彩色模糊,暗色會被提亮#import"GPUImageColorPackingFilter.h"http://色彩丟失,模糊(類似監(jiān)控攝像效果)#import"GPUImageSphereRefractionFilter.h"http://球形折射,圖形倒立#import"GPUImageMonochromeFilter.h"http:// 單色
#import"GPUImageOpacityFilter.h"http:// 不透明度
#import"GPUImageHighlightShadowFilter.h"http:// 提亮陰影
#import"GPUImageFalseColorFilter.h"http:// 色彩替換(替換亮部和暗部色彩)#import"GPUImageHSBFilter.h"
#import"GPUImageHueFilter.h"http://色度
#import"GPUImageGlassSphereFilter.h"http://水晶球效果
#import"GPUImageLookupFilter.h"http://lookup 色彩調(diào)整
#import"GPUImageAmatorkaFilter.h"http://Amatorka lookup
#import"GPUImageMissEtikateFilter.h"http://MissEtikate lookup
#import"GPUImageSoftEleganceFilter.h"http://SoftElegance lookup
#import"GPUImageAddBlendFilter.h"http://通常用于創(chuàng)建兩個圖像之間的動畫變亮模糊效果#import"GPUImageDivideBlendFilter.h"http://通常用于創(chuàng)建兩個圖像之間的動畫變暗模糊效果#import"GPUImagePolkaDotFilter.h"http://像素圓點(diǎn)花樣#import"GPUImageLocalBinaryPatternFilter.h"http://圖像黑白化,并有大量噪點(diǎn)#import"GPUImageLanczosResamplingFilter.h"http://Lanczos重取樣,模糊效果#import"GPUImageAverageColor.h"http://像素平均色值
#import"GPUImageSolidColorGenerator.h"http://純色
#import"GPUImageLuminosity.h"http://亮度平均#import"GPUImageAverageLuminanceThresholdFilter.h"http://像素色值亮度平均,圖像黑白(有類似漫畫效果)
#import"GPUImageWhiteBalanceFilter.h"http://白平橫
#import"GPUImageChromaKeyFilter.h"http://色度鍵
#import"GPUImageLowPassFilter.h"http://用于圖像加亮
#import"GPUImageHighPassFilter.h"http://圖像低于某值時顯示為黑#import"GPUImageMotionDetector.h"http://動作檢測
#import"GPUImageHalftoneFilter.h"http://點(diǎn)染,圖像黑白化,由黑點(diǎn)構(gòu)成原圖的大致圖形#import"GPUImageThresholdedNonMaximumSuppressionFilter.h"http://非最大抑制,只顯示亮度最高的像素,其他為黑,像素丟失更多
#import"GPUImageHoughTransformLineDetector.h"http://線條檢測#import"GPUImageParallelCoordinateLineTransformFilter.h"http://平行線檢測#import"GPUImageThresholdSketchFilter.h"http://閥值素描,形成有噪點(diǎn)的素描#import"GPUImageLineGenerator.h"http:// 線條#import"GPUImageLinearBurnBlendFilter.h"
#import"GPUImageGaussianBlurPositionFilter.h"
#import"GPUImagePixellatePositionFilter.h"
#import"GPUImageTwoInputCrossTextureSamplingFilter.h"
#import"GPUImagePoissonBlendFilter.h"
#import"GPUImageMotionBlurFilter.h"
#import"GPUImageZoomBlurFilter.h"
#import"GPUImageLaplacianFilter.h"
#import"GPUImageiOSBlurFilter.h"
#import"GPUImageLuminanceRangeFilter.h"
#import"GPUImageDirectionalNonMaximumSuppressionFilter.h"
#import"GPUImageDirectionalSobelEdgeDetectionFilter.h"
#import"GPUImageSingleComponentGaussianBlurFilter.h"
#import"GPUImageThreeInputFilter.h"
#import"GPUImageWeakPixelInclusionFilter.h"