Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

libraire GD et couleur de rectangles

1 réponse
Avatar
apolloj
Bonjour,

En fait je représente des serveurs sur une baie et certains sont
virtuels donc au lieu de les représenter en HORIZONTAL je les mets en
VERTICAL sur la hauteur d'un serveur en U.

Le dessin est visible à http://picasaweb.google.com/apolojnet/GD_Rectangle#5431403420003452818.

J'ai un pb de couleur lorsque je dessine des rectangles (représentant
des serveurs VIRTUELS) cote-à-cote en PHP en utilisant :

Appel du script avec les paramètres pour faire le dessin :

<div style="position:absolute; top:267 ; left:39 ; z-index: 2;">
<a href="fiche.php?h=Test1">
<img src="images/serveur.php?v=1&h=Test1&p=ACQUI
PIVOT&u=2&g=4&d3&c=orange" alt="Bull express5800_120" style"z-
index: 2" border=0> </a></div>

<div style="position:absolute; top:267 ; left:189 ; z-index: 2;">
<a href="fiche.php?h=Test2">
<img src="images/serveur.php?v=1&h=Test2&p=ACQUI
PIVOT&u=2&g5&d03&c=gris" alt="Bull express5800_120" style"z-
index: 2" border=0> </a></div>


Les rectangles au lieu d'etre GRIS sortent en NOIR.
Voilà le bout de code (à proprement parler) qui fait le dessin
(librairie GD 2.0.36)

Code serveur.php

<?php
// Variables
$haut = 20;
$bas = 670;
$un_u = 15;
$gauche=3;
$droite=303;
//$indentation = $gauche + 3;
$u = $_GET['u'];
$hostname = $_GET['h'];
$projet = $_GET['p'];
$couleur = $_GET['c'];
$v = $_GET['v'];
$droite_v = $_GET['d']; $gauche_v = $_GET['g'];
$hauteur = $un_u * $u;

header ("Content-type: image/jpeg");
$largeur_v=($droite_v-$gauche_v) ;
//$image = imagecreate($droite,$hauteur);
$image = imagecreatetruecolor($largeur_v,$hauteur);

$gris = imagecolorallocate($image,192,192,192);
$noir = imagecolorallocate($image,0,0,1);
$rouge = imagecolorallocate($image,255,10,10) ;
$violet = imagecolorallocate($image,133,145,200);
$blanc = imagecolorallocate($image,255,255,255);
$orange= imagecolorallocate($image,255,165,0) ;
$col_string=$noir;

imagesetthickness ($image, 1);
if (!isset($couleur)) { $couleur="gris";}
if ($v==1) {$col_string=$violet; }

ImageFilledRectangle ($image, $gauche_v, 0, $droite_v, $hauteur,$
{$couleur});
ImageRectangle ($image, $gauche_v, 0, $droite_v, $hauteur, $violet);

if ($v!=1) {
$aligne_bas = $hauteur - $un_u;
imagestring($image, 3, 20, $aligne_bas, "$hostname", $col_string);
}
else
{
$aligne_bas = $un_u;
imagestring($image, 3, 20, $aligne_bas, "$hostname", $col_string);
//$milieu=floor(($droite_v+$gauche_v)/2);
//imagestringup($image, 1, $milieu, $aligne_bas, "$hostname",
$col_string);
}
imagestring($image, 3, 120, $aligne_bas, "$projet", $col_string);
imagejpeg($image);
//imagepng($image,'./'.$hostname.'.png');
imagedestroy($image);
?>

1 réponse

Avatar
Olivier Miakinen
Bonjour,

Le 27/01/2010 21:07, apolloj a écrit :

[...]

<div style="position:absolute; top:267 ; left:39 ; z-index: 2;">
<a href="fiche.php?h=Test1">
<img src="images/serveur.php?v=1&h=Test1&p¬QUI
PIVOT&u=2&g=4&d3&c=orange" alt="Bull express5800_120" style"z-
index: 2" border=0> </a></div>



Attention : le caractère « & » est réservé. Pour le transmettre dans une
URL, tu dois l'écrire « &amp; ».

Attention : le caractère de contrôle de code hexa 15 dans « d3 » n'est
pas autorisé dans une URL. Tu dois le coder autrement.

Si ça se trouve, ton problème vient de l'un des bugs ci-dessus.

Ok pour « c=orange ».

<div style="position:absolute; top:267 ; left:189 ; z-index: 2;">
<a href="fiche.php?h=Test2">
<img src="images/serveur.php?v=1&h=Test2&p¬QUI
PIVOT&u=2&g5&d03&c=gris" alt="Bull express5800_120" style"z-
index: 2" border=0> </a></div>



Idem pour le « & », et pour le code hexa 15 dans « g5 ».

Ok pour « c=gris ».

[...]

$u = $_GET['u'];
$hostname = $_GET['h'];
$projet = $_GET['p'];
$couleur = $_GET['c'];
$v = $_GET['v'];
$droite_v = $_GET['d']; $gauche_v = $_GET['g'];



Tu ne fais pas plus de contrôles que ça sur les paramètres ? Hum... ce
n'est pas très sécurisé, tout ça...

[...]

if (!isset($couleur)) { $couleur="gris";}



C'est très moyen... $couleur peut valoir n'importe quoi. Par exemple, si
un utilisateur malveillant appelle ton script avec « c=image », c'est la
variable $image que tu passeras au ImageFilledRectangle qui suit au lieu
d'une ressource couleur ! Et si jamais tu avais un mot de passe dans une
variable $password, il peut essayer de passer 'c=password' pour voir si
par hasard ça ne retournerait pas une erreur du style « la variable
$MONMOTDEPASSE n'existe pas, et ainsi afficher ton mot de passe...

Pour ma part, je ferais plutôt :
switch($_REQUEST['c']) {
case 'noir': $couleur = $noir; break;
case 'rouge': $couleur = $rouge; break;
case 'blanc': $couleur = $blanc; break;
...
default: $couleur = $gris;
}

... et bien sûr c'est $couleur plutôt que $$couleur que je passerais à
la fonction ImageFilledRectangle.


Quoi qu'il en soit, commence donc par corriger les URL lors de l'appel,
si ça se trouve ça suffira à résoudre le problème de couleur. Tu peux
aussi, pour débuguer, supprimer le header Content-Type et afficher les
paramètres qui sont récupérés.

Cordialement,
--
Olivier Miakinen