GPUImage的使用(圖片渲染篇)

GPUImage接入

下載GPUImage 地址 : https://github.com/BradLarson/GPUImage

GPUImage不可以直接拖進(jìn)工程里面直接使用,需要做一下配置才能使用

新建一個GPUImageDemo的工程

吧下載到的GPUImage的文件里的framework文件夾復(fù)制到工程的文件夾目錄下

在build phase的Link Binary With Libraries, 把libGPUImage.a加進(jìn)來.

添加下面這些系統(tǒng)framework:

CoreMedia

CoreVideo

OpenGLES

AVFoundation

QuartzCore

再把framework文件夾中的GPUImage.xcodeproj拖進(jìn)工程中的Frameworks中(注意,這是拖到Xcode工程里面的Frameworks),這時,工程中的Build Phases 中的Target Dependencies中可以看到GPUImage,添加

并在Link Binary With Libraries中添加libGPUImage.a

Build settings中 搜索Header Search Paths, 在finder里面找到GPUImage下面的source, 直接將source拖進(jìn)Header Search Paths內(nèi), 并選擇recursive 遞歸調(diào)用

target-build setting里面,other linker flags 里面添加 -fobjc-arc -ObjC 這兩項, 接著就可以直接引入GPUImage.h來使用GPUImage內(nèi)的方法了


簡單實用(補光)

UIImage *image = [UIImage imageNamed:@"IMG_0265.jpg"];

//創(chuàng)建一個亮度的濾鏡

GPUImageBrightnessFilter *passthroughFilter = [[GPUImageBrightnessFilter alloc] init];

passthroughFilter.brightness = 0.5f;

//設(shè)置要渲染的區(qū)域

[passthroughFilter forceProcessingAtSize:image.size];

[passthroughFilter useNextFrameForImageCapture];

//獲取數(shù)據(jù)源

GPUImagePicture *stillImageSource = [[GPUImagePicture alloc] initWithImage:image];

//添加上濾鏡

[stillImageSource addTarget:passthroughFilter];

//開始渲染

[stillImageSource processImage];

//獲取渲染后的圖片

UIImage *nearestNeighborImage = [passthroughFilter imageFromCurrentFramebuffer];

UIImageView *imageView = [[UIImageView alloc] initWithImage:nearestNeighborImage];

imageView.frame = CGRectMake(0, 0, self.view.frame.size.width, self.view.frame.size.height/2);

imageView.backgroundColor = [UIColor redColor];

[self.view addSubview:imageView];


//素描濾鏡

UIImage *image = [UIImage imageNamed:@"IMG_0265.jpg"];

//創(chuàng)建黑白素描濾鏡

GPUImageSketchFilter *sketchFilter = [[GPUImageSketchFilter alloc] init];

//設(shè)置要渲染的區(qū)域

[sketchFilter forceProcessingAtSize:image.size];

[sketchFilter useNextFrameForImageCapture];

//獲取數(shù)據(jù)源

GPUImagePicture *stillImageSource = [[GPUImagePicture alloc] initWithImage:image];

//添加上濾鏡

[stillImageSource addTarget:sketchFilter];

//開始渲染

[stillImageSource processImage];

//獲取渲染后的圖片

UIImage *nearestNeighborImage = [sketchFilter imageFromCurrentFramebuffer];

UIImageView *imageView = [[UIImageView alloc] initWithImage:nearestNeighborImage];

imageView.frame = CGRectMake(0, 0, self.view.frame.size.width, self.view.frame.size.height/2);

imageView.backgroundColor = [UIColor redColor];

[self.view addSubview:imageView];


素描



原圖
補光后

使用總結(jié)

使用過程中設(shè)置要渲染的區(qū)域,獲取數(shù)據(jù)源,添加上濾鏡,開始渲染,獲取渲染后的圖片等方式都是一樣的,區(qū)別只是創(chuàng)建的濾鏡不一樣,有些濾鏡創(chuàng)建以后需要設(shè)置一定的參數(shù)。



#pragma mark - 調(diào)整顏色 Handle Color

#import "GPUImageBrightnessFilter.h"? ? ? ? ? ? ? ? //亮度

#import "GPUImageExposureFilter.h"? ? ? ? ? ? ? ? ? //曝光

#import "GPUImageContrastFilter.h"? ? ? ? ? ? ? ? ? //對比度

#import "GPUImageSaturationFilter.h"? ? ? ? ? ? ? ? //飽和度

#import "GPUImageGammaFilter.h"? ? ? ? ? ? ? ? ? ? //伽馬線

#import "GPUImageColorInvertFilter.h"? ? ? ? ? ? ? //反色

#import "GPUImageSepiaFilter.h"? ? ? ? ? ? ? ? ? ? //褐色(懷舊)

#import "GPUImageLevelsFilter.h"? ? ? ? ? ? ? ? ? ? //色階

#import "GPUImageGrayscaleFilter.h"? ? ? ? ? ? ? ? //灰度

#import "GPUImageHistogramFilter.h"? ? ? ? ? ? ? ? //色彩直方圖,顯示在圖片上

#import "GPUImageHistogramGenerator.h"? ? ? ? ? ? ? //色彩直方圖

#import "GPUImageRGBFilter.h"? ? ? ? ? ? ? ? ? ? ? //RGB

#import "GPUImageToneCurveFilter.h"? ? ? ? ? ? ? ? //色調(diào)曲線

#import "GPUImageMonochromeFilter.h"? ? ? ? ? ? ? ? //單色

#import "GPUImageOpacityFilter.h"? ? ? ? ? ? ? ? ? //不透明度

#import "GPUImageHighlightShadowFilter.h"? ? ? ? ? //提亮陰影

#import "GPUImageFalseColorFilter.h"? ? ? ? ? ? ? ? //色彩替換(替換亮部和暗部色彩)

#import "GPUImageHueFilter.h"? ? ? ? ? ? ? ? ? ? ? //色度

#import "GPUImageChromaKeyFilter.h"? ? ? ? ? ? ? ? //色度鍵

#import "GPUImageWhiteBalanceFilter.h"? ? ? ? ? ? ? //白平橫

#import "GPUImageAverageColor.h"? ? ? ? ? ? ? ? ? ? //像素平均色值

#import "GPUImageSolidColorGenerator.h"? ? ? ? ? ? //純色

#import "GPUImageLuminosity.h"? ? ? ? ? ? ? ? ? ? ? //亮度平均

#import "GPUImageAverageLuminanceThresholdFilter.h" //像素色值亮度平均,圖像黑白(有類似漫畫效果)

#import "GPUImageLookupFilter.h"? ? ? ? ? ? ? ? ? ? //lookup 色彩調(diào)整

#import "GPUImageAmatorkaFilter.h"? ? ? ? ? ? ? ? ? //Amatorka lookup

#import "GPUImageMissEtikateFilter.h"? ? ? ? ? ? ? //MissEtikate lookup

#import "GPUImageSoftEleganceFilter.h"? ? ? ? ? ? ? //SoftElegance lookup



#pragma mark - 圖像處理 Handle Image

#import "GPUImageCrosshairGenerator.h"? ? ? ? ? ? ? //十字

#import "GPUImageLineGenerator.h"? ? ? ? ? ? ? ? ? //線條

#import "GPUImageTransformFilter.h"? ? ? ? ? ? ? ? //形狀變化

#import "GPUImageCropFilter.h"? ? ? ? ? ? ? ? ? ? ? //剪裁

#import "GPUImageSharpenFilter.h"? ? ? ? ? ? ? ? ? //銳化

#import "GPUImageUnsharpMaskFilter.h"? ? ? ? ? ? ? //反遮罩銳化

#import "GPUImageFastBlurFilter.h"? ? ? ? ? ? ? ? ? //模糊

#import "GPUImageGaussianBlurFilter.h"? ? ? ? ? ? ? //高斯模糊

#import "GPUImageGaussianSelectiveBlurFilter.h"? ? //高斯模糊,選擇部分清晰

#import "GPUImageBoxBlurFilter.h"? ? ? ? ? ? ? ? ? //盒狀模糊

#import "GPUImageTiltShiftFilter.h"? ? ? ? ? ? ? ? //條紋模糊,中間清晰,上下兩端模糊

#import "GPUImageMedianFilter.h"? ? ? ? ? ? ? ? ? ? //中間值,有種稍微模糊邊緣的效果

#import "GPUImageBilateralFilter.h"? ? ? ? ? ? ? ? //雙邊模糊

#import "GPUImageErosionFilter.h"? ? ? ? ? ? ? ? ? //侵蝕邊緣模糊,變黑白

#import "GPUImageRGBErosionFilter.h"? ? ? ? ? ? ? ? //RGB侵蝕邊緣模糊,有色彩

#import "GPUImageDilationFilter.h"? ? ? ? ? ? ? ? ? //擴(kuò)展邊緣模糊,變黑白

#import "GPUImageRGBDilationFilter.h"? ? ? ? ? ? ? //RGB擴(kuò)展邊緣模糊,有色彩

#import "GPUImageOpeningFilter.h"? ? ? ? ? ? ? ? ? //黑白色調(diào)模糊

#import "GPUImageRGBOpeningFilter.h"? ? ? ? ? ? ? ? //彩色模糊

#import "GPUImageClosingFilter.h"? ? ? ? ? ? ? ? ? //黑白色調(diào)模糊,暗色會被提亮

#import "GPUImageRGBClosingFilter.h"? ? ? ? ? ? ? ? //彩色模糊,暗色會被提亮

#import "GPUImageLanczosResamplingFilter.h"? ? ? ? //Lanczos重取樣,模糊效果

#import "GPUImageNonMaximumSuppressionFilter.h"? ? //非最大抑制,只顯示亮度最高的像素,其他為黑

#import "GPUImageThresholdedNonMaximumSuppressionFilter.h" //與上相比,像素丟失更多

#import "GPUImageSobelEdgeDetectionFilter.h"? ? ? ? //Sobel邊緣檢測算法(白邊,黑內(nèi)容,有點漫畫的反色效果)

#import "GPUImageCannyEdgeDetectionFilter.h"? ? ? ? //Canny邊緣檢測算法(比上更強烈的黑白對比度)

#import "GPUImageThresholdEdgeDetectionFilter.h"? ? //閾值邊緣檢測(效果與上差別不大)

#import "GPUImagePrewittEdgeDetectionFilter.h"? ? ? //普瑞維特(Prewitt)邊緣檢測(效果與Sobel差不多,貌似更平滑)

#import "GPUImageXYDerivativeFilter.h"? ? ? ? ? ? ? //XYDerivative邊緣檢測,畫面以藍(lán)色為主,綠色為邊緣,帶彩色

#import "GPUImageHarrisCornerDetectionFilter.h"? ? //Harris角點檢測,會有綠色小十字顯示在圖片角點處

#import "GPUImageNobleCornerDetectionFilter.h"? ? ? //Noble角點檢測,檢測點更多

#import "GPUImageShiTomasiFeatureDetectionFilter.h" //ShiTomasi角點檢測,與上差別不大

#import "GPUImageMotionDetector.h"? ? ? ? ? ? ? ? ? //動作檢測

#import "GPUImageHoughTransformLineDetector.h"? ? ? //線條檢測

#import "GPUImageParallelCoordinateLineTransformFilter.h" //平行線檢測

#import "GPUImageLocalBinaryPatternFilter.h"? ? ? ? //圖像黑白化,并有大量噪點

#import "GPUImageLowPassFilter.h"? ? ? ? ? ? ? ? ? //用于圖像加亮

#import "GPUImageHighPassFilter.h"? ? ? ? ? ? ? ? ? //圖像低于某值時顯示為黑



#pragma mark - 視覺效果 Visual Effect

#import "GPUImageSketchFilter.h"? ? ? ? ? ? ? ? ? ? //素描

#import "GPUImageThresholdSketchFilter.h"? ? ? ? ? //閥值素描,形成有噪點的素描

#import "GPUImageToonFilter.h"? ? ? ? ? ? ? ? ? ? ? //卡通效果(黑色粗線描邊)

#import "GPUImageSmoothToonFilter.h"? ? ? ? ? ? ? ? //相比上面的效果更細(xì)膩,上面是粗曠的畫風(fēng)

#import "GPUImageKuwaharaFilter.h"? ? ? ? ? ? ? ? ? //桑原(Kuwahara)濾波,水粉畫的模糊效果;處理時間比較長,慎用

#import "GPUImageMosaicFilter.h"? ? ? ? ? ? ? ? ? ? //黑白馬賽克

#import "GPUImagePixellateFilter.h"? ? ? ? ? ? ? ? //像素化

#import "GPUImagePolarPixellateFilter.h"? ? ? ? ? ? //同心圓像素化

#import "GPUImageCrosshatchFilter.h"? ? ? ? ? ? ? ? //交叉線陰影,形成黑白網(wǎng)狀畫面

#import "GPUImageColorPackingFilter.h"? ? ? ? ? ? ? //色彩丟失,模糊(類似監(jiān)控攝像效果)

#import "GPUImageVignetteFilter.h"? ? ? ? ? ? ? ? ? //暈影,形成黑色圓形邊緣,突出中間圖像的效果

#import "GPUImageSwirlFilter.h"? ? ? ? ? ? ? ? ? ? //漩渦,中間形成卷曲的畫面

#import "GPUImageBulgeDistortionFilter.h"? ? ? ? ? //凸起失真,魚眼效果

#import "GPUImagePinchDistortionFilter.h"? ? ? ? ? //收縮失真,凹面鏡

#import "GPUImageStretchDistortionFilter.h"? ? ? ? //伸展失真,哈哈鏡

#import "GPUImageGlassSphereFilter.h"? ? ? ? ? ? ? //水晶球效果

#import "GPUImageSphereRefractionFilter.h"? ? ? ? ? //球形折射,圖形倒立

#import "GPUImagePosterizeFilter.h"? ? ? ? ? ? ? ? //色調(diào)分離,形成噪點效果

#import "GPUImageCGAColorspaceFilter.h"? ? ? ? ? ? //CGA色彩濾鏡,形成黑、淺藍(lán)、紫色塊的畫面

