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 :

[ImageMagick] Problème de génération image [FAQ]


Sujet :

Bibliothèques et frameworks PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Août 2005
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 16
    Par défaut [ImageMagick] Problème de génération image
    Bonjour à tous,

    je me permets de poster sur le forum car je n'arrive pas à résoudre mon problème malgré de nombreuses recherches.

    J'ai l'erreur suivante (connue et reconnue) lorsque je veux créer une image :
    L'image “...” ne peut être affichée car elle contient des erreurs.

    Ceci est du au fait que je me plante quelque part lorsque je déclare header("Content-type: image/png")
    Pour plus de prévisions, j'utilise la méthode MVC pour développer mon appli et voici une partie du code :

    Mon controleur :
    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
     
    <?php
    require_once('test.php');
    require_once('VUE_projet.php');
    require_once('MOD_projet.php');
    require_once('./Ressources/Objets/requeteBD.php');
    class CTRL_projet{
    	function CTRL_projet($etape){
    // .. .//
    $this -> Test = new Test();
    // ... //
    if ($num_utilisateur == 1 && $num != 0 && ($detail != '' || $detail != 'liste')) {
    					$detail = array();
    					$detail_projet = $this -> requeteBD -> detailProjet($num);
    					$categorie_mere = $this -> requeteBD -> categorieMere($num);
    					$nb_etape_projet = $this -> requeteBD -> nbEtape($num);
    					$etape_projet = $this -> requeteBD -> etapeProjet($num);
    					$nb_etape_fini = $this -> requeteBD -> nbEtapeFini($num);
    					foreach ($nb_etape_projet as $nbe) {
    						foreach ($nb_etape_fini as $nbf) {
    									header("Content-type: image/png");
    									$graphe = $this -> Test -> graphique($nbe['cpte'], $nbf['cpte']);
    						}
    					}
    					foreach ($detail_projet as $det) {
    						foreach ($categorie_mere as $cat) {
    							foreach ($nb_etape_projet as $nbe) {
    									$_SESSION['nom_projet'] = $det['nom_projet_'];
    									array_push($detail, array('nom_projet_'=>$det['nom_projet_'], 'nom_'=>$det['nom_'], 'prenom_'=>$det['prenom_'], 'libelle_'=>$det['libelle_'], 'date_debut_'=>$det['date_debut_'], 'date_fin_'=>$det['date_fin_'], 'libelle_categorie_'=>$cat['libelle_'], 'cpte_'=>$nbe['cpte']));
    									$duree = $this -> MOD_global -> duree($det['date_debut_'], $det['date_fin_']);
    							}
    						}
    					}
    					//print_r($detail);
    					new VUE_projet(2, $detail, $etape_projet, $duree, $graphe);
    				}
    La classe Test (c'est pas encore fini, alors faut pas s'étonner de ce que ca fait)
    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
     
    <?php
    class Test {
    	function Test() {}
     
    	function graphique($nb_etape, $nb_fini) {
    		$nb_encours = $nb_etape - $nb_fini;
    		$image = @imagecreatetruecolor(200,10) or die ('Il y a un probl&egrave;me');
    		$rouge = imagecolorallocate($image, 255, 0, 0);
    		$vert = imagecolorallocate($image, 0, 255, 0);
    		imagefill($image, 0, 10, $rouge);
    		for ($i = 0; $i < $nb_etape; $i++) {	
    			if ($nb_fini >= 1) {
    				$src = imagecreatefrompng("./Ressources/images/prog_vert.png");
    				$temp = imagecreatetruecolor(200,11);
    				for ($j = 0; $j < $nb_fini; $j++) {
    					imagecopy ($temp, $src, 0, 0, $j * (200/$nb_etape)/$nb_fini, (200/$nb_etape)/$nb_fini, 200, 11);
    					//imagefill($image, $j * (200/$nb_etape)/$nb_fini, (200/$nb_etape)/$nb_fini, $vert);
    				}
    			}
     
    			$src = @imagecreatefrompng("./Ressources/images/prog_rouge.png");
    			$temp = @imagecreatetruecolor(200,11);
    			for ($k = 0; $k < $nb_encours; $k++) {
    				imagecopy ($temp, $src, 0, 0, $k * (200/$nb_etape)/$nb_encours, (200/$nb_etape)/$nb_encours, 200, 11);
    				//imagefill($image, 0, 10, $rouge); //$k * (200/$nb_etape)/$nb_encours, (200/$nb_etape)/$nb_encours, $rouge);
    			}
    		imagedestroy($temp);
    		}
    		//header ("Content-type: image/png");
    		imagepng($src);
    		//return $src;
     
    		//header ("Content-type: image/png");
    		//$img = graphique(1,1);
    		//imagepng($img);
    		//imagepng($image);
    		//imagedestroy($image);
    	}
    }
    ?>
    La fonction graphique, testée seule dans un fichier à part (et ca marche)
    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
     
    function graphique($nb_etape, $nb_fini) {
    		$nb_encours = $nb_etape - $nb_fini;
    		$image = @imagecreatetruecolor(200,10) or die ('Il y a un probl&egrave;me');
    		$rouge = imagecolorallocate($image, 255, 0, 0);
    		$vert = imagecolorallocate($image, 0, 255, 0);
    		imagefill($image, 0, 10, $rouge);
    		for ($i = 0; $i < $nb_etape; $i++) {	
    			if ($nb_fini >= 1) {
    				$src = imagecreatefrompng("../Ressources/images/prog_vert.png");
    				$temp = imagecreatetruecolor(200,11);
    				for ($j = 0; $j < $nb_fini; $j++) {
    					imagecopy ($temp, $src, 0, 0, $j * (200/$nb_etape)/$nb_fini, (200/$nb_etape)/$nb_fini, 200, 11);
    					//imagefill($image, $j * (200/$nb_etape)/$nb_fini, (200/$nb_etape)/$nb_fini, $vert);
    				}
    			}
     
    			$src = @imagecreatefrompng("../Ressources/images/prog_rouge.png");
    			$temp = @imagecreatetruecolor(200,11);
    			for ($k = 0; $k < $nb_encours; $k++) {
    				imagecopy ($temp, $src, 0, 0, $k * (200/$nb_etape)/$nb_encours, (200/$nb_etape)/$nb_encours, 200, 11);
    				//imagefill($image, 0, 10, $rouge); //$k * (200/$nb_etape)/$nb_encours, (200/$nb_etape)/$nb_encours, $rouge);
    			}
    		imagedestroy($temp);
    		}
     
    	}
    header ("Content-type: image/png");
    $img = graphique(1,1);
    imagepng($img);
    Merci pour votre aide

  2. #2
    Rédacteur

    Avatar de Yogui
    Homme Profil pro
    Directeur technique
    Inscrit en
    Février 2004
    Messages
    13 721
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yonne (Bourgogne)

    Informations professionnelles :
    Activité : Directeur technique

    Informations forums :
    Inscription : Février 2004
    Messages : 13 721
    Par défaut
    Salut

    Cette erreur arrive fréquemment lorsque PHP affiche un warning ou une erreur, car cela se mélange à la sortie et donc le navigateur a du mal à différencier le warning de l'image

    Une première solution de diagnostic est de mettre un appel à exit; juste avant l'appel à la fonction d'affichage de l'image (ici : imagepng).

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Août 2005
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 16
    Par défaut
    Merci pour ta réponse,

    J'ai fait un appel à exit; comme tu me l'as suggéré, avant la création de l'image, j'ai toujours le même message ""...L'image contient des erreurs", je le fais avant le header, comme le header n'est pas modifié, du coup je n'ai plus du tout d'affichage.

    Je vais essayer en utilisant une image jpeg, car apparemment, lorsque je change le header en mettant comme argument "Content-type: image/jpeg", la génération essaie d'être faite mais elle n'aboutit pas (certainement parce que la source est une image png), je regarde ca et je te tien au courant,

    merci

  4. #4
    Rédacteur

    Avatar de Yogui
    Homme Profil pro
    Directeur technique
    Inscrit en
    Février 2004
    Messages
    13 721
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yonne (Bourgogne)

    Informations professionnelles :
    Activité : Directeur technique

    Informations forums :
    Inscription : Février 2004
    Messages : 13 721
    Par défaut
    Si tu as une page blanche, c'est que la tentative de débogage est infructueuse, ma suggestion n'est pas la bonne.

    Ok, pigé.

    En réalité, tu essaies d'envoyer plusieurs images à la fois : c'est impossible. Pense bien que le résultat d'un script est compris par le navigateur comme étant UN document, tu ne peux donc pas envoyer différents documents même s'ils sont du même type.

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Août 2005
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 16
    Par défaut
    J'ai complètement changer la façon de générer l'image, je le fais avec la fonction imagecreatejpeg (comme je te l'ai dit plus haut c'était pour voir la réaction du serveur), et cette fois ci, au lieu de créer l'image à partir du contrôleur, je le fais directement dans la vue, fichier test.php ne change pas, par contre dans mon fichier VUE_....php j'ai rajouté ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $vue_projet .=	"<td colspan=\"4\"><img src=\"".$graphe = $this -> Test -> graphique(1,1)."\"></img></td>\n";
    Apres un petit peu de débogage (des warning s'affichaient dans l'affichage de la source), je n'ai toujours pas d'image mais j'ai l'url de la page depuis laquelle est appelé l'image en affichage, et dans l'affichage de la source, j'ai une série de caractère juste après l'ouverture de la balise <body>.
    Et j'oubliais, la balise <img src=""> est vide.

  6. #6
    Rédacteur

    Avatar de Yogui
    Homme Profil pro
    Directeur technique
    Inscrit en
    Février 2004
    Messages
    13 721
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yonne (Bourgogne)

    Informations professionnelles :
    Activité : Directeur technique

    Informations forums :
    Inscription : Février 2004
    Messages : 13 721
    Par défaut
    Afin d'être sur la même longueur d'ondes : dans la balise <img src=""/>, tu indiques bien le nom du script chargeant l'image ?

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [ImageMagick] Problème avec image dynamique
    Par ALTF4 dans le forum Bibliothèques et frameworks
    Réponses: 2
    Dernier message: 17/09/2006, 11h55
  2. [ImageMagick] Affiche d'image anti-bot
    Par raptor1 dans le forum Bibliothèques et frameworks
    Réponses: 1
    Dernier message: 09/09/2006, 22h43
  3. [ImageMagick] Redimensionnement image
    Par FoxLeRenard dans le forum Bibliothèques et frameworks
    Réponses: 5
    Dernier message: 27/02/2006, 16h53
  4. [ImageMagick] Header envoyé lors de la création d'une image
    Par KLiFF dans le forum Bibliothèques et frameworks
    Réponses: 2
    Dernier message: 25/10/2005, 16h35
  5. [ImageMagick] Problème de qualité d'image
    Par rigolman dans le forum Bibliothèques et frameworks
    Réponses: 40
    Dernier message: 14/10/2005, 12h38

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