Page 1 sur 2

imagecreatetruecolor()

Posté : 18 sept. 2012, 11:49
par Herve_be
Bonjour,
Je voudrais dessiner un graphique en php mais le début ne fonctionne pas du tout.
Le header se trouve avant tout tag html.

Code : Tout sélectionner

header('Content-type: image/png'); $largeur=1024; $hauteur=200; $courbe=imagecreatetruecolor($largeur, $hauteur) or die ("Impossible de crée un flux d'image GD"); imagepng($courbe); imagedestroy($courbe);
Code généré

‰PNG IHDRÈù‹jIDATxœíÁÃ ùS_áUÀoaO¥‡åIEND®B`‚

Qu'est-ce que je fais mal ?

Re: imagecreatetruecolor()

Posté : 18 sept. 2012, 13:18
par Mazarini
Es tu en error_reporting(E_ALL) ?
Un simple blanc peut empêcher le header. Pour vérifier, ajoute un echo 'toto' avant le header pour voir si tu as un message.

Tu peux également récupérer le contenu dans le source html et créer un fichier .png avec pour voir le résultat par curiosité.

Re: imagecreatetruecolor()

Posté : 18 sept. 2012, 14:48
par Herve_be
Merci pour la réponse.
Lors d'un premier essai j'avais mis le header trop loin et j'avais effectivement un message disant que je ne pouvais plus modifier le header.
Maintenant je n'ai plus ce message; voici les toutes premières lignes du .php

Code : Tout sélectionner

<?php session_start(); // On démarre la session AVANT toute chose header('Content-type: image/png'); ?>
J'ai essayé de récupérer le code généré et d'en faire un fichier .png mais mon logiciel image (Paint Shop Pro) me dit que le format n'est pas valide.

Re: imagecreatetruecolor()

Posté : 18 sept. 2012, 15:37
par Mazarini
Mais qu'affiche le navigateur ? Il y a encore des messages d'erreur ?
Il vaudrait mieux que le header se trouve comme avant et que tu règles le problème des choses envoyées avant le header.

Pour info, il faut que le php ne génère que l'image et rien d'autre. Si tu génères aussi du html, il faut mettre ton code pour l'image comme src d'une balise img. Mais pour le test, affiche juste l'image.

Re: imagecreatetruecolor()

Posté : 18 sept. 2012, 15:48
par Herve_be
Mais qu'affiche le navigateur ? Il y a encore des messages d'erreur ?
Non, il n'y a plus de message d'erreur.
il faut que le php ne génère que l'image et rien d'autre. Si tu génères aussi du html, il faut mettre ton code pour l'image comme src d'une balise img. Mais pour le test, affiche juste l'image.
Bon, ça doit être ça.
J'ai mis mon code qui génère l'image et rien d'autre dans un fichier php et ça fonctionne.
Mais ce que je veux faire c'est afficher un graphique dans une page html, cette page ci en fait http://www.rudyv.be/VTT/index.php
Actuellement le graphique est une image faite avec Excel mais comme elle change chaque semaine, ce n'est pas pratique; j'essaye d'automatiser le graphique.

Peux-tu m'expliquer comment je peux mettre mon code pour l'image comme src d'une balise img ?
Pour le graphique actuel c'est bêtement

Code : Tout sélectionner

<img src="km.jpg">
Comment faire pour qu'il aille récupérer l'image générée avec

Code : Tout sélectionner

imagepng($image);
?

Re: imagecreatetruecolor()

Posté : 18 sept. 2012, 16:31
par xTG
<img src="path/vers/mon/dossier/script.php" alt="graphique" />
;)

Re: imagecreatetruecolor()

Posté : 18 sept. 2012, 16:48
par Herve_be
Merci mais c'est encore moins bien.
La page initiale est ici http://www.rudyv.be/VTT/index.php
J'essaye de remplacer le graphique par un graphique généré en php

J'ajoute en tête

Code : Tout sélectionner

header('Content-type: image/png');
Je remplace

Code : Tout sélectionner

<img src="km.jpg">
par

Code : Tout sélectionner

<img src="Graph.php" alt="graphique" />
Voici le code de "Graph.php" (pour l'instant j'essaye seulement de créer une image vide) qui est dans le même dossier que la page "index.php"

Code : Tout sélectionner

<?php $largeur=1024; $hauteur=200; $absis=80; $courbe=imagecreatetruecolor($largeur, $hauteur) or die ("Impossible de crée un flux d'image GD"); imagepng($courbe); imagedestroy($courbe); ?>
Et le résultat est là http://www.rudyv.be/VTT/indexGraph.php

Re: imagecreatetruecolor()

Posté : 18 sept. 2012, 18:42
par xTG
Le header est à mettre dans le fichier générant l'image, pas dans ton script l'affichant.

Re: imagecreatetruecolor()

Posté : 19 sept. 2012, 10:26
par Herve_be
Bonjour et merci beaucoup pour votre aide; ça fonctionne très bien.

Une dernière question : dans le fichier php j'ai une série de paramètres pour définir le graphique

Code : Tout sélectionner

$Annees=9; $Saisons=array('2004-2005','2005-2006','2006-2007','2007-2008','2008-2009','2009-2010','2010-2011','2011-2012','2012-2013'); $VTT=array(1299,834,1173,1505,1227,1329,897,1523,73); $Route=array(1579,1004,916,815,3357,2848,1103,1658,147);
Comment mettre ces paramètres dans le fichier mère et les passer au fichier qui dessine le graphique ?

Re: imagecreatetruecolor()

Posté : 19 sept. 2012, 11:30
par Mazarini
Je verrai bien une table avec comme colonnes : année, VTT et Route
Soit :
2004-2005, 1299, 1579
2005-2006, 834, 1004
...

Tu pourras alors gérer le contenu via PHPmyadmin par exemple et il te suffira de lire la table pour générer le graphique.

Par la suite tu pourras faire un programme de génération du graphique en fichier et ne faire le calcul que de temps en temps ou à la demande.

Re: imagecreatetruecolor()

Posté : 19 sept. 2012, 11:39
par Herve_be
Bonjour,
C'est effectivement une solution mais elle ne me convient pas.

Avec la solution actuelle, je dois modifier les données array() chaque semaine dans le fichier Graph.php.
Avec ta solution je devrais modifier les données chaque semaine dans la table sql.

Je dois de toute façon modifier le fichier mère (index.php) chaque semaine.
A cette occasion, je pourrais aussi modifier les données si elles sont dans le même fichier, et passer ces paramètres à Graph.php.

Re: imagecreatetruecolor()

Posté : 19 sept. 2012, 11:53
par Mazarini
Pour afficher quelque chose, il faut forcément le renseigner...
L'avantage de phpmyadmin est de pouvoir être fait facilement depuis un navigateur de n'importe ou, sans accès ftp. Du boulot par exemple^^

Tu peux également faire une page protégé par un user/password (cf .htacces et .passwd d'apache) pour faire la mise à jour en faisant juste page.php?annee=2012-2013&vtt=1234&route=5678 que tu appelleras depuis un téléphone portable.

Re: imagecreatetruecolor()

Posté : 19 sept. 2012, 12:32
par Herve_be
Peut-être mais ça ne m'intéresse pas.

Je dois modifier le fichier index.php chaque semaine, donc j'ai de toute façon besoin d'un accès ftp.
Avec ta solution je devrais en plus me connecter via phpAdmin pour modifier les données du graphiques.
Si les paramètres du graphique se trouvaient aussi dans le fichier index.php je ne devrais modifier qu'un seul fichier.

D'où ma question : comment mettre les paramètres du graphique dans le fichier index.php et les passer au fichier Graph.php qui dessine le graphique ?
En d'autres terme comment passer des paramètres à un fichier php avant d'invoquer

Code : Tout sélectionner

<img src="Graph.php" alt="graphique" />

Re: imagecreatetruecolor()

Posté : 19 sept. 2012, 13:10
par Mazarini
<img src="Graph.php?param1=X&param2=Y..." alt="graphique" />
tu peux également faire :
<img src="Graph.php?param1[]=X&param1[]=Y&param2[]=A&param2[]=B..." alt="graphique" />
Je peux te proposer :
<?PHP
$Saisons=array('2004-2005','2005-2006','2006-2007','2007-2008','2008-2009','2009-2010','2010-2011','2011-2012','2012-2013');
$VTT=array(1299,834,1173,1505,1227,1329,897,1523,73);
$Route=array(1579,1004,916,815,3357,2848,1103,1658,147);

$param = array()
for ($i=0;$i<count($Saisons);$i++) {
   $param[] = 'Saison[]='.$Saison[$i];
   $param[] = 'VTT[]='.$VTT[$i];
   $param[] = 'Route[]='.$Route[$i];
}
$url = 'Graph.php?'.implode('&',$param);
?>
Ainsi tu peux éditer facilement et utiliser $url dans le src.

Ensuite utilise $_GET['Saison's] comme array ainsi que les 2 autres. Et pour le nombre d'année, count($_GET['Saison's] )

Re: imagecreatetruecolor()

Posté : 19 sept. 2012, 13:30
par xTG
Le mieux serait quand même de faire un fichier dédié à cela qui serait inclus. Ce serait plus propre et indépendant du navigateur (longueur d'url).
Le tout étant de penser à modifier ce fichier en même temps que le index.php lors de tes mises à jours.