GPUImage是現(xiàn)在做濾鏡最主流的開源框架乱豆,沒有之一。作者BradLarson基于openGL對圖片處理單元進行封裝把沼,提供出GPUImageFilter基類详民,配合shader,常用濾鏡都拿下不是問題涛酗。
一铡原、安裝
(1):首先下載GPUImage ?https://github.com/BradLarson/GPUImage
(2):解壓后,在framework 目錄下商叹,打開 GPUImage.xcodeproj ?工程
(3)因為 GPUImage是一個開源的庫 燕刻,所以需要自己生成 靜態(tài)庫(以前的笨方法把整個工程加入項目,這在使用中出現(xiàn)了很不不必要的麻煩)
(4):運行該工程(生成 用于真機和模擬器的lib)
(5)點擊Products下的 libGPUImage.a剖笙,右鍵卵洗, show in finder 將 兩個lib 合并(方法,詳見關于 創(chuàng)建靜態(tài)庫的博文)
(6) 將 GPUImage.h文件中包含的頭文件全部 提取到 header文件中
二 弥咪、創(chuàng)建用于使用GPUImage的項目
1.創(chuàng)建工程
2.將 header文件夾和libGPUImage.a加入到項目中
目錄結(jié)構(gòu)為:
3.編寫測試代碼
@implementationViewController
- (void)viewDidLoad
{
[superviewDidLoad];
UIImage* inputImage = [UIImageimageNamed:@"k"];
//使用黑白素描濾鏡
GPUImageSketchFilter*disFilter = [[GPUImageSketchFilteralloc]init];
//設置要渲染的區(qū)域
[disFilterforceProcessingAtSize:inputImage.size];
[disFilteruseNextFrameForImageCapture];
//獲取數(shù)據(jù)源
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.運行明目
原圖
經(jīng)過濾鏡處理后的圖片效果过蹂。
三十绑、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://色調(diào)曲線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 色彩調(diào)整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://黑白色調(diào)模糊83#import"GPUImageRGBOpeningFilter.h"http://彩色模糊84#import"GPUImageClosingFilter.h"http://黑白色調(diào)模糊潜的,暗色會被提亮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邊緣檢測算法(白邊亡呵,黑內(nèi)容抽活,有點漫畫的反色效果)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://交叉線陰影,形成黑白網(wǎng)狀畫面120#import"GPUImageColorPackingFilter.h"http://色彩丟失回挽,模糊(類似監(jiān)控攝像效果)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://色調(diào)分離,形成噪點效果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://點染,圖像黑白化,由黑點構(gòu)成原圖的大致圖形137138139#pragmamark - 混合模式 Blend140141#import"GPUImageMultiplyBlendFilter.h"http://通常用于創(chuàng)建陰影和深度效果142#import"GPUImageNormalBlendFilter.h"http://正常143#import"GPUImageAlphaBlendFilter.h"http://透明混合,通常用于在背景上應用前景的透明度144#import"GPUImageDissolveBlendFilter.h"http://溶解145#import"GPUImageOverlayBlendFilter.h"http://疊加,通常用于創(chuàng)建陰影效果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://屏幕包裹,通常用于創(chuàng)建亮點和鏡頭眩光152#import"GPUImageExclusionBlendFilter.h"http://排除混合153#import"GPUImageDifferenceBlendFilter.h"http://差異混合,通常用于創(chuàng)建更多變動的顏色154#import"GPUImageSubtractBlendFilter.h"http://差值混合,通常用于創(chuàng)建兩個圖像之間的動畫變暗模糊效果155#import"GPUImageHardLightBlendFilter.h"http://強光混合,通常用于創(chuàng)建陰影效果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://通常用于創(chuàng)建兩個圖像之間的動畫變亮模糊效果163#import"GPUImageDivideBlendFilter.h"http://通常用于創(chuàng)建兩個圖像之間的動畫變暗模糊效果164165166#pragmamark - 尚不清楚167#import"GPUImageJFAVoroniFilter.h"168#import"GPUImageVoroniConsumerFilter.h"