Problème d'affichage d'image avec PHP et GD

marc311 Messages postés 1 Statut Membre -  
hicham2609 Messages postés 21 Statut Membre -
Bonjour,

Lorsque je lance un script PHP devant créer une image (avec GD) j'obtiens systématiquement le message suivant :

"L'image ne peut-être affichée car elle contient des erreurs"

Lorsque je visualise la config PHP, GD est bien installé

Comment corriger ce dysfonctionnement ?
Merci

11 réponses

  1. TFlorian
     
    Bonjour a tous,
    j'ai eu le même problème et j'ai compris d'où il venais j'en fait donc profiter tout le monde...

    En fait lorsque on fait une image en PHP le fichier ne doit RIEN contenir d'autre que l'image ainsi si vous mettez le code suivant

    <?php
        $png = imagecreatetruecolor(800, 600);
        imagesavealpha($png, true);
    
        $trans_colour = imagecolorallocatealpha($png, 0, 0, 0, 127);
        imagefill($png, 0, 0, $trans_colour);
       
        $Yellow = imagecolorallocate($png, 255, 255, 0);
        imagefilledellipse($png, 650, 150, 200, 200, $Yellow );
       
        header("Content-type: image/png");
        imagepng($png);
        imagedestroy($png);
    ?>
    

    dans un fichier nommé ImageMaker.php

    Attention : pas de saut de ligne ni avant ni après les balises PHP !

    Après pour exploiter cette image voici un exemple : "Open the picture.php"
    <img src="ImageMaker.php" border = 5 width='800' heigth="600">

    Dans ce fichier c'est ce que vous voulez .. c'est pas critique ...

    Si tout s'est bien passé vous devriez avoir une image avec un disque jaune en haut à droite (code initial du disque https://www.php.net/manual/fr/function.imagecreatetruecolor.php
    14
  2. val3512 Messages postés 91 Statut Membre 38
     
    faut que tu mettent ce code pour qu'il reconnaisse le format :

    header ("Content-type: image/jpeg");
    header ("Content-type: image/png");
    6
  3. boubou
     
    Change l'encodage du fchier place le en ANSI et la sa tourne Php est con desfois.
    6
    1. Toutkool
       
      Merciiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii voici la réponse qui m'a aidé sur le même problème.
      0
    2. marcd567 Messages postés 2 Statut Membre
       
      dans mon cas:
      certains fichiers fonctionnent et d'autres identiques mais juste renommés un peu différemment (avec la même extension pourtant genre .php )ne fonctionnent pas du tout...c'est ahurissant
      quelqu'un aurait la solution?
      0
    3. homo_geekus_webi Messages postés 1 Statut Membre
       
      MERCI boubou !! je savais que c'était bête comme problème mais bizarrement ce n'est pas précisé dans les tutos!!
      0
    4. 0uhman Messages postés 1 Statut Membre
       
      Oh bon sang, j'en ai les larmes aux yeux... Je suis sur ce problème depuis des heures... Merci Boubou !
      0
    5. Atara
       
      Merciiiiiiiiiiiiiii Boubou depuis 2 jours je n'avance pas à cause de ce problême.
      0
  4. nassdak
     
    Tu dois mettre ce code avant toute chose

    header ("Content-type: image/jpeg"); // pour une image jpg
    header ("Content-type: image/png");//pour une iamge png
    ...etc...
    
    4
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. JuJu] Messages postés 33 Statut Membre 7
     
    Si tu as crée ton image sur une page à part comme :
    image.php
    et que tu souhaite l'appeler sur une autre page n'utilise pas la fonction "include" ou je ne sais quoi.
    Utilises la balise <img src="image.php" alt="image"/>

    J'ai eu le même souci que toi, et je l'ai résolu de cette manière !

    A plus !
    4
  7. Maelztrom
     
    LOL si vous avez un espace AVANT le balise <?php ca ne fonctionnera pas. Pour moi c'est comme ca si j'enlève cette espace l'image s'affiche. Donc le code doit commencer à la ligne 1.
    3
  8. Duche
     
    J'ai le même problème.
    Même en mettant uniquement

    <?php
    header("Content-type: image/png"); //la ligne qui change tout !
    $x = 50; //largeur de mon image en PIXELS uniquement !
    $y = 100; //hauteur de mon image en PIXELS uniquement !

    /* on créé l'image en vraies couleurs avec une largeur de 50 pixels et une hauteur de 100 pixels */
    $image = imagecreatetruecolor($x,$y);
    imagepng($image); //renvoie une image sous format png
    imagedestroy($image); //détruit l'image, libérant ainsi de la mémoire
    ?>

    qui est présenté en tuto ici:
    https://mtodorovic.developpez.com/php/gd/?page=page_2

    Ca m'affiche le même message d'erreur !
    1
    1. UnNulEnPHP
       
      $image = imagecreatetruecolor($x,$y);
      Le problème viens de là, il manque l'espace

      $image = imagecreatetruecolor($x, $y);

      et ajouter l'header

      header("Content-type: image/png")
      0
  9. mpmp93 Messages postés 2931 Date d'inscription   Statut Membre Dernière intervention   1 343
     
    Bonjour,

    Juste pour info, vous avez une solution qui à mon sens est plus intéressante que GD, c'est l'élément CANVAS en HTML5:
    http://html5.immo-scope.com/index.php?page=html5/elementCanvasIntro

    et ici comment prendre en compte les nouveaux éléments HTML5:
    http://html5.immo-scope.com/index.php?page=html5/premierePageHtml5

    Avec ça, CANVAS fonctionne très bien même sous IE6/IE7/IE8....

    A+
    1
  10. wenpou
     
    Où doit on mettre ce code ?
    Merci :)
    0
  11. Duche
     
    Ca ne change rien du tout... il faut le mettre où ce code ?
    Pas avant la balise php quand meme ? :-/
    0
    1. Cedric
       
      Je pense que c'est juste après la balise php. Mais j'ai des soucis aussi... Alors ...

      Je pense donc que ce n'est pas juste une histoire de "headers" vu que j'ai le meme message, que je ne demande l'affichage directement, et que ça deconne ponctuellement seulement. Je vais raconter mes petites misères mais ça peut représenter une piste vu que ça fonctionne quand meme.

      Je récupère un texte dans une base, et GD me le convertit bien en image. Mais quand je créé un nouveau texte parfois ça ne fontionne pas.

      Je n'avais pas réussi en modifiant les headers, j'ai donc demandé à ce qu'il m'enregistre l'image que j'appelle ensuite.

      Bon je vous préviens le code est pas terrible.

      Le fichier create_image.php :

      <?php


      $im = imagecreate(480, 130);

      $bg = imagecolorallocatealpha($im, 255, 255, 255, 127);

      // Création de quelques couleurs
      $magenta = imagecolorallocatealpha($im, 255, 0, 255, 75);
      $cyan = imagecolorallocatealpha($im, 0, 161, 255, 75);
      $jaune = imagecolorallocatealpha($im, 255, 255, 0, 75);
      $col_ellipse2 = imagecolorallocatealpha($im,108, 155, 200,75);
      $col_ellipse = imagecolorallocatealpha($im, 209, 89, 33,50);
      $bleu_fonce = imagecolorallocate($im, 0, 46, 95);
      $jaune_clair = imagecolorallocate($im, 255, 243, 191);
      $grey = imagecolorallocate($im, 158, 102, 56);
      imagefilledrectangle($im, 0, 0, 399, 29, $transparent);

      // Remplacez le chemin par votre propre chemin de police
      $font = 'polices/vivaldi.ttf';


      // Ajout texte de fond transparent
      //imagettftext($im, 40, 0, -5, 80 , $bleu_trans, $font, $texteaconvertir);
      // On dessine l'ellipse
      $x_magenta = mt_rand(350, 400);
      $y_magenta = mt_rand(50, 75);
      $x_jaune = mt_rand(350, 400);
      $y_jaune = mt_rand(50, 75);
      $x_cyan = mt_rand(350, 400);
      $y_cyan = mt_rand(50, 75);
      imagefilledellipse ($im, $x_magenta, $y_magenta, 15, 15, $magenta);
      imagefilledellipse ($im, $x_jaune, $y_jaune, 15, 15, $jaune);
      imagefilledellipse ($im, $x_cyan, $y_cyan, 15, 15, $cyan);


      imageellipse($im, 150, 45, 300, 70, $col_ellipse);

      imageellipse($im, 160, 50, 320, 90, $col_ellipse2);



      imagettftext($im, 34, 0, 15, 58 , $grey, $font, $texteaconvertir);
      // Ajout d'ombres au texte


      imagettftext($im, 34, 0, 17, 61 , $jaune_clair, $font, $texteaconvertir);

      // Ajout du texte
      imagettftext($im, 34, 0, 16, 59, $bleu_fonce, $font, $texteaconvertir);

      $adresse = "img/img_texte/".$id.".png";
      imagepng($im, $adresse); // on enregistre l'image dans le dossier "images"
      ?>

      et dans le fichier de contenu :

      ...
      $texteaconvertir = $rubrique['titre'];

      include ("create_image.php");

      <img class=\"img_text\" src=\"img/img_texte/".$rubrique['id'].".png\" alt=\"".$texteaconvertir."\"></div>

      imagedestroy($im);
      0
  12. hicham2609 Messages postés 21 Statut Membre 32
     
    Ce problème peut avoir été raisons, dans tous les cas il s'agit d'une erreur ou notification retourné par php.
    ça se produit plus souvent dans un environnement de développement puisque tous les erreurs sont configurées pour être afficher, et moins souvent sur les serveurs en production puisque les erreurs non critiques ne sont pas affichées.
    Dans mon cas il s'agit simplement d'une variable qui été "undefined" donc php normalement affiche une notification et c'est cette dernière qui fait échouer la génération de l'image.
    Pour résoudre ce problème:
    1- la meilleur chose c'est revérifier le code, pour déceler les éventuels erreur / notification.
    2- pour masquer les erreurs non bloquante on met au début du script: error_reporting(E_ALL & ~E_NOTICE);
    0