Voilà pour notre site encyclopédique une carte avait commencé à être développée.
Le problème c’est que la personne qui a développé ca n’est plus présente, et le prototype est resté tel quel, sans pouvoir passer en production ce qui est dommage.
Maintenant que je commences à pratiquer un peu php, et mysql, je me sens plus à même de tenter d’améliorer ce truc, mais une partie est encore en dehors de mes compétences… d’où ma demande d’aide
Le principe est simple : génération d’une image avec des points de couleurs (suivant le type de planète). Ensuite sur une page html classique on affiche cette image, et on chope dans notre base de données les informations qui vont bien pour générer un area et faire des liens qui permettent de cliquer les planètes sur la carte.
Voilà la partie qui, je pense, sert à créer l’image :
<?
header("content-Type: image/png");
include("global.inc.php");
$image = imagecreate(700,500); // create image
$noir = imagecolorallocate($image,0,0,0); // couleur du fond
$vert = imagecolorallocate($image, 0, 255, 0); // couleur vert
$rouge = imageColorAllocate($image, 255, 0, 0);
$blanc = imageColorAllocate($image, 255, 255, 255);
$gris1 = imageColorAllocate($image, 50, 50, 50);
$im = imagecreatefrompng("Planete.png");
ImageLine ($image, 350, 0, 350, 500, $gris1);
ImageLine ($image, 0, 250, 700, 250, $gris1);
$w = imagecolorallocate ($im, 255, 255, 255);
$red = imagecolorallocate ($im, 255, 0, 0);
/* Draw a dashed line, 5 red pixels, 5 white pixels */
$style = array($gris1,$gris1,$gris1,$gris1,$gris1,$noir,$noir,$noir,$noir,$noir);
imagesetstyle ($image, $style);
imageline($image, 175, 0, 175, 500, IMG_COLOR_STYLED);
imageline($image, 525, 0, 525, 500, IMG_COLOR_STYLED);
imageline ($image, 0, 125, 700, 125, IMG_COLOR_STYLED);
imageline ($image, 0, 375, 700, 375, IMG_COLOR_STYLED);
mysql_connect($host, $user, $passwd) || UhOh("Can't Connect to Database: ".mysql_error());
$result = mysql_db_query($database, "SELECT * FROM encyclopedie_carte");
while ($row = mysql_fetch_object($result)){
$Id = $row->Id;
$Nom_Planete = $row->Nom_Planete;
$Coord_X = $row->Coord_X;
$Coord_Y = $row->Coord_Y;
$Aff_Nom = $row->Aff_Nom;
$Couleur = $row->Couleur;
$Info = $row->Info;
switch ($Couleur) {
case "J":
$Im_planete=0;
break;
case "V":
$Im_planete=9;
break;
case "B":
$Im_planete=18;
break;
case "R":
$Im_planete=27;
break;
case "G":
$Im_planete=36;
break;
}
ImageCopy($image, $im, $Coord_X, $Coord_Y, $Im_planete, 0, 9, 9);
$font_size = 1;
/* Calcule la longueur du texte en pixels */
$font_width = strlen($Nom_Planete) * ImageFontWidth($font_size);
/* Calcule la hauteur du texte en pixels */
$font_height = ImageFontHeight($font_size);
switch ($Aff_Nom) {
case "H":
$Plan_Coord_x = $Coord_X +3 - ($font_height/2);
$Plan_Coord_y = $Coord_y +10 + $font_height;
break;
Case "B":
$Plan_Coord_x = $Coord_X +3 - ($font_width/2);
$Plan_Coord_y = $Coord_y - 10 - $font_height;
break;
Case "G":
$Plan_Coord_x = $Coord_X - 3 - $font_width;
$Plan_Coord_y = $Coord_Y +1;
break;
Case "D":
$Plan_Coord_x = $Coord_X + 11;
$Plan_Coord_y = $Coord_Y +1;
break;
Default:
$Plan_Coord_x = $Coord_X + 11;
$Plan_Coord_y = $Coord_Y +1;
}
ImageString ($image, $font_size, $Plan_Coord_x, $Plan_Coord_y, $Nom_Planete, $blanc);
}
ImageString($image, $font_size, 537, 491, "http:/www.archives-alliance.com", $blanc);
imagepng($image, "carte.png");
?>
Ensuite un autre script génère les area… celui là ne pose à priori pas de soucis.
Je ne capte pas trop ce que fais GD, il nous manque deux fonctionnalités ici :
- pouvoir placer le nom d’une planète au dessus, au dessous, sur les côtés… par rapport au point de couleur. C’est la variable affich_nom si j’arrive à bien capter le script.
- pouvoir zoomer… mais de façon simple je pense, c’est à dire refaire l’image, et diviser les coordonnées pour recalculer le tout… je pense que c’est le plus simple… encore que je sois pas bien certain de comment le faire
Ma grosse interrogation porte donc sur comment pouvoir mettre mon texte autour du point de couleur.
Un grand merci par avance, c’est un script qui traine sans réelle utilité depuis très très longtemps, et c’est vraiment dommage