Partage
  • Partager sur Facebook
  • Partager sur Twitter

tls to rvb,traduire un scriptphp en javascript

Sujet résolu
    28 novembre 2011 à 23:07:16

    Bonjour,
    je souhaiterai convertir une teinte tls(teinte,luminosité,saturation) en rvb
    j'ai trouve un script en php mais je doit le mettre dans un fonction javascript
    pouvez vous m'aider a le transcrire en javascript
    <?php
    function TLS_RVB($t, $l, $s)
    {
    	$l /= 255;
    	$s /= 255;
    	
    	if($l < 1/2)
    		$q = $l * (1 + $s);
    	elseif($l >= 1/2)
    		$q = $l + $s - ($l * $s);
    	
    	$p = 2 * $l - $q;
    	
    	$hk = $t / 360;
    	$a[0] = $hk + 1/3;
    	$a[1] = $hk;
    	$a[2] = $hk - 1/3;
    	
    	$z = Array();
    	
    	foreach($a As $k => &$tc)
    	{
    		if($tc < 0)
    			$tc++;
    		elseif($tc > 1)
    			$tc--;
    		
    		if($tc < 1/6)
    			$z[$k] = $p + (($q - $p) * 6 * $tc);
    		elseif($tc >= 1/6 && $tc < 1/2)
    			$z[$k] = $q;
    		elseif($tc >= 1/2 && $tc < 2/3)
    			$z[$k] = $p + (($q - $p) * 6 * (2/3 - $tc));
    		else
    			$z[$k] = $p;
    	}
    	
    	$z[0] = intval(round($z[0] * 255));
    	$z[1] = intval(round($z[1] * 255));
    	$z[2] = intval(round($z[2] * 255));
    	
    	return $z;
    }
    


    pour le tableau
    $z = Array();
    

    deviens
    var z = new Array();
    


    mais cette fonction me pose pobleme
    foreach($a As $k => &$tc)
    



    merci pour votre aide

    a+
    Christophe
    • Partager sur Facebook
    • Partager sur Twitter
      29 novembre 2011 à 7:13:08

      Bonjour,

      Voici un exemple de foreach en javascript :
      var array = new Object(); //this is safe only if you can assure object has not been extended.
      //use the below if Object has been extended
      var array;
      
      //everything below here works fine regardless of the two above cases
      array['something'] = 'yay';
      array['somethingelse'] = 'more';
      
      for ( keyVar in array ) {
         alert(array[keyVar]);
      }
      


      Romain
      • Partager sur Facebook
      • Partager sur Twitter
        29 novembre 2011 à 7:48:17

        merci pour ta réponse

        mais le probleme est qu'il y a trois variables
        a k et tc

        a c'est le tableau
        k ou tc la valeur
        tc ou k l'index du tableau

        si j'ai bien compris

        sinon merci quand meme
        a+
        Christophe
        • Partager sur Facebook
        • Partager sur Twitter
          29 novembre 2011 à 7:54:15

          La syntaxe est un peu différente certes, mais tu peux accéder aux mêmes éléments :
          $a -> array
          $k -> keyVar
          $tc -> array[keyVar]

          Edit : $k c'est ton indice alors que $tc c'est la valeur correspondant à ton indice.
          • Partager sur Facebook
          • Partager sur Twitter
            29 novembre 2011 à 8:13:22

            Dans ce cas, l'équivalent JS est une boucle for classique et non pas une boucle for-in.

            var hk = t / 360;
            var a = [
            	hk + 1/3,
            	hk,
            	hk - 1/3
            ];
            var z = [];
            for(var k = 0, l = a.length; k < l; k++) {
            	if(a[k] < 0) {
            		a[k]++;
            	} else if(a[k] > 1) {
            		a[k]--;
            	}
            	// ...
            }
            


            Et attention, en JS tu ne peux pas reproduire le comportement du &$tc. Il faut conserver la syntaxe a[k].
            • Partager sur Facebook
            • Partager sur Twitter
              30 novembre 2011 à 8:01:02

              Merci pour votre aide

              donc voici le script qui fonctionne:

              function TLS_RVB(t,l,s)
              {
              var a = new Array();
               	l /= 255;
              	s /= 255;
              	
              	if(l < 1/2)
              		q = l * (1 + s);
              	else if(l >= 1/2)
              		q = l + s - (l * s);
              	
              	p = 2 * l - q;
              	
              	hk = t / 360;
              	a[0] = hk + 1/3;
              	a[1] = hk;
              	a[2] = hk - 1/3;
              	
              	var z = new Array();
              	var value; 
              for(var k in a) { 
                  tc = a[k]; 
              	
              	
              			if(tc < 0)
              			tc++;
              		else if(tc > 1)
              			tc--;
              		
              		if(tc < 1/6)
              			z[k] = p + ((q - p) * 6 * tc);
              		else if(tc >= 1/6 && tc < 1/2)
              			z[k] = q;
              		else if(tc >= 1/2 && tc < 2/3)
              			z[k] = p + ((q - p) * 6 * (2/3 - tc));
              		else
              			z[k] = p;
              	}
              	
              		z[0] = Math.round((z[0] * 255))
              	z[1] = Math.round((z[1] * 255));
              	z[2] = Math.round((z[2] * 255));
              
              
              return z;
              }
              


              Bonne journée
              Christophe
              • Partager sur Facebook
              • Partager sur Twitter

              tls to rvb,traduire un scriptphp en javascript

              × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
              × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
              • Editeur
              • Markdown