123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152 |
- // Parses a string and returns a valid hex string when possible
- // parseHex('#fff') => '#ffffff'
- export const parseHex = (string) => {
- string = string.replace(/[^A-F0-9]/ig, '');
- if (string.length !== 3 && string.length !== 6) return '';
- if (string.length === 3) {
- string = string[0] + string[0] + string[1] + string[1] + string[2] + string[2];
- }
- return '#' + string.toLowerCase();
- };
- // Converts an HSB object to an RGB object
- // hsb2rgb({h: 0, s: 0, b: 100}) => {r: 255, g: 255, b: 255}
- export const hsb2rgb = (hsb) => {
- let rgb = {};
- let h = Math.round(hsb.h);
- let s = Math.round(hsb.s * 255 / 100);
- let v = Math.round(hsb.b * 255 / 100);
- if (s === 0) {
- rgb.r = rgb.g = rgb.b = v;
- } else {
- var t1 = v;
- var t2 = (255 - s) * v / 255;
- var t3 = (t1 - t2) * (h % 60) / 60;
- if (h === 360) h = 0;
- if (h < 60) {
- rgb.r = t1;
- rgb.b = t2;
- rgb.g = t2 + t3;
- } else if (h < 120) {
- rgb.g = t1;
- rgb.b = t2;
- rgb.r = t1 - t3;
- } else if (h < 180) {
- rgb.g = t1;
- rgb.r = t2;
- rgb.b = t2 + t3;
- } else if (h < 240) {
- rgb.b = t1;
- rgb.r = t2;
- rgb.g = t1 - t3;
- } else if (h < 300) {
- rgb.b = t1;
- rgb.g = t2;
- rgb.r = t2 + t3;
- } else if (h < 360) {
- rgb.r = t1;
- rgb.g = t2;
- rgb.b = t1 - t3;
- } else {
- rgb.r = 0;
- rgb.g = 0;
- rgb.b = 0;
- }
- }
- return {
- r: Math.round(rgb.r),
- g: Math.round(rgb.g),
- b: Math.round(rgb.b)
- };
- };
- // Converts an RGB object to a HEX string
- // rgb2hex({r: 255, g: 255, b: 255}) => #ffffff
- export const rgb2hex = (rgb) => {
- var hex = [
- rgb.r.toString(16),
- rgb.g.toString(16),
- rgb.b.toString(16)
- ];
- hex.forEach((val, nr) => {
- if (val.length === 1) hex[nr] = '0' + val;
- });
- return '#' + hex.join('');
- };
- // Converts and RGB(a) string to a HEX string
- // rgbstr2hex('rgba(255, 255, 255, 0.5)') => #ffffff
- export const rgbstr2hex = (rgb) => {
- rgb = rgb.match(/^rgba?[\s+]?\([\s+]?(\d+)[\s+]?,[\s+]?(\d+)[\s+]?,[\s+]?(\d+)[\s+]?/i);
- return (rgb && rgb.length === 4) ? '#' +
- ('0' + parseInt(rgb[1], 10).toString(16)).slice(-2) +
- ('0' + parseInt(rgb[2], 10).toString(16)).slice(-2) +
- ('0' + parseInt(rgb[3], 10).toString(16)).slice(-2) : '';
- };
- // Converts an HSB object to a HEX string
- // hsb2hex({h: 0, s: 0, b: 100}) => #ffffff
- export const hsb2hex = (hsb) => {
- return rgb2hex(hsb2rgb(hsb));
- };
- // Converts a HEX string to an HSB object
- // hex2hsb('#ffffff') => {h: 0, s: 0, b: 100}
- export const hex2hsb = (hex) => {
- let hsb = rgb2hsb(hex2rgb(hex));
- if (hsb.s === 0) hsb.h = 360;
- return hsb;
- };
- // Converts an RGB object to an HSB object
- // rgb2hsb({r: 255, g: 255, b: 255}) => {h: 0, s: 0, b: 100}
- export const rgb2hsb = (rgb) => {
- let hsb = {
- h: 0,
- s: 0,
- b: 0
- };
- let min = Math.min(rgb.r, rgb.g, rgb.b);
- let max = Math.max(rgb.r, rgb.g, rgb.b);
- let delta = max - min;
- hsb.b = max;
- hsb.s = max !== 0 ? 255 * delta / max : 0;
- if (hsb.s !== 0) {
- if (rgb.r === max) {
- hsb.h = (rgb.g - rgb.b) / delta;
- } else if (rgb.g === max) {
- hsb.h = 2 + (rgb.b - rgb.r) / delta;
- } else {
- hsb.h = 4 + (rgb.r - rgb.g) / delta;
- }
- } else {
- hsb.h = -1;
- }
- hsb.h *= 60;
- if (hsb.h < 0) {
- hsb.h += 360;
- }
- hsb.s *= 100 / 255;
- hsb.b *= 100 / 255;
- return hsb;
- };
- // Converts a HEX string to an RGB object
- // hex2rgb('#ffffff') => {r: 255, g: 255, b: 255}
- export const hex2rgb = (hex) => {
- hex = parseInt(((hex.indexOf('#') > -1) ? hex.substring(1) : hex), 16);
- return {
- /* jshint ignore:start */
- r: hex >> 16,
- g: (hex & 0x00FF00) >> 8,
- b: (hex & 0x0000FF)
- /* jshint ignore:end */
- };
- };
|