Javascript 软光混合模式

Javascript 软光混合模式,javascript,math,colors,blending,color-blending,Javascript,Math,Colors,Blending,Color Blending,我试图写一个函数,计算给定前景和背景色的柔和光线。 功能如下 var background = '0xFFFFFF'; var foreground = '0x47768C'; var calculateSoftlight = function (background, foreground) { var intBackground = parseInt(background, 16); var intForeground = parseInt(foreground, 16);

我试图写一个函数,计算给定前景和背景色的柔和光线。 功能如下

var background = '0xFFFFFF';
var foreground = '0x47768C';

var calculateSoftlight = function (background, foreground) {
  var intBackground = parseInt(background, 16);
  var intForeground = parseInt(foreground, 16);

  var softlight = (1 - (2 * intForeground)) * (intBackground*intBackground) + (2 * intForeground * intBackground);
  return softlight.toString(16);
}

calculateSoftlight(background, foreground); //-8eed155338bb200000 

我使用的是此处列出的Pegtop公式。我不确定这一点的正确实施。有什么想法吗?

将公式应用于每个RGB值,而不是使用十六进制。如果需要使用十六进制作为输入,可能需要进行转换

您需要规范化每个值(因此
value/255
),并在公式中使用该值。然后将结果乘以255(并四舍五入)以转换回8位值

类似的东西应该很接近,我还没有专门使用这个公式,所以这是未经测试的

var top = top / 255,
    bot = bot / 255;

top = ((1 - 2*bot)*Math.pow(top, 2)) + 2*bot*top,
top = Math.round(top * 255);

添加了一些示例代码,以帮助更好地理解我试图解释的内容。