Conversion rgb <-> tsl

Contenu du snippet

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!!!

A voir également

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.