欢迎访问 生活随笔!

生活随笔

当前位置: 首页 > 编程资源 > 编程问答 >内容正文

编程问答

iOS滤镜实现之LOMO(美图秀秀经典LOMO)

发布时间:2023/12/16 编程问答 68 豆豆
生活随笔 收集整理的这篇文章主要介绍了 iOS滤镜实现之LOMO(美图秀秀经典LOMO) 小编觉得挺不错的,现在分享给大家,帮大家做个参考.

  LOMO追求鲜艳色彩,随意、自由的态度,是一种经常使用的滤镜,今天介绍一下iOS 中LOMO滤镜的实现

首先它有3张输入图像

1.我们要处理的图像。即我们要应用LOMO滤镜的图像

2      

3

在gpuimage中多张输入图像的滤镜需要自己写。在这里我参照本身提供的GPUImageTwoInputFilter,自己写了GPUImageThreeInputFilter,用于接收3张输入图像的滤镜。它们都是通过滤镜组的继承来实现,多重滤镜。

  

  片段着色器

NSString *const kFWLomofiShaderString = SHADER_STRING (precision lowp float;varying highp vec2 textureCoordinate;uniform sampler2D inputImageTexture;uniform sampler2D inputImageTexture2;uniform sampler2D inputImageTexture3;void main(){vec3 texel = texture2D(inputImageTexture, textureCoordinate).rgb;//获取要处理图像的rgb值向量vec2 red = vec2(texel.r, 0.16666);vec2 green = vec2(texel.g, 0.5);vec2 blue = vec2(texel.b, 0.83333);//使要处理的图像和柔光混合,生成新的像素texel.rgb = vec3(texture2D(inputImageTexture2, red).r,texture2D(inputImageTexture2, green).g,texture2D(inputImageTexture2, blue).b); //前面生成新的像素再与第二个输入图像的像素进行混合//使用第三个图像作为暗角模板与前面的像素混合vec2 tc = (2.0 * textureCoordinate) - 1.0;float d = dot(tc, tc);vec2 lookup = vec2(d, texel.r);texel.r = texture2D(inputImageTexture3, lookup).r;lookup.y = texel.g;texel.g = texture2D(inputImageTexture3, lookup).g;lookup.y = texel.b;texel.b = texture2D(inputImageTexture3, lookup).b; //生成最终的LOMO效果 gl_FragColor = vec4(texel,1.0); } );

 

 

@implementation FWLomofiFilter- (id)init {if (!(self = [super init])){return nil;}FWFilter6 *filter = [[FWFilter6 alloc] init];[self addFilter:filter]; //设置第二个输入图像UIImage *image = [UIImage imageNamed:@"lomoMap"];imageSource1 = [[GPUImagePicture alloc] initWithImage:image];[imageSource1 addTarget:filter atTextureLocation:1];[imageSource1 processImage]; //设置第三个输入图像 UIImage *image1 = [UIImage imageNamed:@"vignetteMap"]; imageSource2 = [[GPUImagePicture alloc] initWithImage:image1]; [imageSource2 addTarget:filter atTextureLocation:2]; [imageSource2 processImage]; self.initialFilters = [NSArray arrayWithObjects:filter, nil]; self.terminalFilter = filter; return self; }

 

 

+ (UIImage *)applyLomofiFilter:(UIImage *)image

{

    FWLomofiFilter *filter = [[FWLomofiFilter alloc] init];

    [filter forceProcessingAtSize:image.size];

//第一个输入图像

   GPUImagePicture *pic = [[GPUImagePicture alloc] initWithImage:image];

    [pic addTarget:filter];

    

    [pic processImage];

    [filter useNextFrameForImageCapture];

//得到效果图

    return [filter imageFromCurrentFramebuffer];

}

 

原图

 

lomo效果图

 

 完整代码可以在本人的GITHUB上下载源码!

 

下面是废话

不善言辞的人进博客园首页就这么难,我得写多少废话才能进?这篇可以吗? 不管文字多少,你上网查查ios实现LOMO滤镜的源码,本滤镜纯自己琢磨,在上一代GPUImage中我通过1个多月的摸索,将多图像滤镜实现的。

 

总结

以上是生活随笔为你收集整理的iOS滤镜实现之LOMO(美图秀秀经典LOMO)的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。