iOS滤镜实现之Nashville【instagram】
Nashville是Instagram众多滤镜中最惊艳的一款,独特的奶昔色调赋予照片童话般的唯美感觉。
适用范围:营造浪漫唯美的感觉。
的确如此啊
有2张输入图像
顶点着色
有2组坐标
NSString *const kGPUImageTwoInputTextureVertexShaderString = SHADER_STRING
(
attribute vec4 position;
//输入的坐标
attribute vec4 inputTextureCoordinate;
attribute vec4 inputTextureCoordinate2;
//输出的坐标,与片段着色器
varying vec2 textureCoordinate;
varying vec2 textureCoordinate2; void main()
{
//告诉片段着色器,我在处理哪些像素
gl_Position = position;
textureCoordinate = inputTextureCoordinate.xy;
textureCoordinate2 = inputTextureCoordinate2.xy;
}
);
片段着色
NSString *const kFWNashvilleShaderString = SHADER_STRING
(
precision lowp float; varying highp vec2 textureCoordinate; uniform sampler2D inputImageTexture;
uniform sampler2D inputImageTexture2; void main()
{
vec3 texel = texture2D(inputImageTexture, textureCoordinate).rgb;
texel = vec3(
texture2D(inputImageTexture2, vec2(texel.r, .16666)).r,
texture2D(inputImageTexture2, vec2(texel.g, .5)).g,
texture2D(inputImageTexture2, vec2(texel.b, .83333)).b);
gl_FragColor = vec4(texel, 1.0);
}
);
初始化
- (id)init
{
if (!(self = [super init]))
{
return nil;
} UIImage *image = [UIImage imageNamed:@"nashvilleMap.png"]; imageSource = [[GPUImagePicture alloc] initWithImage:image];
FWFilter1 *filter = [[FWFilter1 alloc] init]; [self addFilter:filter];
[imageSource addTarget:filter atTextureLocation:];
[imageSource processImage]; self.initialFilters = [NSArray arrayWithObjects:filter, nil];
self.terminalFilter = filter; return self;
}
//
// FWNashvilleFilter.h
// FWMeituApp
//
// Created by hzkmn on 16/1/8.
// Copyright © 2016年 ForrestWoo co,.ltd. All rights reserved.
// #import "GPUImageTwoInputFilter.h" @interface FWFilter1 : GPUImageTwoInputFilter @end @interface FWNashvilleFilter : GPUImageFilterGroup
{
GPUImagePicture *imageSource ;
} @end
//
// FWNashvilleFilter.m
// FWMeituApp
//
// Created by hzkmn on 16/1/8.
// Copyright © 2016年 ForrestWoo co,.ltd. All rights reserved.
// #import "FWNashvilleFilter.h" NSString *const kFWNashvilleShaderString = SHADER_STRING
(
precision lowp float; varying highp vec2 textureCoordinate; uniform sampler2D inputImageTexture;
uniform sampler2D inputImageTexture2; void main()
{
vec3 texel = texture2D(inputImageTexture, textureCoordinate).rgb;
texel = vec3(
texture2D(inputImageTexture2, vec2(texel.r, .)).r,
texture2D(inputImageTexture2, vec2(texel.g, .)).g,
texture2D(inputImageTexture2, vec2(texel.b, .)).b);
gl_FragColor = vec4(texel, 1.0);
}
); @implementation FWFilter1 - (id)init;
{
if (!(self = [super initWithFragmentShaderFromString:kFWNashvilleShaderString]))
{
return nil;
} return self;
} @end @implementation FWNashvilleFilter - (id)init
{
if (!(self = [super init]))
{
return nil;
} UIImage *image = [UIImage imageNamed:@"nashvilleMap.png"]; imageSource = [[GPUImagePicture alloc] initWithImage:image];
FWFilter1 *filter = [[FWFilter1 alloc] init]; [self addFilter:filter];
[imageSource addTarget:filter atTextureLocation:];
[imageSource processImage]; self.initialFilters = [NSArray arrayWithObjects:filter, nil];
self.terminalFilter = filter; return self;
} @end
原图

效果图

完整项目代码查看我在github
我们再来看几组效果

