Люди всегда забывают, что цвета rgb могут быть выражены как проценты, так и целые числа.
function rgbToHex(rgb){
var i= 0, c, hex= '#',
rgb= String(rgb).match(/\d+(\.\d+)?%?/g);
while(i<3){
c= rgb[i++];
if(c.indexOf('%')!= -1){
c= Math.round(parseFloat(c)*2.55);
}
c= (+c).toString(16);
if(c.length== 1) c= '0'+c;
hex+= c;
}
return hex;
}
alert(rgbtohex('rgb(255,127,0)')+'\n'+
rgbtohex('rgb(100%,50%,0)'));
/* returned value:
#ff7f00
#ff7f00
*/
// также работает с массивами rgbToHex ([100,200,60])
// возвращаемое значение: # 64c83c