GPUImage是現在做濾鏡最主流的開源框架,沒有之一。作者BradLarson基于openGL對圖片處理單元進行封裝,提供出GPUImageFilter基類,配合shader,常用濾鏡都拿下不是問題。
一、安裝
(1):首先下載GPUImage ?https://github.com/BradLarson/GPUImage
(2):解壓后,在framework 目錄下,打開 GPUImage.xcodeproj ?工程
(3)因為 GPUImage是一個開源的庫 ,所以需要自己生成 靜態庫(以前的笨方法把整個工程加入項目,這在使用中出現了很不不必要的麻煩)
(4):運行該工程(生成 用于真機和模擬器的lib)
(5)點擊Products下的 libGPUImage.a,右鍵, show in finder 將 兩個lib 合并(方法,詳見關于 創建靜態庫的博文)
(6) 將 GPUImage.h文件中包含的頭文件全部 提取到 header文件中
二 、創建用于使用GPUImage的項目
1.創建工程
2.將 header文件夾和libGPUImage.a加入到項目中
目錄結構為:
3.編寫測試代碼
@implementationViewController
- (void)viewDidLoad
{
[superviewDidLoad];
UIImage* inputImage = [UIImageimageNamed:@"k"];
//使用黑白素描濾鏡
GPUImageSketchFilter*disFilter = [[GPUImageSketchFilteralloc]init];
//設置要渲染的區域
[disFilterforceProcessingAtSize:inputImage.size];
[disFilteruseNextFrameForImageCapture];
//獲取數據源
GPUImagePicture*stillImageSource = [[GPUImagePicturealloc]initWithImage:inputImage];
//添加上濾鏡
[stillImageSourceaddTarget:disFilter];
//開始渲染
[stillImageSourceprocessImage];
//獲取渲染后的圖片
UIImage*newImage = [disFilterimageFromCurrentFramebuffer];
//加載出來
UIImageView*imageView = [[UIImageViewalloc]initWithImage:newImage];
imageView.frame=CGRectMake(50,50,inputImage.size.width,inputImage.size.height);
[self.viewaddSubview:imageView];
}
4.運行明目
原圖
經過濾鏡處理后的圖片效果。
三、GPUImage中的幾個概念
? output為輸出源
? intput為輸入源
? filter為濾鏡
28#import"GPUImageBrightnessFilter.h"http://亮度29#import"GPUImageExposureFilter.h"http://曝光30#import"GPUImageContrastFilter.h"http://對比度31#import"GPUImageSaturationFilter.h"http://飽和度32#import"GPUImageGammaFilter.h"http://伽馬線33#import"GPUImageColorInvertFilter.h"http://反色34#import"GPUImageSepiaFilter.h"http://褐色(懷舊)35#import"GPUImageLevelsFilter.h"http://色階36#import"GPUImageGrayscaleFilter.h"http://灰度37#import"GPUImageHistogramFilter.h"http://色彩直方圖,顯示在圖片上38#import"GPUImageHistogramGenerator.h"http://色彩直方圖39#import"GPUImageRGBFilter.h"http://RGB40#import"GPUImageToneCurveFilter.h"http://色調曲線41#import"GPUImageMonochromeFilter.h"http://單色42#import"GPUImageOpacityFilter.h"http://不透明度43#import"GPUImageHighlightShadowFilter.h"http://提亮陰影44#import"GPUImageFalseColorFilter.h"http://色彩替換(替換亮部和暗部色彩)45#import"GPUImageHueFilter.h"http://色度46#import"GPUImageChromaKeyFilter.h"http://色度鍵47#import"GPUImageWhiteBalanceFilter.h"http://白平橫48#import"GPUImageAverageColor.h"http://像素平均色值49#import"GPUImageSolidColorGenerator.h"http://純色50#import"GPUImageLuminosity.h"http://亮度平均51#import"GPUImageAverageLuminanceThresholdFilter.h"http://像素色值亮度平均,圖像黑白(有類似漫畫效果)5253#import"GPUImageLookupFilter.h"http://lookup 色彩調整54#import"GPUImageAmatorkaFilter.h"http://Amatorka lookup55#import"GPUImageMissEtikateFilter.h"http://MissEtikate lookup56#import"GPUImageSoftEleganceFilter.h"http://SoftElegance lookup61#pragmamark - 圖像處理 Handle Image6263#import"GPUImageCrosshairGenerator.h"http://十字64#import"GPUImageLineGenerator.h"http://線條6566#import"GPUImageTransformFilter.h"http://形狀變化67#import"GPUImageCropFilter.h"http://剪裁68#import"GPUImageSharpenFilter.h"http://銳化69#import"GPUImageUnsharpMaskFilter.h"http://反遮罩銳化7071#import"GPUImageFastBlurFilter.h"http://模糊72#import"GPUImageGaussianBlurFilter.h"http://高斯模糊73#import"GPUImageGaussianSelectiveBlurFilter.h"http://高斯模糊,選擇部分清晰74#import"GPUImageBoxBlurFilter.h"http://盒狀模糊75#import"GPUImageTiltShiftFilter.h"http://條紋模糊,中間清晰,上下兩端模糊76#import"GPUImageMedianFilter.h"http://中間值,有種稍微模糊邊緣的效果77#import"GPUImageBilateralFilter.h"http://雙邊模糊78#import"GPUImageErosionFilter.h"http://侵蝕邊緣模糊,變黑白79#import"GPUImageRGBErosionFilter.h"http://RGB侵蝕邊緣模糊,有色彩80#import"GPUImageDilationFilter.h"http://擴展邊緣模糊,變黑白81#import"GPUImageRGBDilationFilter.h"http://RGB擴展邊緣模糊,有色彩82#import"GPUImageOpeningFilter.h"http://黑白色調模糊83#import"GPUImageRGBOpeningFilter.h"http://彩色模糊84#import"GPUImageClosingFilter.h"http://黑白色調模糊,暗色會被提亮85#import"GPUImageRGBClosingFilter.h"http://彩色模糊,暗色會被提亮86#import"GPUImageLanczosResamplingFilter.h"http://Lanczos重取樣,模糊效果87#import"GPUImageNonMaximumSuppressionFilter.h"http://非最大抑制,只顯示亮度最高的像素,其他為黑88#import"GPUImageThresholdedNonMaximumSuppressionFilter.h"http://與上相比,像素丟失更多8990#import"GPUImageSobelEdgeDetectionFilter.h"http://Sobel邊緣檢測算法(白邊,黑內容,有點漫畫的反色效果)91#import"GPUImageCannyEdgeDetectionFilter.h"http://Canny邊緣檢測算法(比上更強烈的黑白對比度)92#import"GPUImageThresholdEdgeDetectionFilter.h"http://閾值邊緣檢測(效果與上差別不大)93#import"GPUImagePrewittEdgeDetectionFilter.h"http://普瑞維特(Prewitt)邊緣檢測(效果與Sobel差不多,貌似更平滑)94#import"GPUImageXYDerivativeFilter.h"http://XYDerivative邊緣檢測,畫面以藍色為主,綠色為邊緣,帶彩色95#import"GPUImageHarrisCornerDetectionFilter.h"http://Harris角點檢測,會有綠色小十字顯示在圖片角點處96#import"GPUImageNobleCornerDetectionFilter.h"http://Noble角點檢測,檢測點更多97#import"GPUImageShiTomasiFeatureDetectionFilter.h"http://ShiTomasi角點檢測,與上差別不大98#import"GPUImageMotionDetector.h"http://動作檢測99#import"GPUImageHoughTransformLineDetector.h"http://線條檢測100#import"GPUImageParallelCoordinateLineTransformFilter.h"http://平行線檢測101102#import"GPUImageLocalBinaryPatternFilter.h"http://圖像黑白化,并有大量噪點103104#import"GPUImageLowPassFilter.h"http://用于圖像加亮105#import"GPUImageHighPassFilter.h"http://圖像低于某值時顯示為黑106107108#pragmamark - 視覺效果 Visual Effect109110#import"GPUImageSketchFilter.h"http://素描111#import"GPUImageThresholdSketchFilter.h"http://閥值素描,形成有噪點的素描112#import"GPUImageToonFilter.h"http://卡通效果(黑色粗線描邊)113#import"GPUImageSmoothToonFilter.h"http://相比上面的效果更細膩,上面是粗曠的畫風114#import"GPUImageKuwaharaFilter.h"http://桑原(Kuwahara)濾波,水粉畫的模糊效果;處理時間比較長,慎用115116#import"GPUImageMosaicFilter.h"http://黑白馬賽克117#import"GPUImagePixellateFilter.h"http://像素化118#import"GPUImagePolarPixellateFilter.h"http://同心圓像素化119#import"GPUImageCrosshatchFilter.h"http://交叉線陰影,形成黑白網狀畫面120#import"GPUImageColorPackingFilter.h"http://色彩丟失,模糊(類似監控攝像效果)121122#import"GPUImageVignetteFilter.h"http://暈影,形成黑色圓形邊緣,突出中間圖像的效果123#import"GPUImageSwirlFilter.h"http://漩渦,中間形成卷曲的畫面124#import"GPUImageBulgeDistortionFilter.h"http://凸起失真,魚眼效果125#import"GPUImagePinchDistortionFilter.h"http://收縮失真,凹面鏡126#import"GPUImageStretchDistortionFilter.h"http://伸展失真,哈哈鏡127#import"GPUImageGlassSphereFilter.h"http://水晶球效果128#import"GPUImageSphereRefractionFilter.h"http://球形折射,圖形倒立129130#import"GPUImagePosterizeFilter.h"http://色調分離,形成噪點效果131#import"GPUImageCGAColorspaceFilter.h"http://CGA色彩濾鏡,形成黑、淺藍、紫色塊的畫面132#import"GPUImagePerlinNoiseFilter.h"http://柏林噪點,花邊噪點133#import"GPUImage3x3ConvolutionFilter.h"http://3x3卷積,高亮大色塊變黑,加亮邊緣、線條等134#import"GPUImageEmbossFilter.h"http://浮雕效果,帶有點3d的感覺135#import"GPUImagePolkaDotFilter.h"http://像素圓點花樣136#import"GPUImageHalftoneFilter.h"http://點染,圖像黑白化,由黑點構成原圖的大致圖形137138139#pragmamark - 混合模式 Blend140141#import"GPUImageMultiplyBlendFilter.h"http://通常用于創建陰影和深度效果142#import"GPUImageNormalBlendFilter.h"http://正常143#import"GPUImageAlphaBlendFilter.h"http://透明混合,通常用于在背景上應用前景的透明度144#import"GPUImageDissolveBlendFilter.h"http://溶解145#import"GPUImageOverlayBlendFilter.h"http://疊加,通常用于創建陰影效果146#import"GPUImageDarkenBlendFilter.h"http://加深混合,通常用于重疊類型147#import"GPUImageLightenBlendFilter.h"http://減淡混合,通常用于重疊類型148#import"GPUImageSourceOverBlendFilter.h"http://源混合149#import"GPUImageColorBurnBlendFilter.h"http://色彩加深混合150#import"GPUImageColorDodgeBlendFilter.h"http://色彩減淡混合151#import"GPUImageScreenBlendFilter.h"http://屏幕包裹,通常用于創建亮點和鏡頭眩光152#import"GPUImageExclusionBlendFilter.h"http://排除混合153#import"GPUImageDifferenceBlendFilter.h"http://差異混合,通常用于創建更多變動的顏色154#import"GPUImageSubtractBlendFilter.h"http://差值混合,通常用于創建兩個圖像之間的動畫變暗模糊效果155#import"GPUImageHardLightBlendFilter.h"http://強光混合,通常用于創建陰影效果156#import"GPUImageSoftLightBlendFilter.h"http://柔光混合157#import"GPUImageChromaKeyBlendFilter.h"http://色度鍵混合158#import"GPUImageMaskFilter.h"http://遮罩混合159#import"GPUImageHazeFilter.h"http://朦朧加暗160#import"GPUImageLuminanceThresholdFilter.h"http://亮度閾161#import"GPUImageAdaptiveThresholdFilter.h"http://自適應閾值162#import"GPUImageAddBlendFilter.h"http://通常用于創建兩個圖像之間的動畫變亮模糊效果163#import"GPUImageDivideBlendFilter.h"http://通常用于創建兩個圖像之間的動畫變暗模糊效果164165166#pragmamark - 尚不清楚167#import"GPUImageJFAVoroniFilter.h"168#import"GPUImageVoroniConsumerFilter.h"