用户:
86135clc查看:1 回复:11 评论:1 创建时间:2021-08-07T17:24:32
注:为了方便,此处使用RGB 255。
第一步
当然是枚举所有纯色方块及其颜色。。。
代码:
var color={cadet_blue:[0x37,0x62,0x9c],sky_blue:[0x58,0xaa,0xe7],powder_blue:[0xc1,0xec,0xf8],dark_gray:[0x42,0x42,0x42],light_gray:[0xae,0xae,0xae],olive_green:[0x75,0x8f,0x38],yellow_green:[0xb0,0xcc,0x4c],pale_green:[0xd2,0xe0,0x89],red:[0xf5,0x0e,0x0e],dark_red:[0x9e,0x19,0x06],brick_red:[0xde,0x4a,0x4a],medium_gray:[0x71,0x71,0x71],dark_slate_blue:[0x28,0x35,0x73],pink:[0xff,0x7d,0x9c],sakura_pink:[0xff,0xbf,0xe2],orange:[0xff,0x94,0x0e],lemon:[0xff,0xf7,0x4c],black:[0,0,0],white:[255,255,255],blue:[0,0,255],turquoise:[0x4d,0xd0,0xe1],dark_orchid:[0x7b,0x1f,0xa2],medium_orchid:[0xba,0x68,0xc8],medium_purple:[0x8b,0x8c,0xde],medium_violet_red:[0xdd,0x34,0x8d],manoon:[0x83,0x31,0],coffee_gray:[0x79,0x55,0x48],peru:[0xbb,0x75,0x47],dark_salmon:[0xdb,0xa4,0x63],navajo_white:[0xfb,0xdf,0x9b],orange_red:[0xe6,0x51,0],medium_yellow:[0xff,0xd5,0x41],sienna:[0x84,0x6b,0x29],mint_green:[0xb7,0xff,0xa4],medium_spring_green:[0x37,0xff,0xc1]}
var c_name=[];for(i in color){c_name.push(i)}//为了方便,创建了两个数组
var c_value=[];for(i in color){c_value.push(color[i])}
第二步
实现计算两个颜色之间的差距。
偷懒
,在网上找了个公式喵cmetric.htm
反正我也不懂那个公式的原理。。。
代码:
function colordiff(c1,c2){r=(c1[0]+c2[0])/2;dr=c1[0]-c2[0];dg=c1[1]-c2[1];db=c1[2]-c2[2];
return Math.pow((2+r/256)*Math.pow(dr,2)+4*Math.pow(dg,2)+(2+(255-r)/256)*Math.pow(db,2),0.5);}
第三步
在所有纯色方块中,找出最近似的方块。
代码:
function choose(c){
a=[];for(i of c_value)a.push(Math.abs(colordiff(c,i)));min=9999;min_=-1;
for(i=0;i<a.length;++i){if(a[i]<min){min=a[i];min_=i;}}
return c_name[min_];}
接下来,调用choose([r,g,b]),它会根据颜色找到最近似的方块。
例子:
choose([255,0,0])
"red"
choose([0,255,0])
"olive_green"
choose([0,0,255])
"blue"
choose([255,0,255])
"medium_violet_red"
choose([255,255,0])
"lemon"
choose([0,255,255])
"medium_spring_green"
七式草莓完整版:
var color = {
cadet_blue: [0x37, 0x62, 0x9c],
sky_blue: [0x58, 0xaa, 0xe7],
powder_blue: [0xc1, 0xec, 0xf8],
dark_gray: [0x42, 0x42, 0x42],
light_gray: [0xae, 0xae, 0xae],
olive_green: [0x75, 0x8f, 0x38],
yellow_green: [0xb0, 0xcc, 0x4c],
pale_green: [0xd2, 0xe0, 0x89],
red: [0xf5, 0x0e, 0x0e],
dark_red: [0x9e, 0x19, 0x06],
brick_red: [0xde, 0x4a, 0x4a],
medium_gray: [0x71, 0x71, 0x71],
dark_slate_blue: [0x28, 0x35, 0x73],
pink: [0xff, 0x7d, 0x9c],
sakura_pink: [0xff, 0xbf, 0xe2],
orange: [0xff, 0x94, 0x0e],
lemon: [0xff, 0xf7, 0x4c],
black: [0, 0, 0],
white: [255, 255, 255],
blue: [0, 0, 255],
turquoise: [0x4d, 0xd0, 0xe1],
dark_orchid: [0x7b, 0x1f, 0xa2],
medium_orchid: [0xba, 0x68, 0xc8],
medium_purple: [0x8b, 0x8c, 0xde],
medium_violet_red: [0x喵, 0x34, 0x8d],
manoon: [0x83, 0x31, 0],
coffee_gray: [0x79, 0x55, 0x48],
peru: [0xbb, 0x75, 0x47],
dark_salmon: [0xdb, 0xa4, 0x63],
navajo_white: [0xfb, 0xdf, 0x9b],
orange_red: [0xe6, 0x51, 0],
medium_yellow: [0xff, 0xd5, 0x41],
sienna: [0x84, 0x6b, 0x29],
mint_green: [0xb7, 0xff, 0xa4],
medium_spring_green: [0x37, 0xff, 0xc1]
},
c_name = [], c_value = [];
for (i in color) {
c_name.push(i);
c_value.push(color[i]);
};
function colordiff(c1, c2) {
r = (c1[0] + c2[0]) / 2;
dr = c1[0] - c2[0];
dg = c1[1] - c2[1];
db = c1[2] - c2[2];
return Math.pow(
(2 + r / 256) *
Math.pow(dr, 2) +
4 *
Math.pow(dg, 2) +
(2 + (255 - r) / 256) *
Math.pow(db, 2),
0.5
);
};
function choose(c) {
a = [];
for (i of c_value) a.push(Math.abs(colordiff(c, i)));
min = 9999;
min_ = -1;
for (i = 0; i < a.length; ++i) {
if (a[i] < min) {
min = a[i];
min_ = i;
}
};
return c_name[min_];
};点赞0
评论
86135clccolor={"cadet_blue":[0x37,0x62,0x9c],"sky_blue":[0x58,0xaa,0xe7],"powder_blue":[0xc1,0xec,0xf8],"dark_gray":[0x42,0x42,0x42],"light_gray":[0xae,0xae,0xae],"olive_green":[0x75,0x8f,0x38],"yellow_green":[0xb0,0xcc,0x4c],"pale_green":[0xd2,0xe0,0x89],"red":[0xf5,0x0e,0x0e],"dark_red":[0x9e,0x19,0x06],"brick_red":[0xde,0x4a,0x4a],"medium_gray":[0x71,0x71,0x71],"dark_slate_blue":[0x28,0x35,0x73],"pink":[0xff,0x7d,0x9c],"sakura_pink":[0xff,0xbf,0xe2],"orange":[0xff,0x94,0x0e],"lemon":[0xff,0xf7,0x4c],"black":[0,0,0],"white":[255,255,255],"blue":[0,0,255],"turquoise":[0x4d,0xd0,0xe1],"dark_orchid":[0x7b,0x1f,0xa2],"medium_orchid":[0xba,0x68,0xc8],"medium_purple":[0x8b,0x8c,0xde],"medium_violet_red":[0xdd,0x34,0x8d],"manoon":[0x83,0x31,0],"coffee_gray":[0x79,0x55,0x48],"peru":[0xbb,0x75,0x47],"dark_salmon":[0xdb,0xa4,0x63],"navajo_white":[0xfb,0xdf,0x9b],"orange_red":[0xe6,0x51,0],"medium_yellow":[0xff,0xd5,0x41],"sienna":[0x84,0x6b,0x29],"mint_green":[0xb7,0xff,0xa4],"medium_spring_green":[0x37,0xff,0xc1]}
name=list(color.keys())
value=list(color.values())
def colordiff(c1,c2):
r=(c1[0]+c2[0])/2
R=c1[0]-c2[0]
G=c1[1]-c2[1]
B=c1[2]-c2[2]
return pow((2+r/256)*pow(R,2)+4*pow(G,2)+(2+((255-r)/256))*pow(B,2),0.5)
def choose(c):
a=[]
for i in value:
a.append(abs(colordiff(c,i)))
min_=9999
_min=-1
for i in range(len(a)):
if(a[i]<min_):
min_=a[i]
_min=i
return name[_min]点赞0
评论