convertir a código de color hexadecimal de 3 dígitos

He estado utilizando valores de color hexadecimales de 3 dígitos en CSS durante mucho tiempo: #fff , #999 , #069 , etc. Puedo ver cómo se combinan las letras / números repetidos para crear un código de color hexadecimal de 3 dígitos, pero no entiendo completamente el patrón para poder escribir un convertidor en PHP. ¿Hay documentación para esto?

Editar: Oh, tal vez mi pregunta no estaba clara. Necesito saber cómo algunos de los valores de color hexadecimal de 6 dígitos se convierten a 3 dígitos. xxxxxx ( ffffff ) y xxyyzz ( 006699 ): estos son los dos únicos patrones, ¿correcto?

Para convertir un código hexadecimal de 3 caracteres en uno de 6 caracteres, debes repetir cada carácter:

 $hex = '#fff'; $hex6 = '#' . $hex[1] . $hex[1] . $hex[2] . $hex[2] . $hex[3] . $hex[3]; 

Si desea convertirlo a decimal, puede usar la función hexdec

El código CSS de 3 dígitos es la abreviatura de 6 dígitos “: # 06a; es # 0066aa;
Cada dos dígitos representan un número de 0 a 255.
Convertir estos valores a hex y regresar es todo lo que necesita.

#f0f se expande a #ff00ff así que básicamente solo necesita calcular el valor y el valor multiplicado por 16 para cada carácter, por ejemplo:

#f98 : f = 15 => rojo = 15 + 15 * 16 = 255 etc.

 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)+'. '));