-
-
Save codemasher/741f30e68c6e9c7921c7 to your computer and use it in GitHub Desktop.
Convert RGB color values to HSL and vice versa in PHP. Adapted from the Javascript over here: https://github.com/mjijackson/mjijackson.github.com/blob/master/2008/02/rgb-to-hsl-and-rgb-to-hsv-color-model-conversion-algorithms-in-javascript.txt
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?php | |
//adapted from https://github.com/mjijackson/mjijackson.github.com/blob/master/2008/02/rgb-to-hsl-and-rgb-to-hsv-color-model-conversion-algorithms-in-javascript.txt | |
/** | |
* @param array $rgb integer values (r,g,b) in range 0-255 | |
* | |
* @return array HSL | |
*/ | |
function rgb2hsl($rgb){ | |
$r = $rgb[0]/255; | |
$g = $rgb[1]/255; | |
$b = $rgb[2]/255; | |
$min = min($r, $g, $b); | |
$max = max($r, $g, $b); | |
$d = $max-$min; | |
$h = $s = 0; | |
$l = ($max+$min)/2; | |
if($d > 0){ | |
$s = $l > 0.5 ? $d/(2-$max-$min) : $d/($max+$min); | |
switch($max){ | |
case $r: $h = ($g-$b)/$d+($g < $b ? 6 : 0); break; | |
case $g: $h = ($b-$r)/$d+2; break; | |
case $b: $h = ($r-$g)/$d+4; break; | |
} | |
$h /= 6; | |
} | |
return array($h, $s, $l); | |
} | |
/** | |
* @param array $hsl float values (h,s,l) in range 0.0-1.0 | |
* | |
* @return array RGB | |
*/ | |
function hsl2rgb($hsl){ | |
$h = $hsl[0]; | |
$s = $hsl[1]; | |
$l = $hsl[2]; | |
$r = $g = $b = $l; | |
if($s <> 0){ | |
$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 array($r*255, $g*255, $b*255); | |
} | |
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; | |
} | |
?> |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment