chroma-js
Version:
JavaScript library for color conversions
44 lines (38 loc) • 1.24 kB
JavaScript
const RE_HEX = /^#?([A-Fa-f0-9]{6}|[A-Fa-f0-9]{3})$/;
const RE_HEXA = /^#?([A-Fa-f0-9]{8})$/;
const hex2rgb = (hex) => {
if (hex.match(RE_HEX)) {
// remove optional leading #
if (hex.length === 4 || hex.length === 7) {
hex = hex.substr(1);
}
// expand short-notation to full six-digit
if (hex.length === 3) {
hex = hex.split('');
hex = hex[0]+hex[0]+hex[1]+hex[1]+hex[2]+hex[2];
}
const u = parseInt(hex, 16);
const r = u >> 16;
const g = u >> 8 & 0xFF;
const b = u & 0xFF;
return [r,g,b,1];
}
// match rgba hex format, eg #FF000077
if (hex.match(RE_HEXA)) {
if (hex.length === 9) {
// remove optional leading #
hex = hex.substr(1);
}
const u = parseInt(hex, 16);
const r = u >> 24 & 0xFF;
const g = u >> 16 & 0xFF;
const b = u >> 8 & 0xFF;
const a = Math.round((u & 0xFF) / 0xFF * 100) / 100;
return [r,g,b,a];
}
// we used to check for css colors here
// if _input.css? and rgb = _input.css hex
// return rgb
throw new Error(`unknown hex color: ${hex}`);
}
module.exports = hex2rgb;