iOS滤镜实现之Nashville【instagram】的更多相关文章
- 图像滤镜艺术---Photoshop实现Instagram之Sierra滤镜
原文:图像滤镜艺术---Photoshop实现Instagram之Sierra滤镜 本文介绍PS实现Instagram中的Sierra滤镜,内容如下: 先看下效果图: 下面是具体实现步骤: 1. To ...
- 图像滤镜艺术---Photoshop实现Instagram之Mayfair滤镜效果
原文:图像滤镜艺术---Photoshop实现Instagram之Mayfair滤镜效果 本文介绍一下如何使用Photoshop来实现Instagram中的Mayfair滤镜的效果. 以上就是这个滤镜 ...
- 图像滤镜艺术---Photoshop实现Instagram Amaro滤镜特效
原文:图像滤镜艺术---Photoshop实现Instagram Amaro滤镜特效 本文是我收集的一些使用Photoshop来实现Instagram滤镜的一些内容,在这里跟大家分享一下,这些效果是完 ...
- iOS滤镜系列-滤镜开发概览
概述 滤镜最早的出现应该是应用在相机镜头前实现自然光过滤和调色的镜片,然而在软件开发中更多的指的是软件滤镜,是对镜头滤镜的模拟实现.当然这种方式更加方便快捷,缺点自然就是无法还原拍摄时的真实场景,例如 ...
- iOS滤镜实现之LOMO(美图秀秀经典LOMO)
LOMO追求鲜艳色彩,随意.自由的态度,是一种经常使用的滤镜,今天介绍一下iOS 中LOMO滤镜的实现 首先它有3张输入图像 1.我们要处理的图像.即我们要应用LOMO滤镜的图像 2 3 在gpuim ...
- Android Animation学习 实现 IOS 滤镜退出动画
IOS的用户体验做的很好,其中一点很重要的地方就是动画效果. 最近在学习Android的Animation,简单实现了一个IOS相机滤镜退出的动画: 布局文件:activity_animation_d ...
- iOS滤镜功能
一.iOS自带滤镜 1.CoreImage 使用苹果自带的CoreImage框架对图片进行处理,用CoreImage框架里的CIFilter对图片进行滤镜处理, 首先我们应该了解下CoreImage框 ...
- iOS 滤镜 转载,原文见正文首行链接
转载自:http://blog.sina.com.cn/s/blog_5fb39f9101018gv7.html 直接上代码了: // // ViewController.m // 图片模糊处理 // ...
- ios滤镜
现在很多滤镜效果都写好了,搬运工的我直接拿来用(感谢
随机推荐
- centos install kafka and zookeeper
1.安装zookeeper ZooKeeper is a distributed, open-source coordination service for distributed applicati ...
- Java多线程11:ReentrantLock的使用和Condition
ReentrantLock ReentrantLock,一个可重入的互斥锁,它具有与使用synchronized方法和语句所访问的隐式监视器锁相同的一些基本行为和语义,但功能更强大. Reentran ...
- Unity3D逻辑热更新,第二代舒爽解决方案,L#使用简介
热更新 天下武功,无坚不破,唯快不破 热更新就是为了更快的把内容推到用户手中. 之前,我设计了C#Light,经过半年多的持续修补,勉强可用,磕磕绊绊.感谢那些,试过,骂过,用过的朋友,在你们的陪伴下 ...
- Fiddler实战深入研究(二)
Fiddler实战深入研究(二) 阅读目录 Fiddler不能捕获chrome的session的设置 理解数据包统计 请求重定向(AutoResponder) Composer选项卡 Filters选 ...
- react2 react 遍历数组
<body><!-- React 真实 DOM 将会插入到这里 --><div id="example"></div> <!- ...
- Java基础-继承-编写一个Java应用程序,设计一个汽车类Vehicle,包含的属性有车轮个数 wheels和车重weight。小车类Car是Vehicle的子类,其中包含的属性有载人数 loader。卡车类Truck是Car类的子类,其中包含的属性有载重量payload。每个 类都有构造方法和输出相关数据的方法。最后,写一个测试类来测试这些类的功 能。
#29.编写一个Java应用程序,设计一个汽车类Vehicle,包含的属性有车轮个数 wheels和车重weight.小车类Car是Vehicle的子类,其中包含的属性有载人数 loader.卡车类T ...
- noip 2016提高组D2T1 problem
我们可以先预处理一下组合数模K的值,然后我们可以发现对于答案ji[n][m],可以发现递推式ji[i][j]=ji[i-1][j]+ji[i][j-1]-ji[i-1][j-1]并对于Cij是否%k等 ...
- SSRS2:Reporting Service 配置Service Account
1,Service Account SSRS以一个Service方式实现,有三部分组成:Web Service,Report Manager和一个后台的进程,这个Service运行的账号就是Servi ...
- png图片制作任意颜色的小图标
本内容只要是对张鑫旭PNG格式小图标的CSS任意颜色赋色技术的这篇文章进行详细说明. HTML: <i class="icon"><i class="i ...
- java错误
Workspace in use or cannot be created, choose a different one. 出现这种情况一般是workspace的配置文件中出现了.lock文件(wo ...
