iOS --- 使用GPUImage实现的简单滤镜效果

GPUImage 是一个基于 GPU 图像和视频处理的开源 iOS 框架。由于使用 GPU 来处理图像和视频,所以速度非常快. 除了速度上的优势,GPUImage 还提供了很多很棒的图像处理滤镜,但有时候这些基本功能仍然无法满足实际开发中的需求,GPUImage 还支持自定义滤镜.

简单滤镜

GPUImageSepiaFilter *filter = [[GPUImageSepiaFilter alloc] init];
_filteredImage = [filter imageByFilteringImage:_originImage];

滤镜效果如图:
iOS --- 使用GPUImage实现的简单滤镜效果_第1张图片
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;
}

滤镜效果如图:
iOS --- 使用GPUImage实现的简单滤镜效果_第2张图片

Demo

Demo地址: DemoImageFilter

你可能感兴趣的:(iOS-图像相关,iOS移动开发)