Я использую трехзначные значения #fff
цвета в CSS в течение длительного времени: #fff
, #999
, #069
и т. Д. Я вижу, как повторяющиеся буквы / числа объединяются для создания трехзначного шестнадцатеричного цветового кода, но я не совсем понимаю шаблон, чтобы писать конвертер в PHP. Есть ли для этого документация?
Edit: О, возможно, мой вопрос был не ясен. Мне нужно знать, как некоторые 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; is # 0066aa;
Каждые две цифры представляют собой число от 0 до 255.
Преобразование этих значений в шестнадцатеричные и обратно – все, что вам нужно.
#f0f
расширяется до #ff00ff
поэтому вам просто нужно вычислить значение и значение времени 16 для каждого символа, например:
#f98
: f = 15 => красный = 15 + 15 * 16 = 255 и т. д.
function hexfix(str) { var v, w; v = parseInt(str, 16); // in rrggbb if (str.length == 3) { // nybble colors - fix to hex colors // 0x00000rgb -> 0x000r0g0b // 0x000r0g0b | 0x00r0g0b0 -> 0x00rrggbb w = ((v & 0xF00) << 8) | ((v & 0x0F0) << 4) | (v & 0x00F); 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)+'. '));