#import "GPUImagePerlinNoiseFilter.h"? ? ? ? ? ? ? //柏林噪點,花邊噪點

#import "GPUImage3x3ConvolutionFilter.h"? ? ? ? ? ? //3x3卷積,高亮大色塊變黑,加亮邊緣、線條等

#import "GPUImageEmbossFilter.h"? ? ? ? ? ? ? ? ? ? //浮雕效果,帶有點3d的感覺

#import "GPUImagePolkaDotFilter.h"? ? ? ? ? ? ? ? ? //像素圓點花樣

#import "GPUImageHalftoneFilter.h"? ? ? ? ? ? ? ? ? //點染,圖像黑白化,由黑點構(gòu)成原圖的大致圖形



#pragma mark - 混合模式 Blend

#import "GPUImageMultiplyBlendFilter.h"? ? ? ? ? ? //通常用于創(chuàng)建陰影和深度效果

#import "GPUImageNormalBlendFilter.h"? ? ? ? ? ? ? //正常

#import "GPUImageAlphaBlendFilter.h"? ? ? ? ? ? ? ? //透明混合,通常用于在背景上應(yīng)用前景的透明度

#import "GPUImageDissolveBlendFilter.h"? ? ? ? ? ? //溶解

#import "GPUImageOverlayBlendFilter.h"? ? ? ? ? ? ? //疊加,通常用于創(chuàng)建陰影效果

#import "GPUImageDarkenBlendFilter.h"? ? ? ? ? ? ? //加深混合,通常用于重疊類型

#import "GPUImageLightenBlendFilter.h"? ? ? ? ? ? ? //減淡混合,通常用于重疊類型

#import "GPUImageSourceOverBlendFilter.h"? ? ? ? ? //源混合

#import "GPUImageColorBurnBlendFilter.h"? ? ? ? ? ? //色彩加深混合

#import "GPUImageColorDodgeBlendFilter.h"? ? ? ? ? //色彩減淡混合

#import "GPUImageScreenBlendFilter.h"? ? ? ? ? ? ? //屏幕包裹,通常用于創(chuàng)建亮點和鏡頭眩光

#import "GPUImageExclusionBlendFilter.h"? ? ? ? ? ? //排除混合

#import "GPUImageDifferenceBlendFilter.h"? ? ? ? ? //差異混合,通常用于創(chuàng)建更多變動的顏色

#import "GPUImageSubtractBlendFilter.h"? ? ? ? ? ? //差值混合,通常用于創(chuàng)建兩個圖像之間的動畫變暗模糊效果

#import "GPUImageHardLightBlendFilter.h"? ? ? ? ? ? //強光混合,通常用于創(chuàng)建陰影效果

#import "GPUImageSoftLightBlendFilter.h"? ? ? ? ? ? //柔光混合

#import "GPUImageChromaKeyBlendFilter.h"? ? ? ? ? ? //色度鍵混合

#import "GPUImageMaskFilter.h"? ? ? ? ? ? ? ? ? ? ? //遮罩混合

#import "GPUImageHazeFilter.h"? ? ? ? ? ? ? ? ? ? ? //朦朧加暗

#import "GPUImageLuminanceThresholdFilter.h"? ? ? ? //亮度閾

#import "GPUImageAdaptiveThresholdFilter.h"? ? ? ? //自適應(yīng)閾值

#import "GPUImageAddBlendFilter.h"? ? ? ? ? ? ? ? ? //通常用于創(chuàng)建兩個圖像之間的動畫變亮模糊效果

#import "GPUImageDivideBlendFilter.h"? ? ? ? ? ? ? //通常用于創(chuàng)建兩個圖像之間的動畫變暗模糊效果


視頻編輯請看下篇:GPUImage視頻編輯?

iOS交流群:147881723

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

相關(guān)閱讀更多精彩內(nèi)容

  • 《原文地址》 GPUImage是現(xiàn)在做濾鏡最主流的開源框架,沒有之一。作者BradLarson基于openGL對圖...
    泛坷閱讀 790評論 0 1
  • http://blog.csdn.net/kangguang/article/details/51658683 G...
    Skylpy閱讀 1,326評論 0 0
  • GPUImage是現(xiàn)在做濾鏡最主流的開源框架,沒有之一。作者BradLarson基于openGL對圖片處理單元進(jìn)行...
    清蘂翅膀的技術(shù)閱讀 14,680評論 1 13
  • GPUImage的簡單使用 GPUImage 是一個開源的圖像處理庫,提供了非常多的濾鏡效果來加工圖片。GPUIm...
    困惑困惑困惑閱讀 482評論 0 1
  • 簡述: 基于GPU的圖像加速,因此可以加速對實時攝像頭視頻、電影以及image的濾鏡和其它效果處理,并且能夠自定義...
    wonderstruck閱讀 3,370評論 6 5

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