2011-07-24 84 views
5

是否有可能將顏色#ff0000轉換爲rgb?jquery#color to rgba?

所以轉換#ff0000rgb(255,0,0);

我敢肯定這一定是可能的,我只是不知道怎麼辦。任何見解都會很棒!

回答

8

你可以使用:

var s = "#ff0000"; 
var patt = /^#([\da-fA-F]{2})([\da-fA-F]{2})([\da-fA-F]{2})$/; 
var matches = patt.exec(s); 
var rgb = "rgb("+parseInt(matches[1], 16)+","+parseInt(matches[2], 16)+","+parseInt(matches[3], 16)+");"; 
alert(rgb); 
+0

http://jsfiddle.net/Paulpro/hTSLR/ – Paulpro

+0

非常好。謹慎花一分鐘或2分鐘編輯並解釋這是如何工作的?我不是一個只是'複製和粘貼'最終結果的人。 – daryl

+0

爲什麼不使用'var patt =/^#([\ dA-F] {2})([\ dA-F] {2})([\ dA-F] {2})$/i;'? –

6

.css("background-color")將返回RGB http://api.jquery.com/css/

這裏是小提琴http://jsfiddle.net/3nigma/msRqv/1/

+0

嗯,關閉。但不完全是我所追求的。我應該提到我也希望能夠將alpha通道應用於此。 – daryl

+0

非常聰明。然後只要做'$('#element').css('background-color')。replace(')',',0.5)')。replace('rgb','rgba');'0.5 alpha級別。 – chris

1

您必須從十六進制定義中分離所有三個組件,然後將它們轉換爲十進制。這工作:

​​
3

純粹與你有串的工作,你可以像這樣:

var color = '#FF5500'; 

首先,提取兩個十六進制數字的每種顏色:

var redHex = color.substring(1, 3); 
var greenHex = color.substring(3, 5); 
var blueHex = color.substring(5, 7); 

然後,將它們轉換爲十進制:

var redDec = parseInt(redHex, 16); 
var greenDec = parseInt(greenHex, 16); 
var blueDec = parseInt(blueHex, 16); 

最後,讓您的rgb()字符串作爲結果:

var colorRgb = 'rgb(' + redDec + ', ' + greenDec + ', ' + blueDec + ')'; 
console.log(colorRgb); 

,你會得到作爲輸出:

rgb(255, 85, 0) 
+0

這是否適用於所有可能的字符串? – daryl

+2

只要這些字符串以一個無用的字符開頭,並且每種顏色都有兩位數 - 但是如果您沒有每種顏色的兩位數字,這將不起作用,並且需要一點返工。 –