Page 1 sur 2

Génération d'image

Posté : 01 août 2012, 22:32
par leo45vl
Bonjour,
J'ai fait un script de génération d'image dynamique et il ne marche pas...
Je n'ai aucune idéé de se qui va pas^^
<?php session_start();header ("Content-type: image/png"); 
 ?>

<?php  
$id = $_GET['id'];
require "./core.php";
require "./minequery.class.php";
  $sql="SELECT * FROM server WHERE id=$id";
  $req = mysql_query($sql) or die('Erreur SQL! <br/>'.$sql.'<br/>'.mysql_error());
			  
if (empty($data{'port'})) {
  $finalport = 25565;
}

if (isset($data{'port'})) {
  $finalport = $data{'port'};

}
$Server = new MinecraftStatus(''.$data{'ip'}.'',''.$finalport.'' );
$joueur = $Server->CurPlayers;
$player2 =$Server->MaxPlayers;



$image = imagecreatefrompng("back.png");
$blanc = imagecolorallocate($image, 225, 225, 225);
$jaune = imagecolorallocate($image, 225, 225, 0);

imagestring($image, 20, 60, 15, $data{'nom'}, $jaune);
imagestring($image, 20, 60, 38, "Joueur en ligne: ", $blanc);
imagestring($image, 20, 205, 38, $joueur, $blanc);

imagepng($image); 
?>
Merci beaucoup!,
William

Re: Génération d'image

Posté : 02 août 2012, 00:29
par Ryle
Et on peut éventuellement savoir ce que ça fait ? ce que ça devrait faire ? un message d'erreur ?
Si tu commentes le header, as-tu vérifié que tes variables retournent bien les résultats attendus ?

Re: Génération d'image

Posté : 02 août 2012, 04:58
par leo45vl
Salut,


require "./core.php"; Core c'est pour les adresse de connexion a la bdd.
require "./minequery.class.php"; C'est pour récupérer des informations sur un serveur MineCraft

Le but est de générer une image qui a le nombre de joueur connecté(ex: 17/100)
Et le nom du serveur.

J'ai tester mon script de génération d'image avec des variables dans les liens, sa marche mais quand je met tout sa en final sa donne sa: http://www.mineserver.ze.cx/statut/statut.php?id=162 qui n'est pas une très belle image^^


Merci,
William

Re: Génération d'image

Posté : 02 août 2012, 11:00
par Ryle
Ben ça dépend si tu aimes les croix rouges ou pas ;)

Met en commentaire ta ligne header ("Content-type: image/png");
Ton code ne fonctionnera plus, mais quand tu appelleras l'image via le navigateur, ceci aura pour effet de te montrer les éventuels messages d'erreurs générés par php au lieu de mettre une croix rouge.

Ca sera plus facile pour les résoudre (genre s'il te dit que la librairie gd n'est pas active, qu'il ne trouve pas le fichier, etc. c'est quand même plus facile à résoudre que quand tu ne sais pas ce qui ne va pas).

Et une fois qu'il n'y aura plus d'erreur ou d'avertissement et que tu auras une chaine de texte incompréhensible, tu pourras remettre ton header et vérifier que l'image correspond bien à ce que tu attends :)

Re: Génération d'image

Posté : 02 août 2012, 21:15
par leo45vl
J'ai fait ce que tu ma dit,
il n'a aucune erreur et sa me donne sa:

Code : Tout sélectionner

