Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1494 connectés 

  FORUM HardWare.fr
  Programmation
  PHP

  [PHP-GD] Impossible de sauver l'image

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[PHP-GD] Impossible de sauver l'image

n°660915
omega2
Posté le 02-03-2004 à 14:09:41  profilanswer
 

Je me suis fait un script pour taguer une image.
Le problème, c'est que si j'essayes de sauver l'image tagué sur le disque du serveur, j'obtiens un fichier vide et le navigateur revoit le message  
Warning: imagejpeg() [function.imagejpeg]: gd-jpeg: JPEG library reports unrecoverable error: in /www/torrent/tehanu/tag/tag.php5 on line 120 (en utilisant imagejpeg).
J'ai le même probléme avec les fonctions imagepng et imagegif.(pas encore testé imagewbmp)
 
Par contre, le même code mais en renvoyant l'image au navigateur fonctionne trés bien sans aucune erreur.
 
Autre détail, un fopen avec écriture dans le fichier focntionne trés bien, donc le probléme n'a pas l'air d'être du à un probléme de droit d'acccés.
 
liste des versions :
Apache Version  Apache/2.0.48 (Unix) PHP/5.0.0a5-alexdupre
PHP Version 5.0.0a5-alexdupre
 
gd
GD Support : enabled
GD Version : bundled (2.0.17 compatible)
FreeType Support : enabled
FreeType Linkage : with freetype
FreeType Version : 2.1.5
T1Lib Support : enabled
GIF Read Support : enabled
GIF Create Support : enabled
JPG Support : enabled
PNG Support : enabled
WBMP Support : enabled
XPM Support : enabled
XBM Support : enabled
JIS-mapped Japanese Font Support : enabled
 
 
 
S'il faut d'autres infos, je les donerais. ;)
Merci d'avance pour ceux qui se pencheront sur mon probléme. :)

mood
Publicité
Posté le 02-03-2004 à 14:09:41  profilanswer
 

n°660920
Hermes le ​Messager
Breton Quiétiste
Posté le 02-03-2004 à 14:13:17  profilanswer
 

Je crois que c'est un bug lié à ta version de GD (mais j'en suis pas sûr). Il me semble me souvenir que qqu a eu le cas ici avec une version très récente de GD.

n°660931
omega2
Posté le 02-03-2004 à 14:20:58  profilanswer
 

Zut.
Il y aurait pas un moyen de contourner le probléme?
Peut être en interceptant la sortie standard et la renvoyant vers un fichier?
Vu que j'ai jamais testé une telle interception, je sais pas si c'est faisable directement en php.
 
