adui
Version:
<div> <img src="https://wxa.wxs.qq.com/mpweb/delivery/legacy/wxadtouch/upload/t1/od834zef_52939fc6.png" style="margin:40px 0 0 -8px; background-color: #fcfcfc; box-shadow: none;" /> </div>
601 lines (591 loc) • 12.4 kB
text/typescript
/* eslint-disable */
export const rgb2hex = (r: number, g: number, b: number) => {
let red = r.toString(16).toUpperCase()
let green = g.toString(16).toUpperCase()
let blue = b.toString(16).toUpperCase()
red = red.length === 1 ? `0${red}` : red
green = green.length === 1 ? `0${green}` : green
blue = blue.length === 1 ? `0${blue}` : blue
return `#${red}${green}${blue}`
}
export const hsb2hsl = (a: number, b: number, c: number) => {
return [a, (b * c) / ((a = (2 - b) * c) < 1 ? a : 2 - a), a / 2]
}
export const hsl2hsb = (a: number, b: number, c: number) => {
b *= c < 0.5 ? c : 1 - c
return [a, (2 * b) / (c + b) || 0, c + b]
}
export const hsl2rgb = (h: number, s: number, l: number) => {
const C = (1 - Math.abs(2 * l - 1)) * s
const X = C * (1 - Math.abs(((h / 60) % 2) - 1))
const m = l - C / 2
let [R, G, B]: any =
(h >= 0 && h < 60 && [C, X, 0]) ||
(h >= 60 && h < 120 && [X, C, 0]) ||
(h >= 120 && h < 180 && [0, C, X]) ||
(h >= 180 && h < 240 && [0, X, C]) ||
(h >= 240 && h < 300 && [X, 0, C]) ||
(h >= 300 && h < 360 && [C, 0, X])
;[R, G, B] = [(R + m) * 255, (G + m) * 255, (B + m) * 255]
return [Math.round(R), Math.round(G), Math.round(B)]
}
export const hsb2hex = (
h?: number | null,
s?: number | null,
b?: number | null
) => {
if (
h === null ||
h === undefined ||
s === null ||
s === undefined ||
b === null ||
b === undefined
) {
return ""
}
const [hue, saturation, brightness] = hsb2hsl(h, s, b)
const [red, green, blue] = hsl2rgb(hue, saturation || 0, brightness || 0)
return rgb2hex(red, green, blue)
}
export const rgb2hsl = (r: number, g: number, b: number) => {
let min,
max,
i,
l,
s,
maxcolor,
h,
rgb = []
rgb[0] = r / 255
rgb[1] = g / 255
rgb[2] = b / 255
min = rgb[0]
max = rgb[0]
maxcolor = 0
for (i = 0; i < rgb.length - 1; i++) {
if (rgb[i + 1] <= min) {
min = rgb[i + 1]
}
if (rgb[i + 1] >= max) {
max = rgb[i + 1]
maxcolor = i + 1
}
}
if (maxcolor == 0) {
h = (rgb[1] - rgb[2]) / (max - min)
}
if (maxcolor == 1) {
h = 2 + (rgb[2] - rgb[0]) / (max - min)
}
if (maxcolor == 2) {
h = 4 + (rgb[0] - rgb[1]) / (max - min)
}
if (!h || isNaN(h)) {
h = 0
}
h = h * 60
if (h < 0) {
h = h + 360
}
l = (min + max) / 2
if (min == max) {
s = 0
} else {
if (l < 0.5) {
s = (max - min) / (max + min)
} else {
s = (max - min) / (2 - max - min)
}
}
s = s
return { h: h, s: s, l: l }
}
export const w3trim = (x: any) => x.replace(/^\s+|\s+$/g, "")
export const getColorArr = (x: any) => {
if (x == "names") {
return [
"AliceBlue",
"AntiqueWhite",
"Aqua",
"Aquamarine",
"Azure",
"Beige",
"Bisque",
"Black",
"BlanchedAlmond",
"Blue",
"BlueViolet",
"Brown",
"BurlyWood",
"CadetBlue",
"Chartreuse",
"Chocolate",
"Coral",
"CornflowerBlue",
"Cornsilk",
"Crimson",
"Cyan",
"DarkBlue",
"DarkCyan",
"DarkGoldenRod",
"DarkGray",
"DarkGrey",
"DarkGreen",
"DarkKhaki",
"DarkMagenta",
"DarkOliveGreen",
"DarkOrange",
"DarkOrchid",
"DarkRed",
"DarkSalmon",
"DarkSeaGreen",
"DarkSlateBlue",
"DarkSlateGray",
"DarkSlateGrey",
"DarkTurquoise",
"DarkViolet",
"DeepPink",
"DeepSkyBlue",
"DimGray",
"DimGrey",
"DodgerBlue",
"FireBrick",
"FloralWhite",
"ForestGreen",
"Fuchsia",
"Gainsboro",
"GhostWhite",
"Gold",
"GoldenRod",
"Gray",
"Grey",
"Green",
"GreenYellow",
"HoneyDew",
"HotPink",
"IndianRed",
"Indigo",
"Ivory",
"Khaki",
"Lavender",
"LavenderBlush",
"LawnGreen",
"LemonChiffon",
"LightBlue",
"LightCoral",
"LightCyan",
"LightGoldenRodYellow",
"LightGray",
"LightGrey",
"LightGreen",
"LightPink",
"LightSalmon",
"LightSeaGreen",
"LightSkyBlue",
"LightSlateGray",
"LightSlateGrey",
"LightSteelBlue",
"LightYellow",
"Lime",
"LimeGreen",
"Linen",
"Magenta",
"Maroon",
"MediumAquaMarine",
"MediumBlue",
"MediumOrchid",
"MediumPurple",
"MediumSeaGreen",
"MediumSlateBlue",
"MediumSpringGreen",
"MediumTurquoise",
"MediumVioletRed",
"MidnightBlue",
"MintCream",
"MistyRose",
"Moccasin",
"NavajoWhite",
"Navy",
"OldLace",
"Olive",
"OliveDrab",
"Orange",
"OrangeRed",
"Orchid",
"PaleGoldenRod",
"PaleGreen",
"PaleTurquoise",
"PaleVioletRed",
"PapayaWhip",
"PeachPuff",
"Peru",
"Pink",
"Plum",
"PowderBlue",
"Purple",
"RebeccaPurple",
"Red",
"RosyBrown",
"RoyalBlue",
"SaddleBrown",
"Salmon",
"SandyBrown",
"SeaGreen",
"SeaShell",
"Sienna",
"Silver",
"SkyBlue",
"SlateBlue",
"SlateGray",
"SlateGrey",
"Snow",
"SpringGreen",
"SteelBlue",
"Tan",
"Teal",
"Thistle",
"Tomato",
"Turquoise",
"Violet",
"Wheat",
"White",
"WhiteSmoke",
"Yellow",
"YellowGreen",
]
}
if (x == "hexs") {
return [
"f0f8ff",
"faebd7",
"00ffff",
"7fffd4",
"f0ffff",
"f5f5dc",
"ffe4c4",
"000000",
"ffebcd",
"0000ff",
"8a2be2",
"a52a2a",
"deb887",
"5f9ea0",
"7fff00",
"d2691e",
"ff7f50",
"6495ed",
"fff8dc",
"dc143c",
"00ffff",
"00008b",
"008b8b",
"b8860b",
"a9a9a9",
"a9a9a9",
"006400",
"bdb76b",
"8b008b",
"556b2f",
"ff8c00",
"9932cc",
"8b0000",
"e9967a",
"8fbc8f",
"483d8b",
"2f4f4f",
"2f4f4f",
"00ced1",
"9400d3",
"ff1493",
"00bfff",
"696969",
"696969",
"1e90ff",
"b22222",
"fffaf0",
"228b22",
"ff00ff",
"dcdcdc",
"f8f8ff",
"ffd700",
"daa520",
"808080",
"808080",
"008000",
"adff2f",
"f0fff0",
"ff69b4",
"cd5c5c",
"4b0082",
"fffff0",
"f0e68c",
"e6e6fa",
"fff0f5",
"7cfc00",
"fffacd",
"add8e6",
"f08080",
"e0ffff",
"fafad2",
"d3d3d3",
"d3d3d3",
"90ee90",
"ffb6c1",
"ffa07a",
"20b2aa",
"87cefa",
"778899",
"778899",
"b0c4de",
"ffffe0",
"00ff00",
"32cd32",
"faf0e6",
"ff00ff",
"800000",
"66cdaa",
"0000cd",
"ba55d3",
"9370db",
"3cb371",
"7b68ee",
"00fa9a",
"48d1cc",
"c71585",
"191970",
"f5fffa",
"ffe4e1",
"ffe4b5",
"ffdead",
"000080",
"fdf5e6",
"808000",
"6b8e23",
"ffa500",
"ff4500",
"da70d6",
"eee8aa",
"98fb98",
"afeeee",
"db7093",
"ffefd5",
"ffdab9",
"cd853f",
"ffc0cb",
"dda0dd",
"b0e0e6",
"800080",
"663399",
"ff0000",
"bc8f8f",
"4169e1",
"8b4513",
"fa8072",
"f4a460",
"2e8b57",
"fff5ee",
"a0522d",
"c0c0c0",
"87ceeb",
"6a5acd",
"708090",
"708090",
"fffafa",
"00ff7f",
"4682b4",
"d2b48c",
"008080",
"d8bfd8",
"ff6347",
"40e0d0",
"ee82ee",
"f5deb3",
"ffffff",
"f5f5f5",
"ffff00",
"9acd32",
]
}
}
export const color2hsb = (c: any) => {
const hsl = color2hsl(c)
return hsl2hsb(hsl.h, hsl.s, hsl.l)
}
export const color2hsl = (c: any) => {
let x,
y,
typ,
arr = [],
arrlength,
i,
match,
rgb: any,
colornames: any = [],
colorhexs: any = []
c = w3trim(c.toLowerCase())
x = c.substr(0, 1).toUpperCase()
y = c.substr(1)
if (
(x == "R" ||
x == "Y" ||
x == "G" ||
x == "C" ||
x == "B" ||
x == "M" ||
x == "W") &&
!isNaN(y)
) {
if (c.length == 6 && c.indexOf(",") == -1) {
} else {
c = "ncol(" + c + ")"
}
}
if (c.length != 3 && c.length != 6 && !isNaN(c)) {
c = "ncol(" + c + ")"
}
if (c.indexOf(",") > 0 && c.indexOf("(") == -1) {
c = "ncol(" + c + ")"
}
if (
c.substr(0, 3) == "rgb" ||
c.substr(0, 3) == "hsl" ||
c.substr(0, 3) == "hwb" ||
c.substr(0, 4) == "ncol" ||
c.substr(0, 4) == "cmyk"
) {
if (c.substr(0, 4) == "ncol") {
if (c.split(",").length == 4 && c.indexOf("ncola") == -1) {
c = c.replace("ncol", "ncola")
}
typ = "ncol"
c = c.substr(4)
} else if (c.substr(0, 4) == "cmyk") {
typ = "cmyk"
c = c.substr(4)
} else {
typ = c.substr(0, 3)
c = c.substr(3)
}
arrlength = 3
if (c.substr(0, 1).toLowerCase() == "a") {
arrlength = 4
c = c.substr(1)
} else if (typ == "cmyk") {
arrlength = 4
if (c.split(",").length == 5) {
arrlength = 5
}
}
c = c.replace("(", "")
c = c.replace(")", "")
arr = c.split(",")
if (typ == "rgb") {
for (i = 0; i < arrlength; i++) {
if (arr[i] == "" || arr[i] == " ") {
arr[i] = "0"
}
if (arr[i].indexOf("%") > -1) {
arr[i] = arr[i].replace("%", "")
arr[i] = Number(arr[i] / 100)
if (i < 3) {
arr[i] = Math.round(arr[i] * 255)
}
}
if (parseInt(arr[i]) > 255) {
arr[i] = 255
}
if (i < 3) {
arr[i] = parseInt(arr[i])
}
if (i == 3 && Number(arr[i]) > 1) {
arr[i] = 1
}
}
rgb = { r: arr[0], g: arr[1], b: arr[2] }
}
if (typ == "hsl" || typ == "hwb" || typ == "ncol") {
while (arr.length < arrlength) {
arr.push("0")
}
if (typ == "hsl" || typ == "hwb") {
if (parseInt(arr[0]) >= 360) {
arr[0] = 0
}
}
for (i = 1; i < arrlength; i++) {
if (arr[i].indexOf("%") > -1) {
arr[i] = arr[i].replace("%", "")
arr[i] = Number(arr[i])
arr[i] = arr[i] / 100
} else {
arr[i] = Number(arr[i])
}
if (Number(arr[i]) > 1) {
arr[i] = 1
}
if (Number(arr[i]) < 0) {
arr[i] = 0
}
}
}
if (typ == "cmyk") {
while (arr.length < arrlength) {
arr.push("0")
}
for (i = 0; i < arrlength; i++) {
if (arr[i].indexOf("%") > -1) {
arr[i] = arr[i].replace("%", "")
arr[i] = Number(arr[i])
arr[i] = arr[i] / 100
} else {
arr[i] = Number(arr[i])
}
if (Number(arr[i]) > 1) {
arr[i] = 1
}
if (Number(arr[i]) < 0) {
arr[i] = 0
}
}
}
} else if (c.substr(0, 3) == "ncs") {
} else {
match = false
colornames = getColorArr("names")
for (i = 0; i < colornames.length; i++) {
if (c.toLowerCase() == colornames[i].toLowerCase()) {
colorhexs = getColorArr("hexs")
match = true
rgb = {
r: parseInt(colorhexs[i].substr(0, 2), 16),
g: parseInt(colorhexs[i].substr(2, 2), 16),
b: parseInt(colorhexs[i].substr(4, 2), 16),
}
break
}
}
if (match == false) {
c = c.replace("#", "")
if (c.length == 3) {
c =
c.substr(0, 1) +
c.substr(0, 1) +
c.substr(1, 1) +
c.substr(1, 1) +
c.substr(2, 1) +
c.substr(2, 1)
}
for (i = 0; i < c.length; i++) {}
arr[0] = parseInt(c.substr(0, 2), 16)
arr[1] = parseInt(c.substr(2, 2), 16)
arr[2] = parseInt(c.substr(4, 2), 16)
rgb = {
r: arr[0],
g: arr[1],
b: arr[2],
}
}
}
return rgb2hsl(rgb.r, rgb.g, rgb.b)
}