UNPKG

better-mock

Version:

Forked from Mockjs. Generate random data & Intercept ajax request. Support miniprogram.

178 lines (147 loc) 3.49 kB
// 颜色空间RGB与HSV(HSL)的转换 // http://blog.csdn.net/idfaya/article/details/6770414 // https://github.com/harthur/color-convert/blob/master/conversions.js export const rgb2hsl = function rgb2hsl (rgb) { let r = rgb[0] / 255, g = rgb[1] / 255, b = rgb[2] / 255, min = Math.min(r, g, b), max = Math.max(r, g, b), delta = max - min, h, s, l; if (max == min) h = 0; else if (r == max) h = (g - b) / delta; else if (g == max) h = 2 + (b - r) / delta; else if (b == max) h = 4 + (r - g) / delta; h = Math.min(h * 60, 360); if (h < 0) h += 360; l = (min + max) / 2; if (max == min) s = 0; else if (l <= 0.5) s = delta / (max + min); else s = delta / (2 - max - min); return [h, s * 100, l * 100]; } export const rgb2hsv = function rgb2hsv (rgb) { let r = rgb[0], g = rgb[1], b = rgb[2], min = Math.min(r, g, b), max = Math.max(r, g, b), delta = max - min, h, s, v; if (max === 0) s = 0; else s = (delta / max * 1000) / 10; if (max == min) h = 0; else if (r == max) h = (g - b) / delta; else if (g == max) h = 2 + (b - r) / delta; else if (b == max) h = 4 + (r - g) / delta; h = Math.min(h * 60, 360); if (h < 0) h += 360; v = ((max / 255) * 1000) / 10; return [h, s, v]; } export const hsl2rgb = function hsl2rgb (hsl) { let h = hsl[0] / 360, s = hsl[1] / 100, l = hsl[2] / 100, t1, t2, t3, rgb, val; if (s === 0) { val = l * 255; return [val, val, val]; } if (l < 0.5) t2 = l * (1 + s); else t2 = l + s - l * s; t1 = 2 * l - t2; rgb = [0, 0, 0]; for (let i = 0; i < 3; i++) { t3 = h + 1 / 3 * -(i - 1); if (t3 < 0) t3++; if (t3 > 1) t3--; if (6 * t3 < 1) val = t1 + (t2 - t1) * 6 * t3; else if (2 * t3 < 1) val = t2; else if (3 * t3 < 2) val = t1 + (t2 - t1) * (2 / 3 - t3) * 6; else val = t1; rgb[i] = val * 255; } return rgb; } export const hsl2hsv = function hsl2hsv (hsl) { let h = hsl[0], s = hsl[1] / 100, l = hsl[2] / 100, sv, v; l *= 2; s *= (l <= 1) ? l : 2 - l; v = (l + s) / 2; sv = (2 * s) / (l + s); return [h, sv * 100, v * 100]; } export const hsv2rgb = function hsv2rgb(hsv) { let h = hsv[0] / 60 let s = hsv[1] / 100 let v = hsv[2] / 100 let hi = Math.floor(h) % 6 let f = h - Math.floor(h) let p = 255 * v * (1 - s) let q = 255 * v * (1 - (s * f)) let t = 255 * v * (1 - (s * (1 - f))) v = 255 * v switch (hi) { case 0: return [v, t, p] case 1: return [q, v, p] case 2: return [p, v, t] case 3: return [p, q, v] case 4: return [t, p, v] case 5: return [v, p, q] } } export const hsv2hsl = function hsv2hsl (hsv) { let h = hsv[0], s = hsv[1] / 100, v = hsv[2] / 100, sl, l; l = (2 - s) * v; sl = s * v; sl /= (l <= 1) ? l : 2 - l; l /= 2; return [h, sl * 100, l * 100]; } // http://www.140byt.es/keywords/color export const rgb2hex = function( a, // red, as a number from 0 to 255 b, // green, as a number from 0 to 255 c // blue, as a number from 0 to 255 ): string { return "#" + ((256 + a << 8 | b) << 8 | c).toString(16).slice(1) } export const hex2rgb = function (a) { a = '0x' + a.slice(1).replace(a.length > 4 ? a : /./g, '$&$&') as any | 0; return [a >> 16, a >> 8 & 255, a & 255] }