EDIT : c'est bon, j'ai trouvé comment faire :
ob_start
ob_get_contents
copie du contenu de la variable dans un fichier
ob_end_clean (si on veut pas envoyer l'image au navigateur)
ob_end_flush
Enfin a mon avis, ca  doit être faisable comme ça, me reste a tester.


Message édité par omega2 le 02-03-2004 à 14:27:04
n°660937
Hermes le ​Messager
Breton Quiétiste
Posté le 02-03-2004 à 14:25:44  profilanswer
 

omega2 a écrit :

Zut.
Il y aurait pas un moyen de contourner le probléme?
Peut être en interceptant la sortie standard et la renvoyant vers un fichier?
Vu que j'ai jamais testé une telle interception, je sais pas si c'est faisable directement en php.


 
Tu es vraiment sûr que tu n'as pas (enfin que php) n'a pas de problèmes de droit ?? C'est quand même très bizarre... Et pourtant tu disais que tu peux faire un fopen...  :heink:  
 
Tu peux montrer juste la ligne de code avec ton imagejpeg et surtout l'adresse d'écriture ?  
 

n°660947
omega2
Posté le 02-03-2004 à 14:36:27  profilanswer
 

hermes le messager a écrit :


 
Tu es vraiment sûr que tu n'as pas (enfin que php) n'a pas de problèmes de droit ?? C'est quand même très bizarre... Et pourtant tu disais que tu peux faire un fopen...  :heink:  
 
Tu peux montrer juste la ligne de code avec ton imagejpeg et surtout l'adresse d'écriture ?  
 
 


Code :
  1. <?php
  2. $imgname="img.jpg";
  3. $destname="final.png";
  4. tag4($imgname,$destname);
  5. function tag4($imgname,$tagname,$destname)
  6. { $Im = imagecreatefromjpeg($imgname); /* Tentative d'ouverture */
  7.   if ($Im) /* Vérification */
  8.   { // génération du tag
  9. $TailleX=imagesx($Im);
  10.     $TailleY=imagesy($Im);
  11. $ImTag=imgtagG();
  12.     if ($ImTag) /* Vérification */
  13.     { // on ajoute le tag dans l'image
  14.       $TailleTagX=imagesx($ImTag);
  15.       $TailleTagY=imagesy($ImTag);
  16.    imagecopymerge($Im,$ImTag,0,0,0,0,$TailleTagX,$TailleTagY,100);
  17.       imagecopymerge($Im,$ImTag,$TailleX-$TailleTagX,$TailleY-$TailleTagY,0,0,$TailleTagX,$TailleTagY,100);
  18.   imagedestroy($ImTag);
  19.     }else
  20. { echo "tag non ouvert (".$tagname." )";
  21. }
  22. $ImTag=imgtagD();
  23.     if ($ImTag) /* Vérification */
  24.     { // on ajoute le tag dans l'image
  25.       $TailleTagX=imagesx($ImTag);
  26.       $TailleTagY=imagesy($ImTag);
  27.    imagecopymerge($Im,$ImTag,$TailleX-$TailleTagX,0,0,0,$TailleTagX,$TailleTagY,100);
  28.       imagecopymerge($Im,$ImTag,0,$TailleY-$TailleTagY,0,0,$TailleTagX,$TailleTagY,100);
  29.   imagedestroy($ImTag);
  30.     }else
  31. { echo "tag non ouvert (".$tagname." )";
  32. }
  33. //imageinterlace($Im,1);
  34.     imagejpeg($Im,$destname,100); //l'erreur est là
  35. //header("Content-type: image/jpeg" );
  36. //imagejpeg($Im);
  37. imagedestroy($Im);
  38.   }else
  39.   { echo "image non ouverte (".$imgname." )";
  40.   }
  41. }
  42. function imgtagD()
  43. { return imgtag(1);
  44. }
  45. function imgtagG()
  46. { return imgtag(2);
  47. }
  48. function imgtag($pos)
  49. { if ($pos==1)
  50.   { $angle=338;
  51.     $haut=25;
  52.     $gauche=4;
  53.   }else
  54.   { $angle=22;
  55.     $haut=125;
  56.     $gauche=12;
  57.   }
  58.   $ImTag = imagecreate(252, 132); /* Tentative d'ouverture */
  59.   if ($ImTag) /* Vérification */
  60.   { // on définit le tag en question
  61.     $TailleTagX=imagesx($ImTag);
  62.     $TailleTagY=imagesy($ImTag);
  63. $color3=imagecolorallocate($ImTag, 255, 255, 255);
  64. $color2=imagecolorallocate($ImTag, 255, 255, 0);
  65. $color=imagecolorallocate($ImTag, 0, 0, 255);
  66. imagecolortransparent ($ImTag,$color3);
  67. imagefill ($ImTag,0,0,$color3);
  68. imagettftext($ImTag, 35, $angle, $gauche ,$haut ,$color , "./police/wendymed.ttf",'mon texte');
  69. // on enléve les effets de flous
  70. for ($PosX=0;$PosX<$TailleTagX;$PosX++)
  71. { for ($PosY=0;$PosY<$TailleTagY;$PosY++)
  72.   { if (imagecolorat ($ImTag,$PosX,$PosY)<>$color3)
  73.  {  imagesetpixel($ImTag,$PosX-$i,$PosY-$j,$color);
  74.  }
  75.   }
  76. }
  77. // on rajoute la bordure
  78. for ($PosX=0;$PosX<$TailleTagX;$PosX++)
  79. { for ($PosY=0;$PosY<$TailleTagY;$PosY++)
  80.   { if (imagecolorat ($ImTag,$PosX,$PosY)==$color)
  81.  { for ($i=1;$i<=4;$i++)
  82.       { for ($j=1;$j<=4-$i;$j++)
  83.         { if (imagecolorat($ImTag,$PosX-$i,$PosY-$j)==$color3)
  84.     { imagesetpixel($ImTag,$PosX-$i,$PosY-$j,$color2);
  85.           }
  86.               if (imagecolorat($ImTag,$PosX+$i,$PosY-$j)==$color3)
  87.     { imagesetpixel($ImTag,$PosX+$i,$PosY-$j,$color2);
  88.           }
  89.             }
  90.    }
  91.    for ($i=1;$i<=4;$i++)
  92.       { for ($j=1;$j<=4-$i;$j++)
  93.         { if (imagecolorat($ImTag,$PosX-$i,$PosY+$j)==$color3)
  94.     { imagesetpixel($ImTag,$PosX-$i,$PosY+$j,$color2);
  95.           }
  96.               if (imagecolorat($ImTag,$PosX+$i,$PosY+$j)==$color3)
  97.     { imagesetpixel($ImTag,$PosX+$i,$PosY+$j,$color2);
  98.           }
  99.   }
  100.    }
  101.     }
  102.   }
  103. }
  104.   }
  105.   return $ImTag;
  106. }
  107. ?>

ligne de code en errreur :
imagejpeg($Im,$destname,100);  
message d'erreur :
Warning: imagejpeg() [function.imagejpeg]: gd-jpeg: JPEG library reports unrecoverable error: in /www/torrent/tehanu/tag/tag.php5 on line 34  
  (le numéro de ligne a changé par ce que j'ai enlever mes anciens tests du fichier que j'ai copié)
 
Heu, tu veux dire quoi par l'adresse d'écriture? Je la trouve où cette info?
Quand aux droit d'accés,  j'ai vérifié, les différents répertoires menant à celui où le script est exécuté (et où le fichier final est donc censé être sauvegardé) sont tous en rwx pour tous (le propriétaire, son groupe et les autres) Donc, il devrait pas y avoir de probléme d'accés à ce niveau. ;)

n°660952
Hermes le ​Messager
Breton Quiétiste
Posté le 02-03-2004 à 14:41:51  profilanswer
 

Ok, voilà ce que tu vas faire.
 
Contente toi d'écrire un minuscule script avec seulement la lecture et la réécriture d'une image.
 
Et vois si l'erreur est toujours présente. ;)

n°660956
omega2
Posté le 02-03-2004 à 14:45:18  profilanswer
 

Code :
  1. <?php
  2. $imgname="img.jpg";
  3. $destname="final.jpg";
  4. test($imgname,$destname);
  5. //tag4($imgname,$destname);
  6. function test($imgname,$destname)
  7. { $Im = imagecreatefromjpeg($imgname);
  8.   if ($Im) /* Vérification de l'ouverture */
  9.   { imagejpeg($Im,$destname,100);
  10. imagedestroy($Im);
  11.   }
  12. }
  13. ?>


Résultat :
Warning: imagejpeg() [function.imagejpeg]: gd-jpeg: JPEG library reports unrecoverable error: in /www/torrent/tehanu/tag/tag.php5 on line 9


Message édité par omega2 le 02-03-2004 à 14:46:11
n°660962
Hermes le ​Messager
Breton Quiétiste
Posté le 02-03-2004 à 14:49:01  profilanswer
 

omega2 a écrit :

Code :
  1. <?php
  2. $imgname="img.jpg";
  3. $destname="final.jpg";
  4. test($imgname,$destname);
  5. //tag4($imgname,$destname);
  6. function test($imgname,$destname)
  7. { $Im = imagecreatefromjpeg($imgname);
  8.   if ($Im) /* Vérification de l'ouverture */
  9.   { imagejpeg($Im,$destname,100);
  10. imagedestroy($Im);
  11.   }
  12. }
  13. ?>


Résultat :
Warning: imagejpeg() [function.imagejpeg]: gd-jpeg: JPEG library reports unrecoverable error: in /www/torrent/tehanu/tag/tag.php5 on line 9


 
Fais cela en dehors d'une fonction.

n°660969
omega2
Posté le 02-03-2004 à 14:55:42  profilanswer
 

Code :
  1. <?php
  2. $Im = imagecreatefromjpeg("img.jpg" ); /* Tentative d'ouverture */
  3. if ($Im) /* Vérification */
  4. { imagejpeg($Im,"final.jpg",100);
  5. imagedestroy($Im);
  6. }
  7. ?>

Warning: imagejpeg() [function.imagejpeg]: gd-jpeg: JPEG library reports unrecoverable error: in /www/torrent/tehanu/tag/tag.php5 on line 4
 
J'aurais quand même était particuliérement étoné que ca ne marche qu'en dehors des fonctions. ;)

