UNPKG

chroma-js

Version:

JavaScript library for color conversions

57 lines (51 loc) 1.65 kB
const RE_HEX = /^#?([A-Fa-f0-9]{6}|[A-Fa-f0-9]{3})$/; const RE_HEXA = /^#?([A-Fa-f0-9]{8}|[A-Fa-f0-9]{4})$/; 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 === 5 || hex.length === 9) { // remove optional leading # hex = hex.substr(1); } // expand short-notation to full eight-digit if (hex.length === 4) { hex = hex.split(''); hex = hex[0] + hex[0] + hex[1] + hex[1] + hex[2] + hex[2] + hex[3] + hex[3]; } 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}`); }; export default hex2rgb;