J'ai cherché sur tous les sites comment passer du mode RGB à TSL et ci-ce-versa sans résultat.
Puis finalement, je suis tombé sur
http://www.easyrgb.com/index.php?X=MATH&H=19#text19
Les scripts ne sont pas en PHP, alors je les ai traduits!
Source / Exemple :
<?php
private function Hue_2_RGB( $v1, $v2, $vH ){
if ( $vH < 0 ) $vH += 1;
if ( $vH > 1 ) $vH -= 1;
if ( ( 6 * $vH ) < 1 ) return ( $v1 + ( $v2 - $v1 ) * 6 * $vH );
if ( ( 2 * $vH ) < 1 ) return ( $v2 );
if ( ( 3 * $vH ) < 2 ) return ( $v1 + ( $v2 - $v1 ) * ( ( 2 / 3 ) - $vH ) * 6 );
return ( $v1 );
}
function tsl2rgb($T,$S,$L){
//HSL from 0 to 1
if ( $S == 0 ){
//RGB results from 0 to 255
$R = $L * 255;
$G = $L * 255;
$B = $L * 255;
}else{
if ( $L < 0.5 ){
$var_2 = $L * ( 1 + $S );
}else{
$var_2 = ( $L + $S ) - ( $S * $L );
}
$var_1 = 2 * $L - $var_2;
$R = 255 * $this->Hue_2_RGB( $var_1, $var_2, $T + ( 1 / 3 ) );
$G = 255 * $this->Hue_2_RGB( $var_1, $var_2, $T );
$B = 255 * $this->Hue_2_RGB( $var_1, $var_2, $T - ( 1 / 3 ) );
}
return array("R"=>$R,"G"=>$G,"B"=>$B);
}
function rgb2tsl($R,$G,$B){
//RGB from 0 to 255
$var_R = ( $R / 255 );
$var_G = ( $G / 255 );
$var_B = ( $B / 255 );
$var_Min = min( $var_R, $var_G, $var_B ); //Min. value of RGB
$var_Max = max( $var_R, $var_G, $var_B ); //Max. value of RGB
$del_Max = $var_Max - $var_Min; //Delta RGB value
$L = ( $var_Max + $var_Min ) / 2;
//This is a gray, no chroma...
if ( $del_Max == 0 ){
//HSL results from 0 to 1
$T = 0;
$S = 0;
}
//Chromatic data...
else{
if ( $L < 0.5 ){
$S = $del_Max / ( $var_Max + $var_Min );
}else{
$S = $del_Max / ( 2 - $var_Max - $var_Min );
}
$del_R = ( ( ( $var_Max - $var_R ) / 6 ) + ( $del_Max / 2 ) ) / $del_Max;
$del_G = ( ( ( $var_Max - $var_G ) / 6 ) + ( $del_Max / 2 ) ) / $del_Max;
$del_B = ( ( ( $var_Max - $var_B ) / 6 ) + ( $del_Max / 2 ) ) / $del_Max;
if( $var_R == $var_Max ) $T = $del_B - $del_G;
else if ( $var_G == $var_Max ) $T = (( 1 / 3 ) + $del_R - $del_B);
else if ( $var_B == $var_Max ) $T = (( 2 / 3 ) + $del_G - $del_R);
if ( $T < 0 ){
$T += 1;
}
if ( $T > 1 ) {
$T -= 1;
}
}
return array("T"=>$T,"S"=>$S,"L"=>$L);
}
?>
Conclusion :
Merci à EasyRGB!!!