【发布时间】:2017-04-09 08:59:13
【问题描述】:
我想实现W3C compositing and blending spec 中描述的颜色混合。 (我在 JavaScript 中执行此操作,但该语言对于解决我的问题并不重要。)
回想起来:在执行这个问题的答案时,我意识到这可能会成为一个非常好的独立包。有兴趣的可以grab it from npm。
到目前为止效果还不错,但我想将这些算法更进一步,并添加对 Alpha 通道的支持。感谢SVG compositing spec 提供了所有需要的公式,而且并不难。
但现在我坚持实现 W3C 规范描述为 non-separable 的混合模式(从 Photoshop 中得知):hue、saturation、 颜色和亮度。
遗憾的是,SVG 规范中没有这些算法,我不知道如何使用这些算法。我猜有 the formulas provided by the W3C 的修改版本用于处理我缺少的 alpha 通道。
为了让我的问题更直观一点,我将展示 Photoshop 为我提供的 hue 混合两种颜色:
这也是我能够使用上述 W3C 规范中的非 alpha 算法重现的内容。
我无法重现的是当我在源颜色和背景颜色上都设置较低的 Alpha 时 Photoshop 给我的结果:
有谁知道如何以编程方式实现该结果?
更新 1: 更改插图(添加 HSVA 和 RGBA 代码)以阐明使用的颜色。
更新 2: 为了检查可能的解决方案,我将附上另外两个 Photoshop 生成的混合示例:
更新 3: 所以事实证明,除了对颜色混合一无所知之外,我还 messed up my Photoshop settings,这使得解决我的问题的任务变得更加困难。为可能的未来路人修复了示例图像。
【问题讨论】:
-
我在 1997 年花了很长时间对所有 Photoshop 混合模式进行逆向工程,包括 alpha 的效果。不幸的是,这都是我多年未工作过的公司的财产。
-
Photoshop 的混合模式使用与实际指定的 HSL 或 HSV 不同的颜色空间(尽管名称相同)。这些操作使用色域映射并且通常是不可逆的。这方面的详细信息看起来很少(专有),但您可以在此处阅读更多信息:en.wikipedia.org/wiki/…
-
@SpecialSauce 是的,已经读过,不过感谢您指出。但是,仍然可以使用“常规”色彩空间来模仿 Photoshop 的行为(上面的 Mark Ransom 的评论也暗示了这一点)。
-
不可以举几个例子,从结果中猜出方程式吗?数学上我假设我们有一个函数,它接受 8 个参数(4 个源和 4 个背景)并返回 4 个变量,对吗?
-
@MarkRansom 哇,看来我对我的图像太粗心了......我会修复那个。当然,您可以回答这个问题,但我不确定 Christos Lytras 的回答还没有说它会包含什么。不过我会附上另一个例子。