下面是一个将rgb转换为十六进制颜色的函数。但它并不完全正确。使用(0,255,0)(#00ff00)。它返回ff00,因此它不是有效的颜色。我需要帮助修改它以返回正确的十六进制值。
function rgbToHex(r, g, b) { var rgb = b | (g << 8) | (r << 16); return rgb.toString(16); }
pkmbmrz71#
不如这样吧:
//... return (0x1000000 | rgb).toString(16).substring(1);
alen0pnh2#
试试看:
return ("000000"+rgb.toString(16)).slice(-6); // ^----returns last 6 chars
w46czmvw3#
return ((b | g << 8 | r << 16) / 16777216).toString(16).substring(2);
或
return ((b | g << 8 | r << 16) / 0x1000000).toString(16).substring(2);
zynd9foi4#
如果你不介意使用一个库,你可能想尝试一个像pusher.color或xcolor这样的库。我注意到你在Stackoverflow上问了一些关于Javascript中颜色操作的问题,所以这可能会为你节省一些时间来使用一个库来解决你的问题。你想要的pusher.color语法是:
var hexString = pusher.color('rgb', r, g, b).hex6();
knpiaxh15#
只是另一种选择
function rgbToHex(r, g, b) { function c(v) { var hex = v.toString(16); return hex.length === 1 ? "0" + hex : hex; } return "#" + c(r) + c(g) + c(b); }
2skhul336#
使用像the xolor library这样的库怎么样:
var color = xolor([45, 100, 200]) color.rgb // "rgb(45,100,200)" color.hex // "2D64C8" color.hsl // {h: 219, s:63.3, l:48.0} color.hsv // {h: 218.7, s:0.7750, v:0.7843} color.name // "royalblue"
z3yyvxxp7#
function rgb(r, g, b){ let string = [] string.push(r,g,b) string = string.map((e) => e < 16 && e >= 0 ? "0" + e.toString(16).toUpperCase() : e ) string = string.map((e) => e >= 255 ? "FF" : e ) string = string.map((e) => e < 0 ? "00" : e ) string = string.map((e) => e > 0 && e < 255 ? e.toString(16).toUpperCase() : e ) return string.join("") }
为了保护它的形状,我用Map画了边框。正如你在表中看到的,toString(16)为我们提供了单个数字数字。所以,为了防止数字丢失,我在first .map函数中添加了零。其余的看起来很清楚,如果你卡住了,请通知我。
jhiyze9q8#
return $.sprintf("#%02x%02x%02x", r, g, b);
为此,您需要使用jQuery。
8条答案
按热度按时间pkmbmrz71#
不如这样吧:
alen0pnh2#
试试看:
w46czmvw3#
或
zynd9foi4#
如果你不介意使用一个库,你可能想尝试一个像pusher.color或xcolor这样的库。我注意到你在Stackoverflow上问了一些关于Javascript中颜色操作的问题,所以这可能会为你节省一些时间来使用一个库来解决你的问题。你想要的pusher.color语法是:
knpiaxh15#
只是另一种选择
2skhul336#
使用像the xolor library这样的库怎么样:
z3yyvxxp7#
为了保护它的形状,我用Map画了边框。正如你在表中看到的,toString(16)为我们提供了单个数字数字。所以,为了防止数字丢失,我在first .map函数中添加了零。其余的看起来很清楚,如果你卡住了,请通知我。
jhiyze9q8#
不如这样吧:
为此,您需要使用jQuery。