CSS顏色模式切換器的實現,css色彩轉換器

來源:互聯網
上載者:User

CSS顏色模式切換器的實現,css色彩轉換器
×目錄[1]模式轉換 [2]DEMO前面的話

  在CSS中,顏色的表示方式主要包括關鍵字、16進位、RGB模式、RGBA模式、HSL模式、HSLA模式。關於顏色模式的詳細資料移步至此。本文就16進位、RGB模式及HSL模式的互相轉換進行實現。

 

模式轉換【1】16進位 -> RGB

  16進位是設定顏色值的常用方式,將三個介於00-FF的十六進位數串連起來,若16進位的3組數各自成對,則可簡寫為3位。

  16進位與RGB模式的對應關係為:16進位的前兩位對應RGB的red部分;16進位的中間兩位對應RGB的green部分;16進位的後兩位對應RGB的blue部分。而16進位使用的16進位的數字格式,而RGB使用的10進位的數字格式。所以還需要數字進位的變換

function sixteenToRgb(str){    var r,g,b,rgb;    if(str.length == 7){        r = parseInt(str.substr(1,2),16);        g = parseInt(str.substr(3,2),16);        b = parseInt(str.substr(5,2),16);    }else if(str.length == 4){        r = parseInt('' + str.substr(1,1) + str.substr(1,1),16);        g = parseInt('' + str.substr(2,1) + str.substr(2,1),16);        b = parseInt('' + str.substr(3,1) + str.substr(3,1),16);            }else{        return 'false'    }    rgb = 'rgb(' + r +',' + g +','+b +')';    return  rgb;}console.log(sixteenToRgb('#123456'));//rgb(18,52,86)    console.log(sixteenToRgb('#123'));//rgb(17,34,51)console.log(sixteenToRgb('#1234'));//false

 

【2】RGB -> 16進位

  通過組合不同的紅色、綠色、藍色分量創造出的顏色成為RGB模式的顏色。顯示器是由一個個像素構成,利用電子束來表現色彩。像素把光的三原色:紅色(R)、綠色(G)、藍色(B)組合起來。每像素包含8位元色彩的資訊量,有0-255的256個單元,其中0是完全無光狀態,255是最亮狀態

  在RGB模式轉換為16進位模式要注意的是,轉換的成R、G、B三個分量的16進位值如果是一位元,則需要在前一位補0

function rgbToSixteen(str){    var r16,g16,b16,sixteen;    if(/^rgb\((\d+)\,(\d+)\,(\d+)\)$/.test(str)){           if( RegExp.$1 >= 0 && RegExp.$1 <=255 || RegExp.$2 >= 0 && RegExp.$2 <=255 || RegExp.$3 >= 0 && RegExp.$3 <=255){               r16 = addZero(Number(RegExp.$1).toString(16));               g16 = addZero(Number(RegExp.$2).toString(16));               b16 = addZero(Number(RegExp.$3).toString(16));              sixteen = '#' + r16 + g16 + b16 ;              return  sixteen;           }else{               return 'false';           }    }else{        return 'false';    }}function addZero(str){    if(str.length == 1){        return '0' + str;    }else{        return str;    }}console.log(rgbToSixteen('rgb(10,44,3)'));//#0a2c03    console.log(rgbToSixteen('rgb(-10,44,3)'));//falseconsole.log(rgbToSixteen('rgb(123)'));//false

 

【3】HSL -> RGB

  HSL模式是通過對色調(H)、飽和度(S)、亮度(L)三個色彩通道的變化以及它們相互的疊加得到各式各樣的顏色。HSL標準幾乎可以包括人類視力所能感知的所有顏色

  h:色調(hue)可以為任意整數。0(或360或-360)表示紅色,60表示黃色,120表示綠色,180表示青色,240表示藍色,300表示洋紅(當h值大於360時,實際的值等於該值模360後的值)

  s:飽和度(saturation),就是指顏色的深淺度和鮮豔程度。取0-100%範圍的值,其中0表示灰階(沒有該顏色),100%表示飽和度最高(顏色最鮮豔)

  l:亮度(lightness),取0-100%範圍的值,其中0表示最暗(黑色),100%表示最亮(白色)

//參考http://stackoverflow.com/questions/2353211/hsl-to-rgb-color-conversionfunction hslToRgb(str){    var r, g, b;    var h, s, l;    if(/^hsl\((\d+)\,(\d+)%\,(\d+)%\)$/.test(str)){           if( RegExp.$1 >= 0 && RegExp.$1 <=360 && RegExp.$2 >= 0 && RegExp.$2 <=100 && RegExp.$3 >= 0 && RegExp.$3 <=100){               h = RegExp.$1/360;               s = RegExp.$2/100;               l = RegExp.$3/100;            if(s == 0){                r = g = b = l;             }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 'rgb(' + Math.round(r * 255) + ','+ Math.round(g * 255)+ ',' + Math.round(b * 255) + ')';        }else{               return 'false';           }    }else{        return 'false';    }}console.log(hslToRgb('hsl(248,64%,39%)'));//rgb(53,36,163)    console.log(hslToRgb('hsl(-248,64%,39%)'));//false    console.log(hslToRgb('hsl(300,40%,50%)'));//rgb(179,77,178)    

 

【4】RGB -> HSL
//參考http://stackoverflow.com/questions/2353211/hsl-to-rgb-color-conversionfunction rgbToHsl(str){    var r,g,b;    if(/^rgb\((\d+)\,(\d+)\,(\d+)\)$/.test(str)){           if( RegExp.$1 >= 0 && RegExp.$1 <=255 && RegExp.$2 >= 0 && RegExp.$2 <=255 && RegExp.$3 >= 0 && RegExp.$3 <=255){            r = RegExp.$1/255, g = RegExp.$2/255, b = RegExp.$3/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 + 2; break;                    case b: h = (r - g) / d + 4; break;                }                h /= 6;            }            return 'hsl(' + Math.round(h*360) + ',' + Math.round(s*100) + '%,' + Math.round(l*100) + '%)';           }else{               return 'false';           }    }else{        return 'false';    }}console.log(rgbToHsl('rgb(53,36,163)'));//hsl(248,64%,39%)console.log(rgbToHsl('rgb(179,77,178)'));//hsl(301,40%,50%)console.log(rgbToHsl('rgb(300,1,1)'));//false

 

DEMO實現簡易拾色器

 

16進位色彩轉換器

 

RGB色彩轉換器

 

HSL色彩轉換器

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.