色,十六进制色和名字组成的数组或者字典,然后查询颜色会比较好。
/**
* HSL颜色值转换为RGB.
* 换算公式改编自 http://en.wikipedia.org/wiki/HSL_color_space.
* h, s, 和 l 设定在 [0, 1] 之间
* 返回的 r, g, 和 b 在 [0, 255]之间
*
* @param Number h 色相
* @param Number s 饱和度
* @param Number l 亮度
* @return Array RGB色值数值
*/
function hslToRgb(h, s, l){
var r, g, b
if(s == 0){
r = g = b = l// achromatic
}else{
var hue2rgb = function hue2rgb(p, q, t){
if(t <0) t += 1
if(t >1) t -= 1
if(t <1/6) return p + (q - p) * 6 * t
if(t <1/2) return q
if(t <2/3) return p + (q - p) * (2/3 - t) * 6
return p
}
var q = l <0.5 ? l * (1 + s) : l + s - l * s
var p = 2 * l - q
r = hue2rgb(p, q, h + 1/3)
g = hue2rgb(p, q, h)
b = hue2rgb(p, q, h - 1/3)
}
return [Math.round(r * 255), Math.round(g * 255), Math.round(b * 255)]
}
/**
* RGB 颜色值转换为 HSL.
* 转换公式参考自 http://en.wikipedia.org/wiki/HSL_color_space.
* r, g, 和 b 需要在 [0, 255] 范围内
* 返回的 h, s, 和 l 在 [0, 1] 之间
*
* @param Number r 红色色值
* @param Number g 绿色色值
* @param Number b 蓝色色值
* @return Array HSL各值数组
*/
function rgbToHsl(r, g, b){
r /= 255, g /= 255, b /= 255
var max = Math.max(r, g, b), min = Math.min(r, g, b)
var h, s, l = (max + min) / 2
if(max == min){
h = s = 0// achromatic
}else{
var d = max - min
s = l >0.5 ? d / (2 - max - min) : d / (max + min)
switch(max){
case r: h = (g - b) / d + (g <b ? 6 : 0)break
case g: h = (b - r) / d + 2break
case b: h = (r - g) / d + 4break
}
h /= 6
}
return [Math.floor(h*100), Math.round(s*100), Math.round(l*100)]
}
原文:https://blog.csdn.net/qq_35321405/article/details/79786977
问题比较复杂,分步来讲:
因为你这张图,很显然是使用HSB颜色,固定H,S和B的取值范围都是0%~100%,所有可能的集合就是你的这张图,所以,首先要把rgb颜色转换成hsb颜色。
把得到的hsb颜色的h值固定,然后使用一个循环,把hsb(h,0%,0%)~hsb(h,100%,100%)都写入一个数组里,这里要注意hsb(h,12%,80%)和hsb(h,80%,12%)是不同的.
再把hsb颜色转换成rgb颜色,然后输出。
好了,思路有了,接下来难点在于rgb与hsb的颜色转换。
二者的转换复杂程度非同一般,所以,如果真的需要,HI我,给你一篇文章地址。这里打不出网址来。