n°660971
Hermes le ​Messager
Breton Quiétiste
Posté le 02-03-2004 à 14:58:41  profilanswer
 

omega2 a écrit :

Code :
  1. <?php
  2. $Im = imagecreatefromjpeg("img.jpg" ); /* Tentative d'ouverture */
  3. if ($Im) /* Vérification */
  4. { imagejpeg($Im,"final.jpg",100);
  5. imagedestroy($Im);
  6. }
  7. ?>

Warning: imagejpeg() [function.imagejpeg]: gd-jpeg: JPEG library reports unrecoverable error: in /www/torrent/tehanu/tag/tag.php5 on line 4
 
J'aurais quand même était particuliérement étoné que ca ne marche qu'en dehors des fonctions. ;)


 
Moi aussi, mais au moins, si tu ax la certitude que ton dossier a les bons droits, tu sais maintenant ASSUREMENT qu'il y a un problème avec ta version de GD (voire PHP)...
 
Essaye de faire exactement la même chose avec une autre version de php/gd si tu peux. Si tu n'a plus l'erreur, tu sauras donc exactement d'où ça vient.

mood
Publicité
Posté le 02-03-2004 à 14:58:41  profilanswer
 

n°660985
omega2
Posté le 02-03-2004 à 15:12:10  profilanswer
 

