Skip to content

Instantly share code, notes, and snippets.

@codemasher
Last active December 18, 2015 00:18
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save codemasher/741f30e68c6e9c7921c7 to your computer and use it in GitHub Desktop.
Save codemasher/741f30e68c6e9c7921c7 to your computer and use it in GitHub Desktop.
<?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