IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Bibliothèques et frameworks PHP Discussion :

[Graphique] Création de graphique avec GD ou artichow


Sujet :

Bibliothèques et frameworks PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Octobre 2009
    Messages
    65
    Détails du profil
    Informations forums :
    Inscription : Octobre 2009
    Messages : 65
    Par défaut [Graphique] Création de graphique avec GD ou artichow
    Bonjour, je dispose actuellement d'un serveur apache sous linux pour mon projet en entreprise . Serveur que j'ai dut faire moi meme avec mes petites mimines ... J'ai récément recompiler mon modules PHP pour apache ave la libraire GD me permettant ainsi de pouvoir faire des graphiques . ..
    Le problème :

    Avec GD ou Artichow, Pchart ou Mchart(en faite cést pareil pour tous) lorsque je crée un graphique voila ce qui s'affiche sur ma page web :

    ‰PNG  IHDRZÙ—ý™IDAT8íy$Õ}ç/¯ªÊ:»ú>¦çh†Ã0Â#.I`d@+lc…*pËj±v½²,Ë2ÆX²7t86¬Å²vƒ`k„±d$Ns-Œf˜FÌÐ3Ýsu÷ô]]WfåýöW••™••]Ý Ýí÷‰ŽŠ¬WïýÞ/³+¿õ{¿|ùa ,˜N ea>h( %,T°(Êš …BY3PÁ¢P(k*X eÍ@‹B¡¬¨`Q(”5ÃÊÆÍg$…©C¡P(8Ÿ2§Ž ÔšÔ ®C¡PÖ&ÊüüÌ‘ƒ3‡Î>Xæa¶,lز,Ã`!sчÛw\Ö¶ýÒöK/KoÙÆ°ìŠº„ÜAŽSƒšêÑRk]Š)kœ¹w¾¸ŸˆTñÌð¢Ú²‘hÛ‡/Éî¸ló-·müÔ*+!^áËuu:ËbäÚš6÷º¡5´iG‹íÝ[³iïÊÚA“¤‘ŸüøÄÿ~túà›Õ@Ë€f}Ûc]=î®íw~>½yë2ú¹Á /®òð6Õ»—•è¨e¹¤PÖ3G
    ETC

    Voici ma configuration du serveur donné par phpinfo(); pour GD :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    GD Support  enabled  
    GD Version  2.0 or higher  
    FreeType Support  enabled  
    FreeType Linkage  with freetype  
    FreeType Version  2.3.12  
    JPG Support  enabled  
    PNG Support  enabled  
    WBMP Support  enabled
    Je ne pense pas que cela vienne de ma configuration PHP avec GD . Peut être un soucis d'affichage, ou une mauvaise interprétation ? J'obtien le même problème sous firefox.

  2. #2
    Modérateur
    Avatar de grunk
    Homme Profil pro
    Lead dév - Architecte
    Inscrit en
    Août 2003
    Messages
    6 693
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Lead dév - Architecte
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2003
    Messages : 6 693
    Par défaut
    C'est juste les données binaires de ton image que tu vois affiché.
    Pour voir apparaitre le graphique tu dois utiliser un header approprié.

    par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    header("Content-type: image/png");
    Pry Framework php5 | N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  3. #3
    Membre confirmé
    Inscrit en
    Octobre 2009
    Messages
    65
    Détails du profil
    Informations forums :
    Inscription : Octobre 2009
    Messages : 65
    Par défaut
    j'utilise deja un header.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    header ("Content-type: image/png");
    que j ai remplacer par une ridirection java script :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    <head>
    <?php 
    echo '<script language="Javascript">
    <!--
    header ("Content-type: image/png");  
    // -->
    </script>';
    ?>
    </head>
    car sinon j'obtien ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Warning: Cannot modify header information - headers already sent by (output started at /home/jacobf/MyServeur/www/testgraph/index.php:4)
    Et donc au final j'obtien tourjours les données binaires de l'image .

    voici mon code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
     
    <html>
    <head>
    <?php 
    echo '<script language="Javascript">
    <!--
    header ("Content-type: image/png");  
    // -->
    </script>';
    ?>
    </head>
    <body>
    <?php
     
    $visite_par_mois[1]=1500;   
    $visite_par_mois[2]=2450;   
    $visite_par_mois[3]=800;   
    $visite_par_mois[4]=1780;   
    //ETC.....
     
    $max_visite = max($visite_par_mois);   
     
    $largeur = 550;   
    $hauteur = 300;   
     
    $im = @ImageCreate ($largeur, $hauteur) or die ("Erreur lors de la création de l'image");   
     
    $blanc = ImageColorAllocate ($im, 255, 255, 255);   
     
    $noir = ImageColorAllocate ($im, 0, 0, 0);   
    $bleu_fonce = ImageColorAllocate ($im, 75, 130, 195);   
    $bleu_clair = ImageColorAllocate ($im, 95, 160, 240);   
     
    ImageLine ($im, 20, $hauteur-40, $largeur-15, $hauteur-40, $noir);   
     
    // on affiche le numéro des 12 mois   
    for ($i=1; $i<=12; $i++) {  
       if ($i==1) {  
          ImageString ($im, 2, 42, $hauteur-38, $i, $noir);  
       }  
       else {  
          ImageString ($im, 2, ($i)*42, $hauteur-38, $i, $noir);  
       }   
    }   
     
    ImageLine ($im, 20, 30, 20, $hauteur-40, $noir);   
     
    // Définition de la variable d'environnement pour GD
    putenv('GDFONTPATH=' . realpath('.'));
    // Nom de la police à utiliser (notez l'absence de l'extension .ttf)
    $font = 'tahoma';
     
    imagettftext($im, 14, 0, $largeur-70, $hauteur-10, $noir, $font, "Mois");   
    imagettftext($im, 14, 0, 10, 20, $noir, $font, "Nb. de pages vues");   
    imagettftext($im, 14, 0, $largeur-250, 20, $noir, $font, "Statistiques pour l'année 2003");   
     
    // on parcourt les douze mois de l'année   
    for ($mois=1; $mois <= 12; $mois++) {  
       if ($visite_par_mois[$mois]!="0") {  
          // on calcule la hauteur du baton  
          $hauteurImageRectangle = ceil(((($visite_par_mois[$mois])*($hauteur-50))/$max_visite));  
          if ($mois=="1") {  
             // si le mois est janvier, on affiche notre premier baton  
             // on affiche le premier baton noir  
             ImageFilledRectangle ($im, 42, $hauteur-$hauteurImageRectangle, 42+14, $hauteur-41, $noir);  
             // on affiche le second baton, bleu foncé, qui sera un peu plus petit que le noir afin de recouvrir une partie du noir  
             ImageFilledRectangle ($im, 44, $hauteur-$hauteurImageRectangle+2, 42+12, $hauteur-41-1, $bleu_fonce);    
             // on affiche le dernier baton, bleu clair, qui sera un peu plus petit que le bleu foncé afin de recouvrir une partie du bleu foncé (on obtiendra ainsi un effet de dégradé)  
             ImageFilledRectangle ($im, 48, $hauteur-$hauteurImageRectangle+2, 42+8, $hauteur-41-1, $bleu_clair);  
          }  
          else {    
             // si le mois est different de janvier, on affiche les autres batons  
             ImageFilledRectangle ($im, ($mois)*42, $hauteur-$hauteurImageRectangle, ($mois)*42+14, $hauteur-41, $noir);  
             ImageFilledRectangle ($im, ($mois)*42+2, $hauteur-$hauteurImageRectangle+2, ($mois)*42+12, $hauteur-41-1, $bleu_fonce);  
             ImageFilledRectangle ($im, ($mois)*42+6, $hauteur-$hauteurImageRectangle+2, ($mois)*42+8, $hauteur-41-1, $bleu_clair);  
          }  
       }   
    }     
    // on dessine le tout   
    Imagepng ($im);   
    ?> 
    </body>
    </html>
    Il y a certainement quelque chose qui m'échappe

  4. #4
    Membre confirmé
    Inscrit en
    Octobre 2009
    Messages
    65
    Détails du profil
    Informations forums :
    Inscription : Octobre 2009
    Messages : 65
    Par défaut
    J'ai un semblant de réponse . J'ai donc mis mon code dans un fichier image.php .
    Par la suite j'ai mis dans index.php ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    <html>
    <head>
    </head>
    <body>
    <img src="./image.php">
    </body>
    </html>
    ce qui supprime l'affichage bianaire de l'image. Mais je n'obtien que un petit carré avec sa petite croix rouge au milieu . . . AIE CARAMBA..

  5. #5
    Modérateur
    Avatar de grunk
    Homme Profil pro
    Lead dév - Architecte
    Inscrit en
    Août 2003
    Messages
    6 693
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Lead dév - Architecte
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2003
    Messages : 6 693
    Par défaut
    Un header doit être placé avant tout affichage sur la sortie standard.
    Cela veut dire qu'il doit être situé tout en haut de ton code , ou en tout cas avant tout affichage (html, saut de ligne , espace ...).

    Tu cherches à afficher une image , les balise html n'ont pas lieu d'être dans ce cas. Avec le header , ton navigateur va recevoir une image et non pas une page avec une image dedans.

    Si tu veux afficher ton images générée dans une page html tu dois passer par une balise img du type :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <img src="mon_script_qui_genere_le_graphique.php" alt="graph" />
    Avec ton script qui retourne uniquement l'image encore une fois sans balises d'aucune sorte
    Pry Framework php5 | N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  6. #6
    Membre confirmé
    Inscrit en
    Octobre 2009
    Messages
    65
    Détails du profil
    Informations forums :
    Inscription : Octobre 2009
    Messages : 65
    Par défaut
    Mon header ce situe bien a la toute premiere ligne de mon idex.php .

    J'ai bien remis tout correctement dans index.php car je ne veux pas faire, tout du moin pour l'instant appel a une image generer dans un autre fichier.

    L'affichage binaire disparait, mais laisse place a l'icone indiquant l'impossibilite d'afficher l'image....(petit carré a croix rouge)

  7. #7
    Modérateur
    Avatar de grunk
    Homme Profil pro
    Lead dév - Architecte
    Inscrit en
    Août 2003
    Messages
    6 693
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Lead dév - Architecte
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2003
    Messages : 6 693
    Par défaut
    Citation Envoyé par ckefran9 Voir le message
    Mon header ce situe bien a la toute premiere ligne de mon idex.php .

    J'ai bien remis tout correctement dans index.php car je ne veux pas faire, tout du moin pour l'instant appel a une image generer dans un autre fichier.

    L'affichage binaire disparait, mais laisse place a l'icone indiquant l'impossibilite d'afficher l'image....(petit carré a croix rouge)
    Si ton image est généré par image.php , tu ne peux absolument rie nfaire d'autre avec ce fichier , sauf si tu enregistre le fichier sur le disque et ne souhaite pas l'afficher directement.

    La solution pour arriver à ce que tu veux faire est de ne garder que le code php qui génère l'image.
    D'y adjoindre un header approprié et d'ouvrir ce script directement depuis ton navigateur. Si tu as une image , tu peux alors ajouter ce script dans une balise image sur une autre page , ton image s'affichera.

    Dans le cas contraire, retire le header et regarde les message d'erreur retournés par ton code.

    En supposant que ton code précédent est bon :

    image.php
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
     
    header("Content-type: image/png");
    $visite_par_mois[1]=1500;   
    $visite_par_mois[2]=2450;   
    $visite_par_mois[3]=800;   
    $visite_par_mois[4]=1780;   
    //ETC.....
     
    $max_visite = max($visite_par_mois);   
     
    $largeur = 550;   
    $hauteur = 300;   
     
    $im = @ImageCreate ($largeur, $hauteur) or die ("Erreur lors de la création de l'image");   
     
    $blanc = ImageColorAllocate ($im, 255, 255, 255);   
     
    $noir = ImageColorAllocate ($im, 0, 0, 0);   
    $bleu_fonce = ImageColorAllocate ($im, 75, 130, 195);   
    $bleu_clair = ImageColorAllocate ($im, 95, 160, 240);   
     
    ImageLine ($im, 20, $hauteur-40, $largeur-15, $hauteur-40, $noir);   
     
    // on affiche le numéro des 12 mois   
    for ($i=1; $i<=12; $i++) {  
       if ($i==1) {  
          ImageString ($im, 2, 42, $hauteur-38, $i, $noir);  
       }  
       else {  
          ImageString ($im, 2, ($i)*42, $hauteur-38, $i, $noir);  
       }   
    }   
     
    ImageLine ($im, 20, 30, 20, $hauteur-40, $noir);   
     
    // Définition de la variable d'environnement pour GD
    putenv('GDFONTPATH=' . realpath('.'));
    // Nom de la police à utiliser (notez l'absence de l'extension .ttf)
    $font = 'tahoma';
     
    imagettftext($im, 14, 0, $largeur-70, $hauteur-10, $noir, $font, "Mois");   
    imagettftext($im, 14, 0, 10, 20, $noir, $font, "Nb. de pages vues");   
    imagettftext($im, 14, 0, $largeur-250, 20, $noir, $font, "Statistiques pour l'année 2003");   
     
    // on parcourt les douze mois de l'année   
    for ($mois=1; $mois <= 12; $mois++) {  
       if ($visite_par_mois[$mois]!="0") {  
          // on calcule la hauteur du baton  
          $hauteurImageRectangle = ceil(((($visite_par_mois[$mois])*($hauteur-50))/$max_visite));  
          if ($mois=="1") {  
             // si le mois est janvier, on affiche notre premier baton  
             // on affiche le premier baton noir  
             ImageFilledRectangle ($im, 42, $hauteur-$hauteurImageRectangle, 42+14, $hauteur-41, $noir);  
             // on affiche le second baton, bleu foncé, qui sera un peu plus petit que le noir afin de recouvrir une partie du noir  
             ImageFilledRectangle ($im, 44, $hauteur-$hauteurImageRectangle+2, 42+12, $hauteur-41-1, $bleu_fonce);    
             // on affiche le dernier baton, bleu clair, qui sera un peu plus petit que le bleu foncé afin de recouvrir une partie du bleu foncé (on obtiendra ainsi un effet de dégradé)  
             ImageFilledRectangle ($im, 48, $hauteur-$hauteurImageRectangle+2, 42+8, $hauteur-41-1, $bleu_clair);  
          }  
          else {    
             // si le mois est different de janvier, on affiche les autres batons  
             ImageFilledRectangle ($im, ($mois)*42, $hauteur-$hauteurImageRectangle, ($mois)*42+14, $hauteur-41, $noir);  
             ImageFilledRectangle ($im, ($mois)*42+2, $hauteur-$hauteurImageRectangle+2, ($mois)*42+12, $hauteur-41-1, $bleu_fonce);  
             ImageFilledRectangle ($im, ($mois)*42+6, $hauteur-$hauteurImageRectangle+2, ($mois)*42+8, $hauteur-41-1, $bleu_clair);  
          }  
       }   
    }     
    // on dessine le tout   
    Imagepng ($im);
    Index.php
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    //code
    ?>
    <img src="image.php" alt="graph" />
    <?php
    //code
    Pry Framework php5 | N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

Discussions similaires

  1. probléme lors de la création de BD avec l'assistant graphique
    Par sajedose dans le forum Administration
    Réponses: 1
    Dernier message: 31/03/2008, 13h34
  2. [Artichow] Création de graphique de type pyramide des âges
    Par Nibor dans le forum Bibliothèques et frameworks
    Réponses: 3
    Dernier message: 04/12/2007, 22h13
  3. [Graphique] Création de graphiques
    Par gailup dans le forum Graphisme
    Réponses: 5
    Dernier message: 28/03/2007, 23h00
  4. Réponses: 2
    Dernier message: 16/02/2007, 16h34

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo