js怎么把rgb颜色值转变为对应的单词?

JavaScript012

js怎么把rgb颜色值转变为对应的单词?,第1张

很难实现,像chrome浏览器的,基本你背景色写的是单词,但是浏览器已经转换为了rgb色,所以你读出来的不会是单词。如果你写在html里的话,可以用读取整个标签,然后用正则提取出来,但这个方法不建议使用,使用css样式表的基本就无法使用了。建议你用一个rgb

色,十六进制色和名字组成的数组或者字典,然后查询颜色会比较好。

/**

    * 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我,给你一篇文章地址。这里打不出网址来。