对于那些还不熟悉 Gimp 的“Color to Alpha”功能的人,以下是 Gimp 文档中的页面:颜色到 Alpha。它做得非常好,我很想知道 Gimp 在颜色处理方面到底是如何做到的,无论颜色可能处于哪个颜色空间。非常感谢您的任何提示。
EDIT 1:根据像素与关键颜色(您在“颜色到 Alpha”对话框中选择的颜色)的相似性来生成像素的透明度信息,就像一些人在出于某种原因删除他的答案之前建议的那样,听起来像是一个很好的见解,但我假设它比那更复杂。假设我们估计颜色相似度的单位范围是 0.0 到 1.0,并且我们有一个像素,其颜色例如为 0.4,类似于白色(就像您在“颜色到”中选择白色一样) Alpha”对话框),因此像素的 alpha 值为 0.6,那么当生成的像素在 alpha 为 0.6 的白色背景上显示时,如何改变像素的实际颜色来补偿亮度/光度/饱和度的松散?
EDIT 2:实际上是更新:与第一次编辑相关的子问题已在如何在不改变结果颜色的情况下改变像素的 alpha?但这可能不是完整的故事,因为 Gimp 的“颜色到 Alpha”功能的源代码中发生的事情并不那么简单,并且似乎基于特定的算法而不是公式。
我看了一下源代码,它的核心是 colortoalpha 函数。参数*a1到*a4分别是输入/输出红、绿、蓝和alpha,c1到c3是制作alpha的颜色。
当您将两种颜色 c1 和 c2 与特定的 alpha a (0 ≤ a ≤ 1) 组合时,结果为
y = a * c1 + (1-a) * c2
这里我们做相反的操作:我们知道最终结果 y 和背景颜色 c2,并想算出 c1 和 a。由于这是一个未指定的方程,因此有无限多个解。然而,范围 0 ≤ c1 ≤ 255 和 0 ≤ a ≤ 1 增加了解的范围。
Gimp 插件的工作方式是,对于每个像素,它最小化 alpha 值(即最大化透明度)。相反,这意味着对于每个不完全透明的结果像素(即不完全是背景颜色),RGB 分量之一是 0 或 255。
这会生成一个图像,当覆盖在指定颜色的顶部时,将生成原始图像(没有舍入误差)并且每个像素具有最大透明度。
值得注意的是,整个过程是在 RGB 颜色空间中完成的,但也可以在其他颜色空间中执行,只要组合操作是在相同的颜色空间中完成即可。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)