tengo esta funcion:
function rgbtohex(val) { var clean = val.replace(/[^0-9\.,]/g, ""); var colors = clean.split(','); var r = colors[0]; var g = colors[1]; var b = colors[2]; return "#" + ((1 << 24) + (r << 16) + (g << 8) + b).toString(16).slice(1); } console.log(rgbtohex('rgb(64, 128, 128)')); //should output #408080, instead it outputs #1004288128se supone que debe convertir rgb a hexadecimal, algo como esto:
rgbtohex('rgb(64, 128, 128)') //should output #408080, instead it outputs #1004288128 pero da como resultado un valor incorrecto. Después de desglosarlo, descubrí que funcionará con el valor dado si var b es igual a un valor fijo (en este caso, 128) en lugar de una variable. Como esto:
var r = colors[0]; var g = colors[1]; var b = 128;¿porqué es eso?
Violín aquí: https://jsfiddle.net/kr2bmaxp/2/
Su matriz de colors es una matriz de cadenas, intente convertirla en números:
function rgbtohex(val) { var clean = val.replace(/[^0-9\.,]/g, ""); var colors = clean.split(',').map(Number); var r = colors[0]; var g = colors[1]; var b = colors[2]; return "#" + ((1 << 24) + (r << 16) + (g << 8) + b).toString(16).slice(1); } console.log(rgbtohex('rgb(64, 128, 128)')) //should output #408080, instead it outputs #1004288128Tenga en cuenta que con la sintaxis de desestructuración puede reducir un poco el código:
let [r, g, b] = clean.split(',').map(Number); // delete the individual r, g, b assignments