mirror of
https://github.com/soybeanjs/soybean-admin.git
synced 2025-09-21 19:16:37 +08:00
47 lines
973 B
TypeScript
47 lines
973 B
TypeScript
import { getHex, getHsl, getRgb } from './color';
|
|
import colorNames from './json/color-name.json';
|
|
|
|
export function getColorName(color: string) {
|
|
const hex = getHex(color);
|
|
const rgb = getRgb(color);
|
|
const hsl = getHsl(color);
|
|
|
|
let ndf = 0;
|
|
let ndf1 = 0;
|
|
let ndf2 = 0;
|
|
let cl = -1;
|
|
let df = -1;
|
|
|
|
let name = '';
|
|
|
|
colorNames.some((item, index) => {
|
|
const [hexValue, colorName] = item;
|
|
|
|
const hexcode = `#${hexValue}`;
|
|
|
|
const match = hex === hexcode;
|
|
|
|
if (match) {
|
|
name = colorName;
|
|
} else {
|
|
const { r, g, b } = getRgb(hexcode);
|
|
const { h, s, l } = getHsl(hexcode);
|
|
|
|
ndf1 = (rgb.r - r) ** 2 + (rgb.g - g) ** 2 + (rgb.b - b) ** 2;
|
|
ndf2 = (hsl.h - h) ** 2 + (hsl.s - s) ** 2 + (hsl.l - l) ** 2;
|
|
|
|
ndf = ndf1 + ndf2 * 2;
|
|
if (df < 0 || df > ndf) {
|
|
df = ndf;
|
|
cl = index;
|
|
}
|
|
}
|
|
|
|
return match;
|
|
});
|
|
|
|
name = cl < 0 ? 'Invalid Color' : colorNames[cl][1];
|
|
|
|
return name;
|
|
}
|