GPUImage 是一个基于 GPU 图像和视频处理的开源 iOS 框架。由于使用 GPU 来处理图像和视频,所以速度非常快. 除了速度上的优势,GPUImage 还提供了很多很棒的图像处理滤镜,但有时候这些基本功能仍然无法满足实际开发中的需求,GPUImage 还支持自定义滤镜.
简单滤镜
GPUImageSepiaFilter *filter = [[GPUImageSepiaFilter alloc] init];
_filteredImage = [filter imageByFilteringImage:_originImage];
滤镜效果如图:
GPUImage将大多数的滤镜效果都做了如上类似的封装, 因此使用非常简便. 使用的时候可以直接在GPUImage.h中查找.
自定义滤镜
GPUImage的自定义滤镜需要使用到OpenGL着色语言(GLSL)来编写Fragment Shader(片段着色器), 且后缀为.fsh. 至于GLSL的语法等内容, 暂时不多做说明, 以后会单独补充.
GPUImageFilter *customFilter = [[GPUImageFilter alloc] initWithFragmentShaderFromFile:@"GPUImageCustomFilter"];
_filteredImage = [customFilter imageByFilteringImage:_originImage];
GLSL脚本文件(GPUImageCustomFilter.fsh)如下:
varying highp vec2 textureCoordinate;
uniform sampler2D inputImageTexture;
void main()
{
lowp vec4 textureColor = texture2D(inputImageTexture, textureCoordinate);
lowp vec4 outputColor;
outputColor.r = (textureColor.r * 0.393) + (textureColor.g * 0.769) + (textureColor.b * 0.189);
outputColor.g = (textureColor.r * 0.349) + (textureColor.g * 0.686) + (textureColor.b * 0.168);
outputColor.b = (textureColor.r * 0.872) + (textureColor.g * 0.534) + (textureColor.b * 0.131);
outputColor.a = 1.0;
gl_FragColor = outputColor;
}
滤镜效果如图:
版权声明:本文为博主原创文章,未经博主允许不得转载。
时间: 2024-10-10 10:43:59