iOS GPUImage 的使用《转》

《原文地址

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"//亮度29#import"GPUImageExposureFilter.h"//曝光30#import"GPUImageContrastFilter.h"//对比度31#import"GPUImageSaturationFilter.h"//饱和度32#import"GPUImageGammaFilter.h"//伽马线33#import"GPUImageColorInvertFilter.h"//反色34#import"GPUImageSepiaFilter.h"//褐色(怀旧)35#import"GPUImageLevelsFilter.h"//色阶36#import"GPUImageGrayscaleFilter.h"//灰度37#import"GPUImageHistogramFilter.h"//色彩直方图,显示在图片上38#import"GPUImageHistogramGenerator.h"//色彩直方图39#import"GPUImageRGBFilter.h"//RGB40#import"GPUImageToneCurveFilter.h"//色调曲线41#import"GPUImageMonochromeFilter.h"//单色42#import"GPUImageOpacityFilter.h"//不透明度43#import"GPUImageHighlightShadowFilter.h"//提亮阴影44#import"GPUImageFalseColorFilter.h"//色彩替换(替换亮部和暗部色彩)45#import"GPUImageHueFilter.h"//色度46#import"GPUImageChromaKeyFilter.h"//色度键47#import"GPUImageWhiteBalanceFilter.h"//白平横48#import"GPUImageAverageColor.h"//像素平均色值49#import"GPUImageSolidColorGenerator.h"//纯色50#import"GPUImageLuminosity.h"//亮度平均51#import"GPUImageAverageLuminanceThresholdFilter.h"//像素色值亮度平均,图像黑白(有类似漫画效果)5253#import"GPUImageLookupFilter.h"//lookup 色彩调整54#import"GPUImageAmatorkaFilter.h"//Amatorka lookup55#import"GPUImageMissEtikateFilter.h"//MissEtikate lookup56#import"GPUImageSoftEleganceFilter.h"//SoftElegance lookup61#pragmamark - 图像处理 Handle Image6263#import"GPUImageCrosshairGenerator.h"//十字64#import"GPUImageLineGenerator.h"//线条6566#import"GPUImageTransformFilter.h"//形状变化67#import"GPUImageCropFilter.h"//剪裁68#import"GPUImageSharpenFilter.h"//锐化69#import"GPUImageUnsharpMaskFilter.h"//反遮罩锐化7071#import"GPUImageFastBlurFilter.h"//模糊72#import"GPUImageGaussianBlurFilter.h"//高斯模糊73#import"GPUImageGaussianSelectiveBlurFilter.h"//高斯模糊,选择部分清晰74#import"GPUImageBoxBlurFilter.h"//盒状模糊75#import"GPUImageTiltShiftFilter.h"//条纹模糊,中间清晰,上下两端模糊76#import"GPUImageMedianFilter.h"//中间值,有种稍微模糊边缘的效果77#import"GPUImageBilateralFilter.h"//双边模糊78#import"GPUImageErosionFilter.h"//侵蚀边缘模糊,变黑白79#import"GPUImageRGBErosionFilter.h"//RGB侵蚀边缘模糊,有色彩80#import"GPUImageDilationFilter.h"//扩展边缘模糊,变黑白81#import"GPUImageRGBDilationFilter.h"//RGB扩展边缘模糊,有色彩82#import"GPUImageOpeningFilter.h"//黑白色调模糊83#import"GPUImageRGBOpeningFilter.h"//彩色模糊84#import"GPUImageClosingFilter.h"//黑白色调模糊,暗色会被提亮85#import"GPUImageRGBClosingFilter.h"//彩色模糊,暗色会被提亮86#import"GPUImageLanczosResamplingFilter.h"//Lanczos重取样,模糊效果87#import"GPUImageNonMaximumSuppressionFilter.h"//非最大抑制,只显示亮度最高的像素,其他为黑88#import"GPUImageThresholdedNonMaximumSuppressionFilter.h"//与上相比,像素丢失更多8990#import"GPUImageSobelEdgeDetectionFilter.h"//Sobel边缘检测算法(白边,黑内容,有点漫画的反色效果)91#import"GPUImageCannyEdgeDetectionFilter.h"//Canny边缘检测算法(比上更强烈的黑白对比度)92#import"GPUImageThresholdEdgeDetectionFilter.h"//阈值边缘检测(效果与上差别不大)93#import"GPUImagePrewittEdgeDetectionFilter.h"//普瑞维特(Prewitt)边缘检测(效果与Sobel差不多,貌似更平滑)94#import"GPUImageXYDerivativeFilter.h"//XYDerivative边缘检测,画面以蓝色为主,绿色为边缘,带彩色95#import"GPUImageHarrisCornerDetectionFilter.h"//Harris角点检测,会有绿色小十字显示在图片角点处96#import"GPUImageNobleCornerDetectionFilter.h"//Noble角点检测,检测点更多97#import"GPUImageShiTomasiFeatureDetectionFilter.h"//ShiTomasi角点检测,与上差别不大98#import"GPUImageMotionDetector.h"//动作检测99#import"GPUImageHoughTransformLineDetector.h"//线条检测100#import"GPUImageParallelCoordinateLineTransformFilter.h"//平行线检测101102#import"GPUImageLocalBinaryPatternFilter.h"//图像黑白化,并有大量噪点103104#import"GPUImageLowPassFilter.h"//用于图像加亮105#import"GPUImageHighPassFilter.h"//图像低于某值时显示为黑106107108#pragmamark - 视觉效果 Visual Effect109110#import"GPUImageSketchFilter.h"//素描111#import"GPUImageThresholdSketchFilter.h"//阀值素描,形成有噪点的素描112#import"GPUImageToonFilter.h"//卡通效果(黑色粗线描边)113#import"GPUImageSmoothToonFilter.h"//相比上面的效果更细腻,上面是粗旷的画风114#import"GPUImageKuwaharaFilter.h"//桑原(Kuwahara)滤波,水粉画的模糊效果;处理时间比较长,慎用115116#import"GPUImageMosaicFilter.h"//黑白马赛克117#import"GPUImagePixellateFilter.h"//像素化118#import"GPUImagePolarPixellateFilter.h"//同心圆像素化119#import"GPUImageCrosshatchFilter.h"//交叉线阴影,形成黑白网状画面120#import"GPUImageColorPackingFilter.h"//色彩丢失,模糊(类似监控摄像效果)121122#import"GPUImageVignetteFilter.h"//晕影,形成黑色圆形边缘,突出中间图像的效果123#import"GPUImageSwirlFilter.h"//漩涡,中间形成卷曲的画面124#import"GPUImageBulgeDistortionFilter.h"//凸起失真,鱼眼效果125#import"GPUImagePinchDistortionFilter.h"//收缩失真,凹面镜126#import"GPUImageStretchDistortionFilter.h"//伸展失真,哈哈镜127#import"GPUImageGlassSphereFilter.h"//水晶球效果128#import"GPUImageSphereRefractionFilter.h"//球形折射,图形倒立129130#import"GPUImagePosterizeFilter.h"//色调分离,形成噪点效果131#import"GPUImageCGAColorspaceFilter.h"//CGA色彩滤镜,形成黑、浅蓝、紫色块的画面132#import"GPUImagePerlinNoiseFilter.h"//柏林噪点,花边噪点133#import"GPUImage3x3ConvolutionFilter.h"//3x3卷积,高亮大色块变黑,加亮边缘、线条等134#import"GPUImageEmbossFilter.h"//浮雕效果,带有点3d的感觉135#import"GPUImagePolkaDotFilter.h"//像素圆点花样136#import"GPUImageHalftoneFilter.h"//点染,图像黑白化,由黑点构成原图的大致图形137138139#pragmamark - 混合模式 Blend140141#import"GPUImageMultiplyBlendFilter.h"//通常用于创建阴影和深度效果142#import"GPUImageNormalBlendFilter.h"//正常143#import"GPUImageAlphaBlendFilter.h"//透明混合,通常用于在背景上应用前景的透明度144#import"GPUImageDissolveBlendFilter.h"//溶解145#import"GPUImageOverlayBlendFilter.h"//叠加,通常用于创建阴影效果146#import"GPUImageDarkenBlendFilter.h"//加深混合,通常用于重叠类型147#import"GPUImageLightenBlendFilter.h"//减淡混合,通常用于重叠类型148#import"GPUImageSourceOverBlendFilter.h"//源混合149#import"GPUImageColorBurnBlendFilter.h"//色彩加深混合150#import"GPUImageColorDodgeBlendFilter.h"//色彩减淡混合151#import"GPUImageScreenBlendFilter.h"//屏幕包裹,通常用于创建亮点和镜头眩光152#import"GPUImageExclusionBlendFilter.h"//排除混合153#import"GPUImageDifferenceBlendFilter.h"//差异混合,通常用于创建更多变动的颜色154#import"GPUImageSubtractBlendFilter.h"//差值混合,通常用于创建两个图像之间的动画变暗模糊效果155#import"GPUImageHardLightBlendFilter.h"//强光混合,通常用于创建阴影效果156#import"GPUImageSoftLightBlendFilter.h"//柔光混合157#import"GPUImageChromaKeyBlendFilter.h"//色度键混合158#import"GPUImageMaskFilter.h"//遮罩混合159#import"GPUImageHazeFilter.h"//朦胧加暗160#import"GPUImageLuminanceThresholdFilter.h"//亮度阈161#import"GPUImageAdaptiveThresholdFilter.h"//自适应阈值162#import"GPUImageAddBlendFilter.h"//通常用于创建两个图像之间的动画变亮模糊效果163#import"GPUImageDivideBlendFilter.h"//通常用于创建两个图像之间的动画变暗模糊效果164165166#pragmamark - 尚不清楚167#import"GPUImageJFAVoroniFilter.h"168#import"GPUImageVoroniConsumerFilter.h"

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 158,117评论 4 360
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 66,963评论 1 290
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 107,897评论 0 240
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,805评论 0 203
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,208评论 3 286
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,535评论 1 216
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,797评论 2 311
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,493评论 0 197
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,215评论 1 241
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,477评论 2 244
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 31,988评论 1 258
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,325评论 2 252
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 32,971评论 3 235
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,055评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,807评论 0 194
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,544评论 2 271
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,455评论 2 266

推荐阅读更多精彩内容