Revision: 41597
Initial Code
Initial URL
Initial Description
Initial Title
Initial Tags
Initial Language
at February 20, 2011 23:07 by Sverri
Initial Code
/*-------------------------------------------------------------------- * * Turn a HEX colour value into its 3 character equivalent. * * The colour of the shorthand will differ slightly from the original * in some cases. This is because we loose half the storage capacity, * from 6 to 3 nibbles (24 to 12 bits). * */ function hex_to_shorthand($hex, $uppercase=true) { // Remove preceding hash if present if ($hex[0] == "#") $hex = substr($hex, 1); // If it already is shorthand, nothing more to do here if (strlen($hex) == 3) return "#$hex"; // If it is not 6 characters long then it is invalid elseif (strlen($hex) !== 6) return ""; // The final shorthand HEX value $final = ""; // Get the triplets $triplets = str_split($hex, 2); // Go over each triplet separately foreach ($triplets as $t) { // Get the decimal equivalent of triplet $dec = base_convert($t, 16, 10); // Find the remainder $remainder = $dec % 17; // Go to the nearest decimal that will yield a double nibble $new = ($dec%17 > 7) ? 17+($dec-$remainder) : $dec-$remainder; // Convert decimal into HEX $hex = base_convert($new, 10, 16); // Add one of the two identical nibbles $final .= $hex[0]; } // Return the shorthand HEX colour value return $uppercase ? strtoupper($final) : strtolower($final); } /*-------------------------------------------------------------------- * * 25 samples... * */ echo "<style>p{margin:0;padding:.75em;font-size:1.4em;}</style>"; for ($i=0; $i<25; $i++) { $original = substr(str_shuffle("0000011111222223333344444555556666677777" . "8888899999FFFFFEEEEEDDDDDCCCCCBBBBBAAAAA"), 0, 6); $newcolor = hex_to_shorthand($original); echo "<p style='background:#$original;'>Longhand: <b>#$original</b></p>"; echo "<p style='background:#$newcolor;'>Shorthand: <b>#$newcolor</b></p>"; echo "<br>"; }
Initial URL
Initial Description
Turn a HEX colour value into its 3 character equivalent.
Initial Title
Longhand HEX colour to shorthand equivalent
Initial Tags
Initial Language
PHP