美图秀秀滤镜之亮度调整
图像的亮度, 指的是图像像素的强度, 黑色为最暗, 白色为最亮, 在ios中黑色用0来表示, 白色用1来表示.一个像素, 基本上是用RGB三个颜色分量来表示的. R(0-1), G(0-1),B(0-1).
亮度调整有多种计算方法,效果并不完全相同,在颜色的表示方法中, HSL(L)表示法就是:色相(hue)、饱和度(saturation)、亮度(lightness),改变其中的L值就可以调整图象的亮度,但效果显得比较生硬。
PhotoShop和GPUImage中采用的就是另外一种方法就是把图象每个点颜色的RGB分量分别加上亮度调整值,这种效果相对比较柔和。下面是顶点着色器和片段着色器代码(这些代码运行于GPU中)。
顶点着色
attribute vec4 position; //输入顶点位置属性attribute vec4 inputTextureCoordinate;//输入纹理位置属性varying vec2 textureCoordinate;//输出给片段着色器的纹理位置void main(){gl_Position = position;//输出给片段着色器的顶点位置textureCoordinate = inputTextureCoordinate.xy;//告诉片段着色器,顶点着色器正在处理的像素点。}
片段着色
varying highp vec2 textureCoordinate;uniform sampler2D inputImageTexture;//输入的纹理图片。也就是我们要处理的图片uniform lowp float brightness;//亮度值,我们在程序中可以调整的。void main(){lowp vec4 textureColor = texture2D(inputImageTexture, textureCoordinate);//输入图片的纹理颜色gl_FragColor = vec4((textureColor.rgb + vec3(brightness)), textureColor.w);//像素着色颜色。将每个像素的RGB分量与亮度值相加,得到心的像素颜色。即算法实现}
在我的美图秀秀中,使用的是上述算法,而官方版不是
使用GPUImage的GPUImageBrightnessFilter来实现图像的亮度调整。
具体应用
1.在GPUImageBrightnessFilter中首先初始化该滤镜
GPUImageBrightnessFilter *filter = [[GPUImageBrightnessFilter alloc] init];
2.设置亮度值。该亮度值通过滑动UISlider来改变
filter.brightness = value;
3.设置亮度调整范围为整张图像
[filter forceProcessingAtSize:image.size];
4.设置输入图像纹理
GPUImagePicture *pic = [[GPUImagePicture alloc] initWithImage:image]; [pic addTarget:filter];
5.处理图像
[pic processImage];[filter useNextFrameForImageCapture];
6.获取处理后的图像
return [filter imageFromCurrentFramebuffer];
+ (UIImage *)changeValueForBrightnessFilter:(float)value image:(UIImage *)image; {GPUImageBrightnessFilter *filter = [[GPUImageBrightnessFilter alloc] init];filter.brightness = value;[filter forceProcessingAtSize:image.size];GPUImagePicture *pic = [[GPUImagePicture alloc] initWithImage:image];[pic addTarget:filter];[pic processImage];[filter useNextFrameForImageCapture];return [filter imageFromCurrentFramebuffer]; }
附录
在GPUImageBrightnessFilter的init方法中,设置了默认的亮度为0
- (id)init; {if (!(self = [super initWithFragmentShaderFromString:kGPUImageBrightnessFragmentShaderString])){return nil;}brightnessUniform = [filterProgram uniformIndex:@"brightness"];self.brightness = 0.0;return self; }
setBrightness方法调整图像的亮度值,_brightness为输入的亮度值,在顶点着色器中uniform float brightness与brightnessUniform = [filterProgram uniformIndex:@"brightness"]对应,必须名字相同
- (void)setBrightness:(CGFloat)newValue; {_brightness = newValue;[self setFloat:_brightness forUniform:brightnessUniform program:filterProgram]; }
下面我们预览一下效果
转载于:https://www.cnblogs.com/salam/p/5118704.html
美图秀秀滤镜之亮度调整相关推荐
- 美图秀秀滤镜之饱和度
饱和度是指色彩的鲜艳程度,也称色彩的纯度.饱和度取决于该色中含色成分和消色成分(灰色)的比例.含色成分越大,饱和度越大:消色成分越大,饱和度越小.纯的颜色都是高度饱和的,如鲜红,鲜绿.混杂上白色,灰色 ...
- Android绘图机制 Demo(简单完成美图秀秀的滤镜)
Android绘图机制 Demo(简单完成美图秀秀的滤镜) 1.xml <?xml version="1.0" encoding="utf-8"?> ...
- linux 下的图片处理软件下载,美图秀秀Linux版
美图秀秀linux版是一款图片处理软件,可以帮助用户对图片进行美化处理,支持批量处理图片,能够方便用户直接在Linux系统上修改图像,有需要可以下载. 美图秀秀linux版是一款图片处理软件,可以帮助 ...
- 【AI研究院】360无死角认识一下女神的线上美容院-“美图秀秀”
小 满 计算机视觉爱好者. 作者 | 小满 编辑 | 言有三 你爱自拍么? 距离2018年结束还有一个多月的时间. 19日晚小米集团带来了重磅消息,官宣与美图集团联姻,未来合作期间美图公司将旗下手机业 ...
- 美图秀秀 Mac版终于上线 关于美图秀秀 Mac版初体验
美图秀秀 Mac版已经上线啦,小编很快的体验了一下,操作逻辑延续了手机端的,相对来说还是很容易上手的,如果你是一位Mac用户,现在就可以开始使用咯!新版支持 Intel 和 M1芯片Mac,话不多说直 ...
- linux裁剪图片的软件,【美图秀秀Linux版】美图秀秀Linux版下载 v1.0.0.0 免费最新版-趣致软件园...
美图秀秀Linux版是一款专门针对linux系统所推出的图片处理及美化工具,用户通过这款软件可以对图片进行简单的处理,比如说:调清晰度.加水印以及一键裁剪等等,这样就能够为用户的工作生活带来极大的便利 ...
- html手机9张图片显示,怎么把一张图片分成9张(手机美图秀秀九宫格在哪)
手机拍照片咋做成九宫格?只需4步,这么发朋友圈真好看! 国庆中秋双节已过,你拍了照片吗?很多朋友拍了照片后,喜欢发朋友圈分享. 今天教大家一招,让你发的朋友圈更好看,用手机就能完成.先看下例图: 下面 ...
- 期末大作业之Matlab美图秀秀【GUI界面】
一.任务描述 该项目是基于MATLAB+Python+opencv的美图秀秀工具包,且实现了GUI可视化界面.工具包括图像处理基础功能,如选择保存撤销图片.摄像头拍照.特征点定位.退出等:基本编辑功能 ...
- 安卓机器人做图软件_绘画机器人andy app下载-美图秀秀绘画机器人v7.0安卓版_5577安卓网...
本站为大家带来绘画机器人andy app下载资源.美图秀秀绘画机器人在哪里.美图秀秀绘画机器人怎么用?这是美图新上线的图片处理功能,一秒拥有属于自己的专属肖像画,画风穿越二次元! [美图秀秀绘画机器人 ...
最新文章
- 深度 | AI掘金,非富即亡
- javascript深入理解js闭包[转]
- buu [AFCTF2018]Morse
- 迪粉汇接入网易云信,打造比亚迪车友亲密沟通利器
- spring boot + vue + element-ui全栈开发入门
- 《你的灯亮着吗》阅读笔记(三)
- crossin的编程教室python入门_简单三步,用 Python 发邮件
- 异步(python 版)
- spring-boot-devtools 热部署
- OpenShift 4 之使用https协议访问Route
- 深海迷航创造模式火箭怎么飞_深海迷航被玩成养鱼游戏 奇葩玩家的养殖之路...
- javascript是一门多线程的语言_如何理解JavaScript是一种单线程非阻塞脚本语言?...
- CKA考题[k8s1.24]
- SpringCloud-狂神(1. 概述)学习笔记
- 使用golang链接达梦数据库
- HbuilderX 启动微信小程序 无法打开项目
- 视频教程-微信公众平台开发入门-微信开发
- 不是你不懂黑盒攻击,而是你还不懂SurFree
- 用PHP写了个 标签 按点击率的 字体大小和颜色的 显示效果
- 当Python遇到分形数学魔法 --> 树叶
热门文章
- 監測Android APP 佔用系統資源的情況 (純代碼獲取)
- win7启动后trustedinstaller.exe占用cpu过高问题
- Android可视化美化工具,推荐一款简约酷炫的 Android 可视化库
- 开题报告html5游戏,开题报告基于html5的音乐网站
- TextView设置最大行数、或者最多显示6个字、结束时为省略号
- 三代honeypot连外网
- keil使用详解--魔法棒后续
- 隐藏与显示华为等有虚拟按键手机的虚拟按键
- 深圳即将启动首届「全国人工智能大赛」:超过 500 万大奖 政府资助,潜信息你读懂了吗!
- Android中各种Span的用法——转载