GPUImage框架简介
GPUImage框架是一个基于OpenGL ES 2.0的iOS图像和视频处理框架。它充分利用GPU并行计算能力可以实时处理图像和视频,可以让开发者轻松地实现各种滤镜效果。
提供了GPUImageMovie、GPUImageCamera等实时视频输入处理类,方便开发者对实时视频进行滤镜处理。
提供了GPUImagePicture等图像处理类,方便开发者对图像进行滤镜处理。
gitHub地址:https://github.com/BradLarson/GPUImage
GPUImage框架核心类
GPUImageInput:表示输入源。它是所有输入对象的基类,定义了输入源应该具有的基本方法,例如需要处理的图像、需要处理的纹理等。
GPUImageOutput:表示输出源。它是所有输出对象的基类,定义了输出源应该具有的基本方法,例如获取处理后的纹理、获取处理后的图片、获取处理后的视频等。
GPUImageFilter:表示滤镜。它是所有滤镜对象的基类,定义了滤镜应该具有的基本方法,例如设置输入纹理、处理纹理等。
GPUImageFramebuffer:表示帧缓存对象。它是所有帧缓存对象的基类,保存了一个纹理对象和一些其他的数据,可以在需要时输出到屏幕或其他帧缓存中。
GPUImageFramebufferCache:表示帧缓存缓存对象。它是GPUImage框架的帧缓存管理器,可以创建、存储和管理多个帧缓存对象,并且可以在需要时快速地获取和释放帧缓存。
GPUImage框架使用
处理图片
//加载本地需要过滤的图片
let inputImage = UIImage(named: "yourImage.png")
let picture = GPUImagePicture(image: inputImage!)
//创建一个滤镜并加入渲染管道
let filter = GPUImageGrayscaleFilter()
picture.addTarget(filter)
//创建展示滤镜图片的UI控件
let filteredImageView = GPUImageView(frame: view.bounds)
view.addSubview(filteredImageView)
//将滤镜输出链接到GPUImageView
filter.addTarget(filteredImageView)
//开始处理图片并显示
picture.processImage()
处理实时视频
- (void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view.
//相机
self.videoCamera = [[GPUImageVideoCamera alloc] initWithSessionPreset:AVCaptureSessionPreset640x480 cameraPosition:AVCaptureDevicePositionFront];
self.videoCamera.outputImageOrientation = UIInterfaceOrientationPortrait;
self.videoCamera.horizontallyMirrorFrontFacingCamera = YES;
//滤镜
self.filter = [[GPUImageBilateralFilter alloc] init]; //组合
[self.videoCamera addTarget:self.filter]; //展示
GPUImageView *gpuImageView = [[GPUImageView alloc] initWithFrame:self.view.bounds];
[self.view insertSubview:gpuImageView atIndex:0];
[self.filter addTarget:gpuImageView];
self.gpuImageView = gpuImageView; //相机开始运行
[self.videoCamera startCameraCapture];
}
处理本地视频
//开始编辑
@IBAction func editMovie(_ sender: Any) { let documentDic = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask).first
let movieOldUrl = documentDic?.appendingPathComponent("Movie4_old.mov")
let movieNewUrl = documentDic?.appendingPathComponent("Movie4_new.mov") let movieFile = GPUImageMovie(url: movieOldUrl!)
let sepiaFilter = GPUImageSepiaFilter() let movieWriter = GPUImageMovieWriter(movieURL: movieNewUrl!, size: CGSizeMake(480.0, 640.0))
movieWriter?.encodingLiveVideo = true movieFile?.addTarget(sepiaFilter)
sepiaFilter.addTarget(movieWriter) movieFile?.startProcessing()
movieWriter?.startRecording()
}
//结束编辑
@IBAction func finishEdit(_ sender: Any) {
movieFile?.endProcessing()
movieWriter?.finishRecording() movieFile?.removeTarget(pixellateFilter)
pixellateFilter.removeTarget(movieWriter)
}
GPUImage集成到本地项目
1.创建.a静态库
打开GPUImage框架中的build.sh文件,运行xcodebuild -showsdks指令,拿到本地sdk的版本号,把版本号设置到IOSSDK_VER="16.1"变量中
使用Xcode打开GPU项目,在Build Settings - Architectures - Excluded Architectures - Release - Any iOS Simulator SDK 设置模拟器静态库中排除arm64架构,否则合并静态库时报架构冲突错误。
打开终端,运行脚本build.sh
在build/GPUImage.framework目录下得到GPUImage的framework静态库
2.引入.a静态库,并使用
把GPUImage的framework静态库手动拖拽到项目的Framework目录下
Frameworks,Libraries,and Embedded Content设置成Do Not Embed, 静态库在链接解决会链接进可执行文件,无需拷贝framework到ipa包中
Edit Scheme - Run - Diagnostics - Metal下去除API Validation的勾
将GPUImage框架所依赖的系统动态库在项目中进行添加。
GPUImage框架过滤器说明
#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"                 //色调曲线

