Javascript 将半透明转换为纯色的算法

Javascript 将半透明转换为纯色的算法,javascript,colors,pseudocode,rgba,Javascript,Colors,Pseudocode,Rgba,假设我的颜色是rgba255,0,0,0.5,背景是白色。可以看到的颜色几乎与rgba255、140、140、1相同,rgba255、140、1是纯色。我正在寻找一种算法,它可以将白色上的半透明颜色转换为纯色,这样当它彼此相邻时,它看起来几乎一样,如下图所示 我注意到,如果有两个分量r、g或b为0,则必须保持not null分量的值,并将null分量调整为相同的值,使其与白色匹配。我猜这个值取决于半透明颜色的alpha分量。但我似乎找不到公式。案件的其余部分呢?我认为一定有一个可以应用的通用公式

假设我的颜色是rgba255,0,0,0.5,背景是白色。可以看到的颜色几乎与rgba255、140、140、1相同,rgba255、140、1是纯色。我正在寻找一种算法,它可以将白色上的半透明颜色转换为纯色,这样当它彼此相邻时,它看起来几乎一样,如下图所示

我注意到,如果有两个分量r、g或b为0,则必须保持not null分量的值,并将null分量调整为相同的值,使其与白色匹配。我猜这个值取决于半透明颜色的alpha分量。但我似乎找不到公式。案件的其余部分呢?我认为一定有一个可以应用的通用公式

我在伪代码、JavaScript、java、python、C++或C++中寻找答案。
此外,我没有在任何项目上工作。这个问题是为了学习和帮助可能需要这个的人

我知道这个从rgba到rgb的转换公式

function rgba2rgb(background, color) {
    const alpha = color[3]

  return [Math.floor((1 - alpha) * background[0] + alpha * color[0] + 0.5),
        Math.floor((1 - alpha) * background[1] + alpha * color[1] + 0.5),
        Math.floor((1 - alpha) * background[2] + alpha * color[2] + 0.5)]
}

console.log(rgba2rgb([255, 255, 255], [255, 0, 0, 0.5])) // [ 255, 128, 128 ]

但这不适合你的例子

我知道从rgba到rgb的转换公式

function rgba2rgb(background, color) {
    const alpha = color[3]

  return [Math.floor((1 - alpha) * background[0] + alpha * color[0] + 0.5),
        Math.floor((1 - alpha) * background[1] + alpha * color[1] + 0.5),
        Math.floor((1 - alpha) * background[2] + alpha * color[2] + 0.5)]
}

console.log(rgba2rgb([255, 255, 255], [255, 0, 0, 0.5])) // [ 255, 128, 128 ]

但这不适合你的例子

这正是我想要的,除了我有像rgbr,g,b这样的CSS格式的颜色,但我自己可以计算出来。这正是我想要的,除了我有像rgbr,g,b这样的CSS格式的颜色,但我自己可以计算出来。