‰PNG IHDR@@ä…9IYIDATxœíݽnÚPÆñLjfà ºFªš¹À[àš1í½´×P±u©TuÈ ‘¡C” ±&ªNw8Ä=õWlð±yñÿ·ÄûÅò“÷“(Žc=‹¢HŽ•ŸVgÐI1t\ïN§ ŒË©ß‡éÀ€a»E/½°b6›é¹ÓÃ†EOÌçó6ëPb<'Ûn¾ìÖÃt`À°œLK¥ß‡:0`#À€a0Œ†`À0F€Ã0`#À€a0Œ†`À0F€Ã0`XáßÄ:ÜrµJ¶ßœŸ‡;Ð[t`À° ØõÞÁ$é›$-¯W¢M£†\ëâ³$]¼—¤kþï!Ð<:0`XìÖºËèJÒW]IúÀê€p üé㥤/?î$éO¸ãýE؁ƒ¤³³3IR\þÅö@؁G£‘¤ív+Iâ}` yt`À°€x½^KÚl6’¤WáôVÈ¥ïææ&ÙžL&Õq’S‘{ܳ=?E')àúöáéöá)Š¢( µžL&\”硟lw`TD¼OUÀ¿{ûZÒÏå¯p‡(’;µÎN#SÔ•ÚH <¤Âòùp]E{ókHŽ›ûºJf+dºÞ¦¼\@îJ]¦ Žò¿²ÖÀò!.EµŠ¯RgI µÊx±øÔ‚ àÅýãâþq³Ù<߈nCêÛÅì7*á|±ó¼x¬½Ë8œ_|nu‹Gh¬ÿi3*¦TyñD·Mü}ñ[’4 ±s7ÁkvŸm^y_ån‰»ßûp„á5p•IÿlîS¹£Ü¶?¶Á¥]ɱڔZWÌd•â;y9½µ{‡v:&ÍçóŽŠ©§è© VeÙQ©ð§.;`ѨÔö(Þ?VvoÕ÷_ô’³Y*z½Õ˨r¢*–ZÆãq²=›Íd:À8Ä!ß,êîMɘ›X=•]«¡ÔÝ6àþ"i'ÀðM,0,g íÊÜÊŽ‡ûÊGÆq,ÉýÊ®ÿfRQâ:0`Xä:ðî“Lpl܏p¸äҁÃþëÀ»‡‚ý +‡ó3Kû¥žœ *ÀIEND®B`‚

Re: Génération d'image

Posté : 03 août 2012, 06:55
par xTG
Supprimes les espaces et retour à la ligne entre les ?> et <? Car c'est envoyé aussi et donc c'est rajouté à l'image ;)

Re: Génération d'image

Posté : 04 août 2012, 04:50
par leo45vl
J'ai essayer de tout supprimer les espaces.
Mais sa ne marche pas.
Quel truc il faut supprimer?

Re: Génération d'image

Posté : 04 août 2012, 09:18
par xTG
Montres nous ton code modifié.

Re: Génération d'image

Posté : 05 août 2012, 05:07
par leo45vl
Voila:
<?php
header ("Content-type: image/png");
?>
<?php
$id = $_GET['id'];
require "./core.php";
require "./minequery.class.php";
  $sql="SELECT * FROM server WHERE id=$id";
  $req = mysql_query($sql) or die('Erreur SQL! <br/>'.$sql.'<br/>'.mysql_error());
if (empty($data{'port'})) {
  $finalport = 25565;
}
if (isset($data{'port'})) {
  $finalport = $data{'port'};
}
$Server = new MinecraftStatus(''.$data{'ip'}.'',''.$finalport.'' );
$joueur = $Server->CurPlayers;
$player2 =$Server->MaxPlayers;
?>
<?php
$image = imagecreatefrompng("back.png");
$blanc = imagecolorallocate($image, 225, 225, 225);
$jaune = imagecolorallocate($image, 225, 225, 0);
imagestring($image, 20, 60, 15, $data{'nom'}, $jaune);
imagestring($image, 20, 60, 38, "Joueur en ligne:", $blanc);
imagestring($image, 20, 205, 38, $joueur, $blanc);
imagepng($image);

Re: Génération d'image

Posté : 05 août 2012, 05:07
par leo45vl
Voila:
<?php
header ("Content-type: image/png");
?>
<?php
$id = $_GET['id'];
require "./core.php";
require "./minequery.class.php";
  $sql="SELECT * FROM server WHERE id=$id";
  $req = mysql_query($sql) or die('Erreur SQL! <br/>'.$sql.'<br/>'.mysql_error());
if (empty($data{'port'})) {
  $finalport = 25565;
}
if (isset($data{'port'})) {
  $finalport = $data{'port'};
}
$Server = new MinecraftStatus(''.$data{'ip'}.'',''.$finalport.'' );
$joueur = $Server->CurPlayers;
$player2 =$Server->MaxPlayers;
?>
<?php
$image = imagecreatefrompng("back.png");
$blanc = imagecolorallocate($image, 225, 225, 225);
$jaune = imagecolorallocate($image, 225, 225, 0);
imagestring($image, 20, 60, 15, $data{'nom'}, $jaune);
imagestring($image, 20, 60, 38, "Joueur en ligne:", $blanc);
imagestring($image, 20, 205, 38, $joueur, $blanc);
imagepng($image);

Re: Génération d'image

Posté : 05 août 2012, 09:54
par Ryle
Tu as encore un retour à la ligne entre ?> et <?php ... celui-ci est donc envoyé également au navigateur qui du coup ne sait plus interpréter l'image.

Il faut donc absolument coller les deux balises
<?php
header ("Content-type: image/png");
?><?php
$id = $_GET['id'];
...
Soit encore mieux, ne pas les fermer à cet endroit, puisque cela n'apporte rien :)
<?php
header ("Content-type: image/png");

$id = $_GET['id'];
...

Re: Génération d'image

Posté : 05 août 2012, 17:52
par leo45vl
Voila,
Il n'a en plus et sa marche pas^^ soit je suis aveule ou soit...
header ("Content-type: image/png");
$id = $_GET['id'];
require "./core.php";
require "./minequery.class.php";
  $sql="SELECT * FROM server WHERE id=$id";
  $req = mysql_query($sql) or die('Erreur SQL! <br/>'.$sql.'<br/>'.mysql_error());
if (empty($data{'port'})) {
  $finalport = 25565;
}
if (isset($data{'port'})) {
  $finalport = $data{'port'};
}
$Server = new MinecraftStatus(''.$data{'ip'}.'',''.$finalport.'' );
$joueur = $Server->CurPlayers;
$player2 =$Server->MaxPlayers;
$image = imagecreatefrompng("back.png");
$blanc = imagecolorallocate($image, 225, 225, 225);
$jaune = imagecolorallocate($image, 225, 225, 0);
imagestring($image, 20, 60, 15, $data{'nom'}, $jaune);
imagestring($image, 20, 60, 38, "Joueur en ligne:", $blanc);
imagestring($image, 20, 205, 38, $joueur, $blanc);
imagepng($image);
?>

Re: Génération d'image

Posté : 05 août 2012, 18:06
par Ryle
Euh... y a plus non plus de "<?php" au début du fichier dans ton dernier code... c'est une erreur de copier coller ? ou c'est une rage sanguinaire qui t'a poussé à la suppression sauvage et barbare de toutes les balises php ?

En supposant que ce soit le premier cas, que se passe-t-il si tu commence simplement par générer et afficher ton image back.png toute seule ? (en gros tu fais le imagecreatefrompng puis juste après le imagepng).
Si ça fonctionne tu rajoutes les autres actions une par une et tu regardes laquelle fait planter. Et si ça fonctionne pas.. euh.. faudra vérifier ton image :)

Re: Génération d'image

Posté : 05 août 2012, 19:29
par leo45vl
Non c'est une erreur de copier/coller^^

Ha non!!
C'est sa qui bug:

require "./core.php";
require "./minequery.class.php";

Re: Génération d'image

Posté : 05 août 2012, 21:12
par Ryle
De la même manière, que pour ton script principal, il ne faut rien envoyer d'autre au navigateur que l'image, donc ni espace, ni retour à la ligne, ni quoi que ce soit qui serait placé en dehors des balises <?php et ?>

Il te faut donc vérifier que tes scripts core.php et minequery.class.php commencent tous deux par un <?php dès la première ligne (sans espace, sans ligne vide, ... ou autre avant). Qu'il n'y a pas de "trou" comme dans ton script précédent (du code entre un ?> et un <?php). Qu'ils ne font ni echo, ni print, ni chépakoi qui ajouterai des choses dans l'image que tu essayes de générer :)