- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
这可能不是 stackoverflow 的完美问题,但我在 stackexchange 的图形设计网络中提出了这个问题,但没有得到任何答案,所以在这里发布。我正在尝试使用 glsl
片段着色器以编程方式实现 Photoshop 的渐变图。考虑下面显示的渐变图,其中所有白色分量都被绿色替换,黑色被蓝色替换。对于其他颜色成分,Photoshop 根据蓝色和绿色之间的线性渐变进行计算。我知道这个计算背后有一个数学。有谁知道找到特定输入颜色值的输出颜色的公式吗?
最佳答案
根据图像和描述,看起来这是将图像的原始灰度值映射到蓝绿色渐变。
有多种方法可以将颜色转换为灰度,具体取决于所使用的颜色系统。许多简单的只是RGB分量的加权和。例如,一个广泛使用的将 RGB 转换为亮度 (Y
) 的公式是:
Y = 0.299 * R + 0.587 * G + 0.114 * B
见 Grayscale wikipedia page有关该主题和所有不同选项的更多背景信息。
然后你可以使用以灰度值作为参数的蓝色和绿色的线性插值。无论如何,这个数学很容易,但 GLSL 甚至为此目的内置了一个 mix()
函数。
一些可能的 GLSL 代码片段,基于使用纹理坐标 TexCoord
从纹理 Tex
读取原始颜色:
uniform sampler2D Tex;
in vec2 TexCoord;
out vec4 FragColor;
...
vec4 origColor = texture(Tex, TexCoord);
float grayscaleValue = dot(origColor.rgb, vec3(0.299, 0.587, 0.114));
FragColor = mix(vec4(0.0, 0.0, 1.0, 1.0), vec4(0.0, 1.0, 0.0, 1.0), grayscaleValue);
在此代码中,vec3(0.299, 0.587, 0.114)
包含上述从 RGB 到灰度(亮度)公式的系数。 mix()
函数的前两个参数是渐变的开始和结束颜色:
vec4(0.0, 0.0, 1.0, 1.0)
vec4(0.0, 1.0, 0.0, 1.0)
请注意,RGB 空间中两种颜色之间的简单线性插值并不理想,尤其是在颜色非常不同的情况下。通过在 HLS 等不同的色彩空间中操作,您可以使其更精细,并有可能获得更好的质量。
另一个可能改善视觉外观的选项是使用两种以上的颜色来指定渐变。例如,您可以将蓝色指定为亮度 0.0,将青色指定为亮度 0.5,将绿色指定为亮度 1.0。它比上面的 GLSL 代码需要更多的逻辑,但它只是相同原理的扩展。
关于image-processing - OpenGL GLSL : How to implement the concept of gradient map in photoshop using fragment shader?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30815364/
为大型网站创建所有艺术作品通常涉及几十个 50+mb 的 Photoshop 文件。通常,给定的模块可能出现在多个文件中。 有没有办法从另一个文件引用经常使用的模块? 例如 -“site-sectio
关闭。这个问题是off-topic .它目前不接受答案。 想改进这个问题吗? Update the question所以它是on-topic用于堆栈溢出。 关闭 11 年前。 Improve thi
我是 Photoshop 脚本的新手。 我想将图像图像(从我的硬盘)作为带有定位的新图层加载到事件文档中。如何才能做到这一点?有人可以分享代码吗? 谢谢 最佳答案 您可以打开 Photoshop 文件
在 photoshop 中,假设我有一些文本图层,其内容如下: Text layer 1: 1@@text01@@abc Text layer 2: 2@@text02@@cef Text lay
我在 Photoshop 中有 500 个图标图像,每个对象周围都有不同的空白区域。我想知道是否有任何方法可以通过 photoshop 运行一个 Action 来裁剪每个图像,以便它删除每个图标周围的
我在 Photoshop 中有 6 个组,每个组中包含多个图层。我希望打开/关闭每个组中的图层以创建图像的所有可能组合。 有人能指出我正确的方向吗? 我从来没有在 Photoshop 中编写过脚本,而
我想开始用 Photoshop 做一些脚本,我想知道是否有一个编辑器已经拥有 Photoshop 的对象或允许加载 Photoshop 的 DOM 以进行智能感知。 任何指针? 最佳答案 Adobe
几乎从一开始,Photoshop 文件就以 8BPS 开始。 (我已经在 2.5 版本中验证了这一点)它在某些时候一定具有某种意义。 我认为 8B 可能指的是位/ channel ,但保存为 16 或
如何在Photoshop中使用Javascript获取/设置当前工具? #target photoshop if (app.currentTool == BRUSH_TOOL) { app.c
几乎从一开始,Photoshop 文件就以 8BPS 开始。 (我已经验证回 2.5 版)它一定在某些时候有一些意义。 我认为 8B 可能指的是位/ channel ,但保存为 16 或 32 没有区
关闭。这个问题是off-topic .它目前不接受答案。 想改善这个问题吗? Update the question所以它是 on-topic对于堆栈溢出。 8 年前关闭。 Improve this
我有非常大的 1 位图像,我需要在 Photoshop 中写入文本数组。我可以在 javascript 中通过将图像转换为灰度然后为每个文本 block 创建一个新层来执行此操作,但我希望能够将文本直
如果我有一个具有以下设置的 photoshop 投影 Blend Mode - rgb(0,0,0) / Opacity - 25% / Angle - 135 degrees / Distance
我正在编写一个脚本,它将遍历图层,修剪它们并导出。到目前为止,我拥有完成此脚本所需的大部分元素。我唯一找不到的是如何显示/隐藏单个图层。我找到了显示/隐藏所有图层的功能,但对于单个图层没有任何功能。
如何在不裁剪的情况下查看矩形选取框选定区域的大小?在paint.net中这很容易,但我必须在photoshop cs 5中完成。在选择区域时,我应该能够看到所选区域的尺寸。我怎样才能做到这一点? 此外
在实现单选按钮时遇到问题。我知道 CS2 中的单选按钮可能有问题,但我不确定哪里出错了。我怀疑我的括号或逗号放错地方了;但看不到它。谢谢。 var dlg = "dialog {text:'Scrip
每种文件格式的技术规范/功能是什么? 一种类型是否比另一种更好地处理某些类型的图形? 最佳答案 XCF 支持保存每一层、当前选择、 channel 、透明度、路径和指南。但是,与 Adobe Ph
我希望 Photoshop 为给定的文件夹自动执行以下任务: 加载给定文件夹中的所有 PNG 文件。 将每个文件的模式转换为RGB 颜色 为每个文件添加一层 在同一文件夹中将文件另存为 PSD 有人告
我第一次编写一些 Photoshop 脚本,如果有一个类似 console.log 的函数来在 ExtendScript Toolkit App 的 Javascript 控制台中输出数组和对象值,那
我不知道如何将我为按钮制作的 Photoshop 形状导入 android,而不带背景。即使我将 photoshop 中的背景设置为透明并将其另存为 PNG,当我在 android 中将它用作我的按钮
我是一名优秀的程序员,十分优秀!