我一直在CSS中使用3位十六進制顏色值很長時間:#fff
,#999
,#069
等我可以看到重複的字母/數字是如何合併創建的一個3位十六進制顏色代碼,但我不完全理解這種模式能夠在PHP中編寫轉換器。有這方面的文件嗎?轉換爲3位十六進制顏色代碼
編輯:哦,也許我的問題不清楚。我需要知道一些6位十六進制顏色值是如何轉換爲3位的。 xxxxxx
(ffffff
)和xxyyzz
(006699
) - 這些是唯一的兩種模式,對嗎?
我一直在CSS中使用3位十六進制顏色值很長時間:#fff
,#999
,#069
等我可以看到重複的字母/數字是如何合併創建的一個3位十六進制顏色代碼,但我不完全理解這種模式能夠在PHP中編寫轉換器。有這方面的文件嗎?轉換爲3位十六進制顏色代碼
編輯:哦,也許我的問題不清楚。我需要知道一些6位十六進制顏色值是如何轉換爲3位的。 xxxxxx
(ffffff
)和xxyyzz
(006699
) - 這些是唯一的兩種模式,對嗎?
要轉換一個3個字符的十六進制代碼爲6個字符的一個,你需要重複每一個字符:
$hex = '#fff';
$hex6 = '#' . $hex[1] . $hex[1] . $hex[2] . $hex[2] . $hex[3] . $hex[3];
如果你想將它轉換爲十進制可以使用hexdec
功能
3位CSS代碼是短期的6位數字「:#06A;被#0066aa;
每兩個數字代表其數量從0到255
轉換這些值爲十六進制和背面是所有你需要
function hexfix(str) {
var v, w;
v = parseInt(str, 16); \t // in rrggbb
if (str.length == 3) {
// nybble colors - fix to hex colors
\t // 0x00000rgb -> 0x000r0g0b
\t // 0x000r0g0b | 0x00r0g0b0 -> 0x00rrggbb
\t w = ((v & 0xF00) << 8) | ((v & 0x0F0) << 4) | (v & 0x00F);
\t v = w | (w << 4);
}
return v.toString(16).toUpperCase();
}
var hex1 = 'AABBCC',
hex2 = 'ABC';
document.body.appendChild(document.createTextNode(hex1+" becomes "+hexfix(hex1)+'. '));
document.body.appendChild(document.createTextNode(hex2+" becomes "+hexfix(hex2)+'. '));
這樣的事情。
你在轉換哪種方式?從3到6位數?或從十六進制到十進制? – peirix 2009-09-22 10:30:15
轉換器的好處肯定會非常有限。畢竟,只有一小部分顏色代碼可以簡化,並且每個代碼只能節省3個字符。如果有任何文檔,我會感到驚訝,但作爲編程練習,它可能是有用的。 – pavium 2009-09-22 10:32:52
哦,也許我的問題不清楚。我需要知道一些6位十六進制顏色值是如何轉換爲3位的? xxxxxx(ffffff)xxyyzz(006699),這些是唯一的兩種模式,對嗎? – 3zzy 2009-09-22 17:55:00