OVH Cloud OVH Cloud

GD, creation d'un degrade suvant =?windows-1252?Q?un_tableau_de_couleurs?

1 réponse
Avatar
Titouille
Bonjour à tous !!!


Je cherche à créer une image en dégradé à partir d'un tableau de couleurs.

J'utilise le script suivant :

<?


$l=100;
$h=100;

$sens=1; //sens : 1->horizontal, 2->vertical


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

$im=imagecreatetruecolor($l,$h);
$blanc=imagecolorallocate($im,255,255,255);
$t = 0;
switch ($sens)
{
case 1 : $t=$l; break;
case 2 : $t=$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];

$max = round( $c2['ratio'] * $percent / 100 );
//echo "$nCount / $max<br />";
$j = 0;
for( $i = $nCount; $i<$max; $i++ )
{
$r = round( $c1['r'] + $j*($c2['r']-$c1['r'])/($max-$nCount) );
$v = round( $c1['v'] + $j*($c2['v']-$c1['v'])/($max-$nCount) );
$b = round( $c1['b'] + $j*($c2['b']-$c1['b'])/($max-$nCount) );
$c=imagecolorallocate($im,$r,$v,$b);

if( $r > 0xffffff ) $r = 0xffffff;
if( $v > 0xffffff ) $v = 0xffffff;
if( $b > 0xffffff ) $b = 0xffffff;


//echo "$i :: im:$im, x1:$i, y1:0, x2:$i, y2:$h, color:$c<br />";

switch ($sens)
{
case 1 : imageline($im,$i,0,$i,$h-1,$c); break;
case 2 : imageline($im,0,$i,$l-1,$i,$c); break;
}
$j++;
}
$nCount = $i;
$index++;
}





header("Content-Type: image/png");
imagePng($im, 'test2.png');
imagedestroy($im);

?>



Mon problème, c'est que mon image est sauvée correctement, je peux la
regarder dans l'explorateur windows, la charger dans le browser en
faisant un glisser-déplacer, tout va bien.

Mais par contre, le processus GD me retourne un message d'erreur du genre :

L'image "http://127.0.0.1/samples/test/testGD.php" ne peut être
affichée, car elle contient des erreurs.


J'ai tenté pas mal de choses, mais je n'arrive pas à obtenir une image
correcte, malheureusement :(( Pourtant, à première vue, ça semble assez
correct, mais nan...

Alors si quelqu'un a une suggestion, un ptit coup de main serai le
bienvenu :)


D'avance merci pour d'éventuelles réponses.


Cordialement,


Thierry

1 réponse

Avatar
Xavier Garreau
L'image "http://127.0.0.1/samples/test/testGD.php" ne peut être
affichée, car elle contient des erreurs.


J'ai tenté pas mal de choses, mais je n'arrive pas à obtenir une image
correcte, malheureusement :(( Pourtant, à première vue, ça semble assez
correct, mais nan...

Alors si quelqu'un a une suggestion, un ptit coup de main serai le
bienvenu :)


Tu as bien entendu pensé à transformer
imagePng($im, 'test2.png');
en
imagePng($im);

Avant d'essayer d'y accéder via l'url du script php ?

Sinon, c'est clair, ton problème vient de là puisque le contenu de l'image n'est
alors pas envoyer au navigateur mais dans un fichier.

a+
--
Xavier Garreau
http://www.xgarreau.org/