#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 色彩调整

#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"                  //扩展边缘模糊,变黑白

#import "GPUImageRGBDilationFilter.h"               //RGB扩展边缘模糊,有色彩

#import "GPUImageOpeningFilter.h"                   //黑白色调模糊

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

#import "GPUImageClosingFilter.h"                   //黑白色调模糊,暗色会被提亮

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

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

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

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

#import "GPUImageSobelEdgeDetectionFilter.h"        //Sobel边缘检测算法(白边,黑内容,有点漫画的反色效果)

#import "GPUImageCannyEdgeDetectionFilter.h"        //Canny边缘检测算法(比上更强烈的黑白对比度)

#import "GPUImageThresholdEdgeDetectionFilter.h"    //阈值边缘检测(效果与上差别不大)

#import "GPUImagePrewittEdgeDetectionFilter.h"      //普瑞维特(Prewitt)边缘检测(效果与Sobel差不多,貌似更平滑)

#import "GPUImageXYDerivativeFilter.h"              //XYDerivative边缘检测,画面以蓝色为主,绿色为边缘,带彩色

#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"                //相比上面的效果更细腻,上面是粗旷的画风

#import "GPUImageKuwaharaFilter.h"                  //桑原(Kuwahara)滤波,水粉画的模糊效果;处理时间比较长,慎用

#import "GPUImageMosaicFilter.h"                    //黑白马赛克

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

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

#import "GPUImageCrosshatchFilter.h"                //交叉线阴影,形成黑白网状画面

#import "GPUImageColorPackingFilter.h"              //色彩丢失,模糊(类似监控摄像效果)

#import "GPUImageVignetteFilter.h"                  //晕影,形成黑色圆形边缘,突出中间图像的效果

#import "GPUImageSwirlFilter.h"                     //漩涡,中间形成卷曲的画面

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

#import "GPUImagePinchDistortionFilter.h"           //收缩失真,凹面镜

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

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

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

#import "GPUImagePosterizeFilter.h"                 //色调分离,形成噪点效果

#import "GPUImageCGAColorspaceFilter.h"             //CGA色彩滤镜,形成黑、浅蓝、紫色块的画面

#import "GPUImagePerlinNoiseFilter.h"               //柏林噪点,花边噪点

#import "GPUImage3x3ConvolutionFilter.h"            //3x3卷积,高亮大色块变黑,加亮边缘、线条等

#import "GPUImageEmbossFilter.h"                    //浮雕效果,带有点3d的感觉

#import "GPUImagePolkaDotFilter.h"                  //像素圆点花样

#import "GPUImageHalftoneFilter.h"                  //点染,图像黑白化,由黑点构成原图的大致图形

#pragma mark - 混合模式 Blend

#import "GPUImageMultiplyBlendFilter.h"             //通常用于创建阴影和深度效果

#import "GPUImageNormalBlendFilter.h"               //正常

#import "GPUImageAlphaBlendFilter.h"                //透明混合,通常用于在背景上应用前景的透明度

#import "GPUImageDissolveBlendFilter.h"             //溶解

#import "GPUImageOverlayBlendFilter.h"              //叠加,通常用于创建阴影效果

#import "GPUImageDarkenBlendFilter.h"               //加深混合,通常用于重叠类型

#import "GPUImageLightenBlendFilter.h"              //减淡混合,通常用于重叠类型

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

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

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

#import "GPUImageScreenBlendFilter.h"               //屏幕包裹,通常用于创建亮点和镜头眩光

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

#import "GPUImageDifferenceBlendFilter.h"           //差异混合,通常用于创建更多变动的颜色

#import "GPUImageSubtractBlendFilter.h"             //差值混合,通常用于创建两个图像之间的动画变暗模糊效果

#import "GPUImageHardLightBlendFilter.h"            //强光混合,通常用于创建阴影效果

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

#import "GPUImageChromaKeyBlendFilter.h"            //色度键混合

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

#import "GPUImageHazeFilter.h"                      //朦胧加暗

#import "GPUImageLuminanceThresholdFilter.h"        //亮度阈

#import "GPUImageAdaptiveThresholdFilter.h"         //自适应阈值

#import "GPUImageAddBlendFilter.h"                  //通常用于创建两个图像之间的动画变亮模糊效果

#import "GPUImageDivideBlendFilter.h"               //通常用于创建两个图像之间的动画变暗模糊效果

#pragma mark - 尚不清楚

#import "GPUImageJFAVoroniFilter.h"

#import "GPUImageVoroniConsumerFilter.h"
参考文章:
https://www.jianshu.com/p/fc39d92fc466
 