Le problème, c'est que j'ai tout installé a partir des ports de freebsd ce qui veut dire que si je veux installer une autre version, il faut que j'ailles la chercher sur le net et je perds alors la gestion des mises à jours sans compter que d'autres ports pouraiente refuser de s'installer a cause des dépendances. :(
Pour le moment, je vais contourner le probléme et ensuite, quand le bug sera corrigé, j'utiliserais la fonction comme indiqué dans la doc. ;)

n°660989
Hermes le ​Messager
Breton Quiétiste
Posté le 02-03-2004 à 15:16:19  profilanswer
 

omega2 a écrit :

Le problème, c'est que j'ai tout installé a partir des ports de freebsd ce qui veut dire que si je veux installer une autre version, il faut que j'ailles la chercher sur le net et je perds alors la gestion des mises à jours sans compter que d'autres ports pouraiente refuser de s'installer a cause des dépendances. :(
Pour le moment, je vais contourner le probléme et ensuite, quand le bug sera corrigé, j'utiliserais la fonction comme indiqué dans la doc. ;)


 
Ok ! Bon courage, mais à mon avis, c'est bien un bug de GD. ;)

n°660992
omega2
Posté le 02-03-2004 à 15:21:00  profilanswer
 

Fort possible. C'est pour ça qu'il aut que je contourne le bug en attendant qu'il soit corrigé. ;)
Du coup, maintenant, je vais apprendre à faire joujou avec les buffers. ;)


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  PHP

  [PHP-GD] Impossible de sauver l'image

 

Sujets relatifs
[PHP] validation formulaireUNIX et PHP
[c# vs.net] Sauver une picturebox....[php] un script PHP de rencontre à la "caramail" ?
[PHP] Exécuter une fonction en cliquant sur le bouton d'un formulaireListBox et Image
[PHP/SQL] Plusieurs conditions dans where ?[Coppermine] problème d'instalation coppermine :??: (galerie d'image)
[PHP] Fonction inverse de nl2br ?[Free] impossible d'utiliser les sessions
Plus de sujets relatifs à : [PHP-GD] Impossible de sauver l'image


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR