0.5 ? $diff / (2 - $max - $min) : $diff / ($max + $min); switch($max) { case $rgb[0]: $h = ($rgb[1] - $rgb[2]) / $diff + ($rgb[1] < $rgb[2] ? 6 : 0); break; case $rgb[1]: $h = ($rgb[2] - $rgb[0]) / $diff + 2; break; case $rgb[2]: $h = ($rgb[0] - $rgb[1]) / $diff + 4; break; } $h /= 6; } //TODO: Maybe return values not changed? For now this seems easier like so return array($h*360, $s*100, $l*100); } function hslToHex($hsl) { list($h, $s, $l) = $hsl; if ($s == 0) $s = 0.000001; $q = $l < 0.5 ? $l * (1 + $s) : $l + $s - $l * $s; $p = 2 * $l - $q; $r = hue2rgb($p, $q, $h + 1/3); $g = hue2rgb($p, $q, $h); $b = hue2rgb($p, $q, $h - 1/3); return rgb2hex($r) . rgb2hex($g) . rgb2hex($b); } function hue2rgb($p, $q, $t) { if ($t < 0) $t += 1; if ($t > 1) $t -= 1; if ($t < 1/6) return $p + ($q - $p) * 6 * $t; if ($t < 1/2) return $q; if ($t < 2/3) return $p + ($q - $p) * (2/3 - $t) * 6; return $p; } function rgb2hex($rgb) { return str_pad(dechex($rgb * 255), 2, '0', STR_PAD_LEFT); } function getColor($name,$default){ // Color Picker can be tricked: 1. Select color; 2. delete color in input field; 3. Publish. // In this case an empty value is set but the default value is not used. //Get color from the Customizer in the form #rrggbb $colsharp = esc_attr(get_theme_mod($name, $default)) ? esc_attr(get_theme_mod($name, $default)) : $default; // delete the '#' $hex = substr($colsharp,1); return hexToHsl($hex); }