在Javascript和PHP中,十进制到RGB

Decimal to RGB in Javascript and PHP

本文关键字:十进制 RGB Javascript PHP      更新时间:2023-09-26

我正在尝试将十进制值转换回RGB值。

假设这是编译十进制值的公式

c = r*(255*255)+g*255+b

(例如rgb(16120,78)加起来为1071078)

如何在没有任何"溢出"的情况下求解r、g和b?

提前感谢!

使用除法、模(%)和四舍五入:

var r = Math.floor(c / (256*256));
var g = Math.floor(c / 256) % 256;
var b = c % 256;

编辑:

halex发现了代码中255和256的使用差异。当你把组件放在一起时,你应该(正如Millie Smith所指出的)使用256而不是255:

var c = r * (256*256) + g * 256 + b;

颜色分量的值可以在0到255之间,因此需要乘以256以防止下一个分量与上一个分量重叠。

这个Github链接帮助很大,但我用这个代码编辑了代码,以解决我的一个问题:

// convert three r,g,b integers (each 0-255) to a single decimal integer (something 
between 0 and ~16m)
function colourToNumber(r, g, b) {
 return (r << 16) + (g << 8) + (b);
}
// convert it back again (to a string)
function numberToColour(number) {
 const r = (number & 0xff0000) >> 16;
 const g = (number & 0x00ff00) >> 8;
 const b = (number & 0x0000ff);
 //return [b, g, r];
 return `rgb(${b},${g},${r})`;
}

我编辑的代码使RGB正确返回,就像我设置的颜色一样

我的例子:

小数中的颜色为:11665407这是黄色

小数中的颜色为:11665329这是绿色

请使用以下示例测试展位代码:stackblitz示例

对于初学者来说,计算十进制值的公式看起来很错误。255不是16的幂(甚至不是2);如果你想左移一个十六进制数字,就像在十进制中乘以10的幂一样,你想乘以16^n,其中n是左移的位数。

这是我们新的RGB到十进制公式:

c = r * 16^4 + g * 16^2 + b

因此,假设我们有c,RGB颜色代码的十进制表示,我们求解rgb

b = c % 256
g_0 = (c % 65536 - b)
r_0 = c - g_0 - b
g = g_0 / 256
r = r_0 / 65536

这些都是整数运算,所以它们应该很快,但我不能向你保证解释器会以这种方式处理它们。作为一个函数:

function c_to_rgb(c) {
    var b = c % 256,
        g_0 = (c % 65536 - b),
        r_0 = c - g_0 - b,
        g = g_0 / 256,
        r = r_0 / 65536;
    return [r, g, b];
}
I managed to solve it that way
getRGBFromDecimal(number) {
    var b = Math.floor(number / (256*256));
    var g = Math.floor(number / 256) % 256;
    var r = number % 256;
    return `RGB(${r},${g},${b})`;
}