GPUImage基礎(chǔ)使用

? ? ? ? ? 近幾年,隨著直播、小視頻的崛起,對視頻圖片濾鏡處理要求也越來越高了。對做濾鏡我們首先想到就是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"

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容