imagecreatetruecolor()

Eléphant du PHP | 256 Messages

18 sept. 2012, 11:49

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 ?

ViPHP
ViPHP | 2577 Messages

18 sept. 2012, 13:18

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é.

Eléphant du PHP | 256 Messages

18 sept. 2012, 14:48

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.

ViPHP
ViPHP | 2577 Messages

18 sept. 2012, 15:37

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.

Eléphant du PHP | 256 Messages

18 sept. 2012, 15:48

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);
?

ViPHP
xTG
ViPHP | 7331 Messages

18 sept. 2012, 16:31

<img src="path/vers/mon/dossier/script.php" alt="graphique" />
;)

Eléphant du PHP | 256 Messages

18 sept. 2012, 16:48

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

ViPHP
xTG
ViPHP | 7331 Messages

18 sept. 2012, 18:42

Le header est à mettre dans le fichier générant l'image, pas dans ton script l'affichant.

Eléphant du PHP | 256 Messages

19 sept. 2012, 10:26

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 ?

ViPHP
ViPHP | 2577 Messages

19 sept. 2012, 11:30

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.

Eléphant du PHP | 256 Messages

19 sept. 2012, 11:39

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.

ViPHP
ViPHP | 2577 Messages

19 sept. 2012, 11:53

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.

Eléphant du PHP | 256 Messages

19 sept. 2012, 12:32

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" />

ViPHP
ViPHP | 2577 Messages

19 sept. 2012, 13:10

<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] )

ViPHP
xTG
ViPHP | 7331 Messages

19 sept. 2012, 13:30

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.