日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 综合教程 >内容正文

综合教程

十六进制颜色值和rgb颜色值互相转换

發布時間:2024/1/3 综合教程 37 生活家
生活随笔 收集整理的這篇文章主要介紹了 十六进制颜色值和rgb颜色值互相转换 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

  在之前的一篇文章《將16進制的顏色轉為rgb顏色》中,曾經寫過將16進制的顏色轉換為rgb顏色。

  當然了,今天再看,還是有很多可以優化的地方,所以對之前的代碼重構了一遍,并且同時寫了一個反向轉換(也就是將rgb顏色值轉換為字符串形式的16進制的顏色值)函數。

  16進制轉換rgb:

    function transferColorToRgb(color) {
            if (typeof color !== 'string' && !(color instanceof String)) return console.error("請輸入16進制字符串形式的顏色值");
            color = color.charAt(0) === '#' ? color.substring(1) : color;
            if (color.length !== 6 && color.length !== 3) return console.error("請輸入正確的顏色值")
            if (color.length === 3) {
                color = color.replace(/(w)(w)(w)/, '$1$1$2$2$3$3')
            }
            var reg = /w{2}/g;
            var colors = color.match(reg);
            for (var i = 0; i < colors.length; i++) {
                colors[i] = parseInt(colors[i], 16).toString();
            }
            return 'rgb(' + colors.join() + ')';
        }

  調用時,參數形式可以為帶“#”號,也可以不帶,實際顏色值可以為3位,也可以為6位,如: "#ffffff"、"#fff"、"ffffff"、"fff"。

  其中涉及到了利用正則表達式對3位16進制的顏色值轉換為6位的數值。

color.replace(/(w)(w)(w)/, '$1$1$2$2$3$3')

  rgb顏色值轉為為16進制的顏色值:

    function transferRgbToStr(color) {
            if (typeof color !== 'string' && !(color instanceof String) || !~color.indexOf('rgb')) return console.error("請輸入rgb形式的顏色值");
            color = color.replace(/s+/g, '');
            var index = color.indexOf('(') + 1;
            //注意: String 的slice方法,slice方法參數為負數時,即為倒數
            // substring 方法參數為負數時,全都認為是0
            var colors = color.slice(index, -1).split(',').slice(0, 3);
            for (var i = 0; i < colors.length; i++) {
                if (parseInt(colors[i], 10) > 255 || parseInt(colors[i], 10) < 0)
                    return console.error("顏色值范圍在0到255之間,請注意輸入值!")
                colors[i] = parseInt(colors[i], 10).toString(16);
                if (colors[i].length === 1) {
                    colors[i] = "0" + colors[i]
                }
            }
            return colors.join("");
        }

  調用時,參數形式可以為帶“rgb()”形式的,也可以為"rgba()"形式的數據,如:rgb(122,23,1) 、rgba(123,23,12,0.5)。

  需要注意的是:

var colors = color.slice(index, -1).split(',').slice(0, 3);

  這一句代碼當中,有兩個slice方法,一個是字符串方法,一個是數組方法,盡管他們的用法一樣,仍然需要謹慎。

  還涉及到了String方法中的substring和slice方法使用上的區別,主要是參數為負數時,兩者不同的處理方式。slice當做倒數,也就是從后往前數,而sunstring則完全認作是0。請在不同的場景下正確使用兩個方法。  

  

總結

以上是生活随笔為你收集整理的十六进制颜色值和rgb颜色值互相转换的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。