Conversion rgb <-> tsl

Soyez le premier à donner votre avis sur cette source.

Snippet vu 7 515 fois - Téléchargée 19 fois

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

Ajouter un commentaire Commentaires
Mrreivax
Messages postés
100
Date d'inscription
mercredi 9 juin 2004
Statut
Membre
Dernière intervention
26 juin 2010
7
15 juin 2008 à 16:32
a la base, cette source vient d'une de mes classe. C'est la raison pour laquelle il y a "PRIVATE". "hue2rgb" n'est pas forcément utile, puisque cette fonction n'est appelé que par une fonction public. Donc, l'utilisateur n'y a pas accés directement. Mais c'est vrai que ca aurait été plus malin de l'appelé hue2rgb quand meme ^^
aKheNathOn
Messages postés
276
Date d'inscription
dimanche 22 juillet 2001
Statut
Modérateur
Dernière intervention
5 décembre 2013

15 juin 2008 à 00:31
source très utile pour les traitements d'images. Ligne 2 le private n'est pas utile, et pour suivre la logique de nommage de fonctions tu devrais l'appeller hue2rgb.

Merci pour la source et bonne continuation

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.