Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

DÉGRADÉ


Information sur la source

Catégorie :Graphique Niveau : Débutant Date de création : 07/06/2004 Date de mise à jour : 18/01/2005 09:50:14 Vu / téléchargé: 6 385 / 361

Note :
9 / 10 - par 9 personnes
9,00 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10

Commentaire sur cette source (13)
Ajouter un commentaire et/ou une note

Description

Cliquez pour voir la capture en taille normale
Ce code permet tout simplement de faire un zoli dégradé entre 2 couleurs défini par leurs composantes RVB.
Grace au paramètre sens, le dégradé peut se faire soit horizontalement sur la longueur (sens=1), soit verticalement sur la hauteur (sens=2), soit en diagonal (sens=3).

-> Téléchargez le fichier dégradé.php contenant le code.
-> Faites appel à ce fichier en précisant les paramètres :
<img src="degrade.php?l=980&h=610&sens=3&r1=0&v1=0&b1=255&r2=255&v2=0&b2=0" alt="degrade" />

NB : La bibliothèque GD2 est nécessaire pour utiliser les fonctions php de gestions d'images, donc, dans php.ini, décommenter le ligne
extension=php_gd2.dll
 

Source

  • <?//lecture des paramètres ---
  • $l=$_GET["l"];
  • $h=$_GET["h"];
  • $sens=$_GET["sens"]; //sens : 1->horizontal, 2->vertical, 3->diagonal
  • $c1=array('r'=>$_GET["r1"],'v'=>$_GET["v1"],'b'=>$_GET["b1"]);
  • $c2=array('r'=>$_GET["r2"],'v'=>$_GET["v2"],'b'=>$_GET["b2"]);
  • //---
  • $im=imagecreatetruecolor($l,$h);
  • $blanc=imagecolorallocate($im,255,255,255);
  • switch ($sens)
  • {
  • case 1 : $t=$l; break;
  • case 2 : $t=$h; break;
  • case 3 : $t=$l+$h; break;
  • }
  • //on dessine une ligne verticale, horizontale ou diagonale pour chaque pixel entre 0 et $t
  • for ($i=0;$i<$t;$i++)
  • {
  • $r = $c1['r'] + $i*($c2['r']-$c1['r'])/$t;
  • $v = $c1['v'] + $i*($c2['v']-$c1['v'])/$t;
  • $b = $c1['b'] + $i*($c2['b']-$c1['b'])/$t;
  • $c=imagecolorallocate($im,$r,$v,$b);
  • switch ($sens)
  • {
  • case 1 : imageline($im,$i,0,$i,$h,$c); break;
  • case 2 : imageline($im,0,$i,$l,$i,$c); break;
  • case 3 : imageline($im,max(0,($i-$h)),min($i,$h),min($i,$l),max(0,($i-$l)),$c); break;
  • }
  • }
  • header("Content-Type: image/png");
  • imagepng($im);
  • imagedestroy($im);?>
<?//lecture des paramètres ---
$l=$_GET["l"];
$h=$_GET["h"];
$sens=$_GET["sens"]; //sens : 1->horizontal, 2->vertical, 3->diagonal
$c1=array('r'=>$_GET["r1"],'v'=>$_GET["v1"],'b'=>$_GET["b1"]);
$c2=array('r'=>$_GET["r2"],'v'=>$_GET["v2"],'b'=>$_GET["b2"]);
//---

$im=imagecreatetruecolor($l,$h);
$blanc=imagecolorallocate($im,255,255,255);
switch ($sens)
{
    case 1 : $t=$l; break;
    case 2 : $t=$h; break;
    case 3 : $t=$l+$h; break;
}

//on dessine une ligne verticale, horizontale ou diagonale pour chaque pixel entre 0 et $t
for ($i=0;$i<$t;$i++)
{
   $r = $c1['r'] + $i*($c2['r']-$c1['r'])/$t;
   $v = $c1['v'] + $i*($c2['v']-$c1['v'])/$t;
   $b = $c1['b'] + $i*($c2['b']-$c1['b'])/$t;
   $c=imagecolorallocate($im,$r,$v,$b);
   switch ($sens)
   {
       case 1 : imageline($im,$i,0,$i,$h,$c); break;
       case 2 : imageline($im,0,$i,$l,$i,$c); break;
       case 3 : imageline($im,max(0,($i-$h)),min($i,$h),min($i,$l),max(0,($i-$l)),$c); break;
   }
}

header("Content-Type: image/png");
imagepng($im);
imagedestroy($im);?>

Conclusion

Voila, maintenant on peut aussi faire le dégradé en diagonale, et les longueur, hauteur, sens et couleurs sont en paramètres.
;o)

 

Fichier Zip

Pour les "Membres Club", vous pouvez télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !

Télécharger le zip

Historique

18 janvier 2005 09:50:14 :
Correction suite à la suggestion de didrocks.

Commentaires et avis

signaler à un administrateur
Commentaire de ceced le 07/06/2004 16:35:28

trés propre, j adore..

signaler à un administrateur
Commentaire de coockiesch le 07/06/2004 19:25:48

Simple, efficace! Bravo!

@++

R@f

signaler à un administrateur
Commentaire de mickaelpfr le 08/06/2004 13:33:15

Très propre , simple a réutiliser :)
j'aurais toutefois utilisé utilisé une fonction pour y faire appel avec la couleur de début / celle de fin / orientation :)
mais bien.

@++

signaler à un administrateur
Commentaire de defkrie le 08/06/2004 14:36:43

je mets 8/10.ct bein écrit simple et rapide.

signaler à un administrateur
Commentaire de arnal69130 le 08/06/2004 14:42:02

Merci, vous allez me faire rougir !
;o)

signaler à un administrateur
Commentaire de plopman le 08/06/2004 17:21:18

merci de ta source, ca marche niquel :o)
Bonne continuation
PLoPmaN

signaler à un administrateur
Commentaire de didrocks le 16/07/2004 12:29:19

je comprends pas pkoi ça ne fonctionne pas chez moi.
J'ai pourtant extension=php_gd2.dll de chargé avec easyphp. J'ai mis dans le rep de mon index.php ton fichier et j'ai mis dans la partie html d'index <img src="degrade.php?l=980&h=610&sens=3&r1=0&v1=0&b1=255&r2=255&v2=0&b2=0" alt="degrade" />
As-tu une idée de ce qui cloche?

signaler à un administrateur
Commentaire de didrocks le 16/07/2004 14:39:39

J'ai compris, le pb vient de là, par exemple (en fait, à chaque utilisation de tableau):
$c1=array(r=>$_GET["r1"],v=>$_GET["v1"],b=>$_GET["b1"]);
à remplacer par:
$c1=array('r'=>$_GET["r1"],'v'=>$_GET["v1"],'b'=>$_GET["b1"]);
et ainsi de suite

signaler à un administrateur
Commentaire de sabugo le 18/11/2005 21:21:27

Hello !!!

Très bon script. J'essaye de m'en inspirer pour créer un générateur de dégradé un peu plus avancé, permettant de passer une série de couleur avec un ratio pour chacune.
Seulement, je n'arrive pas à obtenir un dégradé "fluide"... dès qu'il y a plus de 2 couleurs, ça part en vrille et les couleurs centrales sont très saccadées au niveau des passages de dégradés...

Voici mon code, si quelqu'un a une idée pour avoir un meilleur visuel, ça serait sympa de m'expliquer :)



<?

$l=400;
$h=200;
$sens=1; //sens : 1->horizontal, 2->vertical, 3->diagonal

$tab = array
(
array( 'r'=>0xff, 'v'=>0x00, 'b'=>0x00, 'ratio' => 0 ),
array( 'r'=>0x00, 'v'=>0x00, 'b'=>0xff, 'ratio' => 100 ),
array( 'r'=>0x00, 'v'=>0xff, 'b'=>0x00, 'ratio' =>255 )
);
//---

$im=imagecreatetruecolor($l,$h);
$blanc=imagecolorallocate($im,255,255,255);
switch ($sens)
{
case 1 : $t=$l; break;
case 2 : $t=$h; break;
case 3 : $t=$l+$h; break;
}

//on dessine une ligne verticale, horizontale ou diagonale pour chaque pixel entre 0 et $t
$index = 0;
$percent = $t / 255 * 100;
$nCount = 0;
while( $index+1 < count( $tab ) )
{
$c1 = $tab[$index];
$c2 = $tab[$index + 1];

for( $i = $nCount; $i<$c2['ratio'] * $percent / 100; $i++ )
{
$r = $c1['r'] + $i*($c2['r']-$c1['r'])/$t;
$v = $c1['v'] + $i*($c2['v']-$c1['v'])/$t;
$b = $c1['b'] + $i*($c2['b']-$c1['b'])/$t;
$c=imagecolorallocate($im,$r,$v,$b);
switch ($sens)
{
case 1 : imageline($im,$i,0,$i,$h,$c); break;
case 2 : imageline($im,0,$i,$l,$i,$c); break;
case 3 : imageline($im,max(0,($i-$h)),min($i,$h),min($i,$l),max(0,($i-$l)),$c); break;
}
$nCount++;
}
$index++;
}


header("Content-Type: image/jpeg");
imageJpeg($im);
imagedestroy($im);?>


?>


A++

Thierry

signaler à un administrateur
Commentaire de sabugo le 18/11/2005 22:07:19

Ben nan, tout compte fait, je fais ça en Flash, c'est plus simple :)


a++

signaler à un administrateur
Commentaire de elidris le 20/05/2006 12:50:47

Trop trop génial ! merci arnal69130 , j'en revient pas tellement ça tue !!!
;)

signaler à un administrateur
Commentaire de Fredido le 13/11/2006 18:05:45

Une variante : ajouter ceci en début de script :

$couleur1=$_GET["couleur1"];
$couleur2=$_GET["couleur2"];

$r1=hexdec( substr($couleur1,0,2));
$v1=hexdec( substr($couleur1,2,2));
$b1=hexdec( substr($couleur1,4,2));

$r2=hexdec( substr($couleur2,0,2));
$v2=hexdec( substr($couleur2,2,2));
$b2=hexdec( substr($couleur2,4,2));

et vous pourrez passer couleur1 , couleur de départ, et couleur2 en couleur d'arrivée, en écriture HTML

=> degrade.php?l=980&h=610&sens=3&couleur1=000000&couleur2=FFFFFF

sinon bravo pour le script ;)

signaler à un administrateur
Commentaire de XelectroX le 27/06/2008 11:39:43 9/10

Super :)
Remplace juste "<?" par "<?php". ;)

Ajouter un commentaire



Nos sponsors

Sondage...

CalendriCode

Janvier 2009
LMMJVSD
   1234
567891011
12131415161718
19202122232425
262728293031 

Consulter la suite du CalendriCode



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel BAÏSE, Merci à Vincent pour ses précieux conseils
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés
Temps d'éxécution de la page : 0,250 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.