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

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. 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
    1. faut que tu mettent ce code pour qu'il reconnaisse le format :

      header ("Content-type: image/jpeg");
      header ("Content-type: image/png");
      6
      1. Change l'encodage du fchier place le en ANSI et la sa tourne Php est con desfois.
        6
        1. Merciiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii voici la réponse qui m'a aidé sur le même problème.
          0
        2. 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. 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. Oh bon sang, j'en ai les larmes aux yeux... Je suis sur ce problème depuis des heures... Merci Boubou !
          0
        5. Merciiiiiiiiiiiiiii Boubou depuis 2 jours je n'avance pas à cause de ce problême.
          0
      2. 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
        1. 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
          1. 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
            1. 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. $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
            2. 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
              1. Où doit on mettre ce code ?
                Merci :)
                0
                1. Ca ne change rien du tout... il faut le mettre où ce code ?
                  Pas avant la balise php quand meme ? :-/
                  0
                  1. 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
                2. 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