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

marc311 Messages postés 1 Date d'inscription   Statut Membre Dernière intervention   -  
hicham2609 Messages postés 21 Date d'inscription   Statut Membre Dernière intervention   -
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

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
val3512 Messages postés 91 Date d'inscription   Statut Membre Dernière intervention   38
 
faut que tu mettent ce code pour qu'il reconnaisse le format :

header ("Content-type: image/jpeg");
header ("Content-type: image/png");
6
boubou
 
Change l'encodage du fchier place le en ANSI et la sa tourne Php est con desfois.
6
Toutkool
 
Merciiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii voici la réponse qui m'a aidé sur le même problème.
0
marcd567 Messages postés 1 Date d'inscription   Statut Membre Dernière intervention  
 
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
homo_geekus_webi Messages postés 1 Date d'inscription   Statut Membre Dernière intervention  
 
MERCI boubou !! je savais que c'était bête comme problème mais bizarrement ce n'est pas précisé dans les tutos!!
0
0uhman Messages postés 1 Date d'inscription   Statut Membre Dernière intervention  
 
Oh bon sang, j'en ai les larmes aux yeux... Je suis sur ce problème depuis des heures... Merci Boubou !
0
Atara
 
Merciiiiiiiiiiiiiii Boubou depuis 2 jours je n'avance pas à cause de ce problême.
0
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

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
JuJu] Messages postés 29 Date d'inscription   Statut Membre Dernière intervention   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
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
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
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
mpmp93 Messages postés 6648 Date d'inscription   Statut Membre Dernière intervention   1 340
 
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
wenpou
 
Où doit on mettre ce code ?
Merci :)
0
Duche
 
Ca ne change rien du tout... il faut le mettre où ce code ?
Pas avant la balise php quand meme ? :-/
0
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
hicham2609 Messages postés 21 Date d'inscription   Statut Membre Dernière intervention   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