GPUImage框架使用的更多相关文章

  1. iOS 7中实现模糊效果

    本文译自iOS 7 Blur Effects with GPUImage. iOS 7在视觉方面有许多改变,其中非常吸引人的功能之一就是在整个系统中巧妙的使用了模糊效果.许多第三方应用程序已经采用了这 ...

  2. IOS 中openGL使用(使用基准图快速制作滤镜)

    Color Lookup Table 在影像处理领域中,当我们想要调整一个影像的色彩时,经常会用到 Color Lookup Table 的技术. 举个简单的例子,如果我们想要让影像中的每个像素的R值 ...

  3. iOS:GPUImage强大的图像处理框架

    GPUImage是一个非常棒的图像处理的开源库,里面提供了非常非常多的滤镜效果来加工图像. 不过就是因为太多效果了,而且对于程序员来说,那么多效果并不清楚知道要用那一个.于是我就使用提供的默认值,加上 ...

  4. GPUImage ==> 一个基于GPU图像和视频处理的开源iOS框架

    Logo 项目介绍: GPUImage是Brad Larson在github托管的开源项目. GPUImage是一个基于GPU图像和视频处理的开源iOS框架,提供各种各样的图像处理滤镜,并且支持照相机 ...

  5. Android图像滤镜框架GPUImage从配置到应用

    GPUImage简介 GPUImage 是iOS下一个开源的基于GPU的图像处理库,提供各种各样的图像处理滤镜,并且支持照相机和摄像机的实时滤镜.GPUImage for Android是它在Andr ...

  6. 关于开源框架GPUImage 的简单说明

    GPUImage是一个非常棒的图像处理的开源库,里面提供了非常非常多的滤镜效果来加工图片. 不过就是因为太多效果了,而且对于程序员来说,那么多效果并不清楚知道要用那一个.于是我就使用提供的默认值,加上 ...

  7. iOS中开源框架GPUImage的使用之生成libGPUImage.a文件和创建工程(一)

    一.下载GPUImage (1)下载地址:https://github.com/BradLarson/GPUImage (2)下载后打开 GPUImage.xcodeproj  工程,选择真机运行该工 ...

  8. iOS常用第三方开源框架和优秀开发者博客等

    博客收藏iOS开发过程好的开源框架.开源项目.Xcode工具插件.Mac软件.文章等,会不断更新维护,希望对你们有帮助.如果有推荐或者建议,请到此处提交推荐或者联系我. 该文档已提交GitHub,点击 ...

  9. 史上最全的常用iOS的第三方框架

    文章来源:http://blog.csdn.net/sky_2016/article/details/45502921 图像: 1.图片浏览控件MWPhotoBrowser       实现了一个照片 ...

  10. 常用iOS的第三方框架

    图像:1.图片浏览控件MWPhotoBrowser       实现了一个照片浏览器类似 iOS 自带的相册应用,可显示来自手机的图片或者是网络图片,可自动从网络下载图片并进行缓存.可对图片进行缩放等 ...

随机推荐

  1. salesforce零基础学习(一百二十七)Custom Metadata Type 篇二

    本篇参考: salesforce零基础学习(一百一十一)custom metadata type数据获取方式更新 https://developer.salesforce.com/docs/atlas ...

  2. python入门教程之七流程控制

    条件判断 计算机之所以能做很多自动化的任务,因为它可以自己做条件判断. 比如,输入用户年龄,根据年龄打印不同的内容,在Python程序中,用if语句实现: age = 20 if age >= ...

  3. [Linux]./configure | make | make install的工作过程与原理

    经常使用的Linux编译/安装命令,有必要了解一下原理了. step1 ./configure 配置与编译前检查 通常由软件开发商编写一个检测程序(configure或config)来检测用户的操作环 ...

  4. resnet18训练自定义数据集

    目录结构 dogsData.py import json import torch import os, glob import random, csv from PIL import Image f ...

  5. 如何在模型中引入可学习参数(Pytorch)

    错误实例: def init(self): self.w1 = torch.nn.Parameter(torch.FloatTensor(1),requires_grad=True).cuda() s ...

  6. 基于FMCW的毫米波雷达简介

  7. SpringBoot应用集成微服务组件Nacos

    目录 springboot与微服务组件nacos Nacos服务快速启动 STS4 开发工具 Maven 环境配置 STS4开发工具引入Maven配置 Maven Repo配置阿里云镜像源 Sprin ...

  8. vue3组合式API介绍

    为什么要使用Composition API? 根据官方的说法,vue3.0的变化包括性能上的改进.更小的 bundle 体积.对 TypeScript 更好的支持.用于处理大规模用例的全新 API,全 ...

  9. Python 字典定义

    字典 能将相关信息关联起来 可存储的信息几乎不受限制 # 案例1 alien_0 = {'color':'green','points':5} print(alien_0['color']) prin ...

  10. intellij IDEA安装JDBC报错 No suitable driver found for jdbc:mysql://localhost:3306

    项目场景: 本地尝试使用intellij IDEA加载JDBC连接MySQL,尝试实现增删改查,本来想做一个小Demo. 问题描述 报错: java.lang.ClassNotFoundExcepti ...