android 滤镜lomo,iOS滤镜实现之LOMO(美图秀秀经典LOMO)(示例代码)
LOMO追求鮮艷色彩,隨意、自由的態度,是一種經常使用的濾鏡,今天介紹一下iOS 中LOMO濾鏡的實現
首先它有3張輸入圖像
1.我們要處理的圖像。即我們要應用LOMO濾鏡的圖像
2
3
在gpuimage中多張輸入圖像的濾鏡需要自己寫。在這里我參照本身提供的GPUImageTwoInputFilter,自己寫了GPUImageThreeInputFilter,用于接收3張輸入圖像的濾鏡。它們都是通過濾鏡組的繼承來實現,多重濾鏡。
片段著色器
NSString *const kFWLomofiShaderString =SHADER_STRING
(
precision lowpfloat;
varying highp vec2 textureCoordinate;
uniform sampler2D inputImageTexture;
uniform sampler2D inputImageTexture2;
uniform sampler2D inputImageTexture3;voidmain()
{
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]))
{returnnil;
}
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;returnself; }
+ (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個多月的摸索,將多圖像濾鏡實現的。
總結
以上是生活随笔為你收集整理的android 滤镜lomo,iOS滤镜实现之LOMO(美图秀秀经典LOMO)(示例代码)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 网络安全概论 第四章 电子邮件安全加密(
- 下一篇: oracle count 1 count