GPUImage简介与入门
音视频
GPUImage简介
- GPUImage是链式编程,可以处理图片和视频,支持iOS和Mac。
- GPUImage1.0和2.0是基于 OpenGL ES 封装,1.0是OC版本,2.0是swift版本,3.0是基于Metal的swift版本。
- AVFoundation在GPUImage框架中是用来捕捉视频的
CoreImage与GPUImage的对比
- CoreImage是Apple原生的图片视频处理框架
- 两者都是基于OpenGL ES封装的框架,在性能上没有太大区别
GPUImage的优势
- 在iOS4.0和5.0低版本上GPUImage会比CoreImage表现更好
- GPUImage在视频滤镜处理上会比CoreImage表现更好
- GPUImage是开源框架,支持自定义滤镜
- GPUImage源码开源,会比CoreImage更易于使用
CoreImage的优势
- CoreImage是官方框架,使用方便,不需要担心维护问题,第三方框架会有停止更新维护的情况
- 支持CPU渲染
- 与Metal、spriteKit、SceneKit、Core Animation等官方框架能更好的配合使用
- 支持人脸识别功能,但是识别功能不是很强大
- 支持对大图进行处理,GPU的纹理限制是4096*4096,对于超出限制的图片,GPUImage会压缩处理导致损失图片质量,CoreImage会把图片拆解成小图处理
GPUImage的特性
- 有丰富的输入组件,可以处理图片、纹理、视频、二进制数据、UIElement(UIView、CALayer),可以使用GPUImage拍照、处理纹理图片、给视频或拍摄中的视频添加滤镜、添加水印可以使用UIElement
- 集成了很多内置滤镜:
- 颜色类有亮度、饱和度、色度、对比度、白平衡等;
- 图像类有仿射变换、裁剪、高斯模糊、毛玻璃等;
- 颜色混合类有透明度混合、纹理混合;
- 效果类有素描、像素画、旋涡等
- 有很多输出组件,输出方式有UIView、视频文件、纹理、二进制数据等
- 灵活的滤镜链,模块化功能
GPUImage框架
GPUImageContext
OpenGL Context
管理,GPUImage
会有很多context
,需要GPUImageContext
进行context
管理。
主要是GPUImage
框架本身使用。
GLProgram
着色器的管理
帧缓存的管理
主要是两个类:GPUImageFramebuffer
和GPUImageFramebufferCache
GPUImageColorConversion
颜色空间的转换
输入:GPUImageOutput
主要是一些输入源,最常用的是前面四个:
- GPUImageVideoCamera(正在录制的视频)
- GPUImageStillCamera(拍摄的照片)
- GPUImagePicture(静态图片)
- GPUImageMovie(一段视频)
- GPUImageTextureInput(纹理)
- GPUImageRawDataOutput(二进制数据)
- GPUImageUIElement(UIView/UILayer)
主要是一些数据的输出,有输出肯定要有输入,所以都遵循GPUImageInput
协议来接受输入。
- GPUImageView(输出图像显示到View上)
- GPUImageRawDataOutput(输出二进制数据)
- GPUImageMovieWriter(输出视频到文件)
- GPUImageTextureOutput(输出纹理)
GPUImageFilterPipeline
GPUImageFilterPipeline
继承自NSObject
,它的主要作用是管理滤镜链,自身不能参与响应链中。可以用来构建简单的滤镜组合。如果滤镜比较复杂或是涉及到多个纹理的处理,GPUImageFilterGroup
则是更好的选择。
GPUImageOutput
表示GPUImage
处理链的中间部分,既接受输入又有输出,主要是对图片进行一个中间处理,包括各种滤镜:
- 颜色类有亮度、饱和度、色度、对比度、白平衡等;
- 图像类有仿射变换、裁剪、高斯模糊、毛玻璃等;
- 颜色混合类有透明度混合、纹理混合;
- 效果类有素描、像素画、旋涡等
参考
GPUImage源码分析与使用(一)
源码级别对GPUImage进行剖析 以及 尝试
利用GPUImage录制直播流合成小视频
CVPixelBuffer的创建 数据填充 以及数据读取
金山云