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:];
[imageSource1 processImage];
//设置第三个输入图像
UIImage *image1 = [UIImage imageNamed:@"vignetteMap"]; imageSource2 = [[GPUImagePicture alloc] initWithImage:image1]; [imageSource2 addTarget:filter atTextureLocation:]; [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)的更多相关文章

  1. iOS开发系列--打造自己的“美图秀秀”

    --绘图与滤镜全面解析 概述 在iOS中可以很容易的开发出绚丽的界面效果,一方面得益于成功系统的设计,另一方面得益于它强大的开发框架.今天我们将围绕iOS中两大图形.图像绘图框架进行介绍:Quartz ...

  2. iOS开发系列--打造自己的“美图秀秀”

    概述 在iOS中可以很容易的开发出绚丽的界面效果,一方面得益于成功系统的设计,另一方面得益于它强大的开发框架.今天我们将围绕iOS中两大图形.图像绘图框架进行介绍:Quartz 2D绘制2D图形和Co ...

  3. iOS:iOS开发系列–打造自己的“美图秀秀”(下)

    来源: KenshinCui 链接:http://www.cnblogs.com/kenshincui/p/3959951.html 运行效果: 其他图形上下文 前面我们也说过,Quartz 2D的图 ...

  4. iOS 图片部分模糊,类似于美图秀秀

    代码地址如下:http://www.demodashi.com/demo/14277.html 演示效果 演示效果 代码结构 项目结构截图如下: 该模块的核心源码部分为 MBPartBlurView, ...

  5. 利用Photos 框架搭建美图秀秀相册选择器

    简介:Photos框架是iOS8.0后推出的一个新的用于对系统相册进行相关操作的,在iOS8.0之前,开发中只能使用AssetsLibrary框架来访问移动设备的图片库.本文中不再对AssetsLib ...

  6. 强大的Core Image(教你做自己的美图秀秀))

    iOS5新特性:强大的Core Image(教你做自己的美图秀秀))       iOS5给我们带来了很多很好很强大的功能和API.Core Image就是其中之一,它使我们很容易就能处理图片的各种效 ...

  7. PHP流式上传和表单上传(美图秀秀)

    最近需要开发一个头像上传的功能,找了很多都需要授权的,后来找到了美图秀秀,功能非常好用. <?php /** * Note:for octet-stream upload * 这个是流式上传PH ...

  8. thinkphp + 美图秀秀api 实现图片裁切上传,带数据库

    思路: 1.数据库 创建test2 创建表img,字段id,url,addtime 2.前台页: 1>我用的是bootstrap 引入必要的js,css 2>引入美图秀秀的js 3.后台: ...

  9. 强大的修图app--美图秀秀

    美图秀秀的强大之处   市面上有很多图形处理软件,最专业的是ps,但是ps做起来需要的专业技术很高,而美图秀秀可以说用起来并不需要很专业,操作起来非常方便,而且界面可爱.所以说美图秀秀是一款很好用的免 ...

随机推荐

  1. perl 删除过期文件

    #!/usr/bin/perl `find /bak/ >list.txt`; open LIST,"/root/list.txt"; while (<LIST> ...

  2. ENode框架Conference案例分析系列之 - Quick Start

    前言 前一篇文章介绍了Conference案例的架构设计,本篇文章开始介绍Conference案例的代码实现.由于代码比较多,一开始就全部介绍所有细节,估计很多人接受不了,也理解不了.所以,我先进行一 ...

  3. 如何在Visual Studio 工程之间共享静态内容 (js, css, img, etc.)

     第一步: 文件夹上点击右键 -> Add -> Existing Item,单击选中文件,不要点击“Add”按钮,而是在“Add”按钮右边有个向下的小箭头,点击这个箭头,再点击“Add ...

  4. 剑指Offer面试题:2.二维数组中的查找

    一.题目:二维数组中的查找 题目:在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序.请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数. ...

  5. spring-boot 和 docker 集成

    描述 java 的 Spring是一个很火的框架,Spring boot 这个也不用说了,Docker 近年也很火热, 本文就介绍下我在 Spring boot + Docker的集成一些经验 :) ...

  6. Maven常用插件

    maven利用各种插件来管理构建项目,本文记录下工作中常用到的插件及使用方法.每个插件都会提供多个目标(goal),用于标示任务.各插件配置在pom.xml里,如下: <build> [. ...

  7. Java抽象类的总结

    什么是抽象类: 当你在定义一个父级的类的时候,往往在父级内的方法没有添加任何内容,这时候如果你在子类里面调用父级的时候,万一在子类之中类名或者方法名没有写正确,会出现不执行的情况,但是这种情况默认是不 ...

  8. Drupal8重命名上传的中文名文件

    完整的模块代码文件在Coding.net上,想直接使用的请前往下载:https://coding.net/u/yamus/p/chinese_rename/git/tree/master 最近吧Dru ...

  9. OpenCASCADE Curve Length Calculation

    OpenCASCADE Curve Length Calculation eryar@163.com Abstract. The natural parametric equations of a c ...

  10. 跟我学Angular2(1-初体验)

    0.导言 Angular1作为最流行的前端MV*框架,给前端开发带来了极大的便利性.但是,仍然有许多不好的地方已经很难再改变了.Angular团队根据WEB发展的趋势和Angular1中积累的经验来开 ...