[RESOLU] Image non reconnue, enregistrement uniquement en BMP !

Image non reconnue, enregistrement uniquement en BMP ! [RESOLU] - PHP - Programmation

Marsh Posté le 20-09-2004 à 16:47:42    

Bonjour à tous.
 
Après moult recherches, je me permets de m'adresser à vous car j'ai quelques difficultés avec un script php que j'ai écrit.
Ce script sert à redimensionner une image et écrire un texte dessus si la session du visiteur qui l'appelle n'est pas correcte.
Le script marche bien, mais malheureusement, on ne peut pas enregistrer l'image qu'il génère autrement qu'en BMP ni connaitre son poids.
Je ne sais pas d'où ça vient, car j'ai bien mis le header et sur mon site, il y'a un autre script (utilisant la bibliothèque JPGraph) qui génère des images reconnues en JPEG, je ne vois pas la différence entre les 2.
 
Voici mon script :

Code :
  1. <?
  2. // Définition de la sortie renvoyé au browser
  3. header("Content-type: image/jpeg" );
  4. // Création de la session
  5. session_start();
  6. // PARTIE AFFECTATION DES VARIABLES
  7. /* déclaration de variables */
  8. require "../common/config.php";
  9. /* Connexion avec MySQL */
  10. @mysql_connect ($host,$user,$pass);
  11. @mysql_select_db("$bdd" );
  12. // Données liées à l'image
  13. $ID=0;
  14. $cat=0;
  15. $ID=$_GET['ID'];
  16. $SID=$_GET['S'];
  17. @$query = "SELECT * FROM asp_images WHERE imgCode='$ID'";
  18. @$result = mysql_query($query);
  19. @$row = mysql_fetch_array($result);
  20. // Test sur l'existence de l'image
  21. if (!$row)
  22. {
  23. $src_im = ImageCreateFromJpeg("$adresse/images/gui/main_part/logo_ASP.jpg" );
  24. $black = imagecolorallocate($src_im, 0, 0, 0);
  25. ImageString($src_im,5,0,0,"Image inexistante sur le site...", $black);
  26. imagejpeg($src_im);
  27. } else {
  28. @$imgUrl= mysql_result($result,0,"imgUrl" );
  29. // Test sur la validité de la session
  30. if ($SID<>$_SESSION['session'] || !$SID)
  31. {
  32. $size = GetImageSize($imgUrl); 
  33. $src_w = $size[0]; $src_h = $size[1]; 
  34.     // Teste les dimensions tenant dans la zone
  35.  
  36.     // Crée une image vierge aux bonnes dimensions
  37.    $dst_im =  imagecreatetruecolor(500,375);
  38.    // Copie dedans l'image initiale redimensionnée
  39.    $src_im = ImageCreateFromJpeg($imgUrl);
  40.    ImageCopyResampled($dst_im,$src_im,0,0,0,0,500,375,$src_w,$src_h);
  41.    ImageDestroy($src_im);
  42. $white = imagecolorallocate($dst_im, 255, 255, 255);
  43. $black = imagecolorallocate($dst_im, 0, 0, 0);
  44. ImageString($dst_im,4,10,345,"Image disponible en $src_w x $src_h sur $adresse", $black);
  45. ImageString($dst_im,4,12,343,"Image disponible en $src_w x $src_h sur $adresse", $white);
  46.    Imagejpeg($dst_im);
  47. } else {
  48. // readfile("$imgUrl" );
  49. $dst_im = ImageCreateFromJpeg($imgUrl);
  50. Imagejpeg($dst_im);
  51. }
  52. }
  53. // Suppression de la session du serveur
  54. session_destroy();
  55. ?>


 
Merci d'avance à ceux qui auraient des idées pour m'aider ! :hello:


Message édité par Jerome608 le 29-09-2004 à 16:58:02
Reply

Marsh Posté le 20-09-2004 à 16:47:42   

Reply

Marsh Posté le 20-09-2004 à 18:15:01    

as tu essayé sur d'autres machines ?
 
à tout moment c'est IE qui bug.  
 
pour en être sûr : vide les fichiers internet temporaires, et retente de sauvegarder ton image.

Reply

Marsh Posté le 20-09-2004 à 18:26:24    

Merci de ta réponse.
 
J'ai essayé sur la machine de mon travail, sur mon PC personnel ainsi que sur celui d'un ami. :( Le résultat est toujours identique.
 

Reply

Marsh Posté le 20-09-2004 à 18:29:11    

Je viens à l'instant d'effacer mes fichiers temporaires, et le résultat est le même.
Si je clique droit sur l'image et que j'en demande les propriétés, j'ai :
Type : non disponible
Taille : non disponible
Dimensions : 1024x768
 
et si je veux l'enregistrer, au lieu de proposer le nom de l'image, j'ai "Sans Titre", en BMP. :S
 
Sur mes images générées avec JPGraph, tout ceci fonctionne.

Reply

Marsh Posté le 20-09-2004 à 21:00:49    

Bon pas d'autres propositions, je connaissais ce bug là uniquement...
 
Me suis pas encore essayé à manipuler les images en php.
 
Bon courage :)

Reply

Marsh Posté le 21-09-2004 à 11:35:06    

Merci :)
 
bon, bah j'ai bien peur que ça en reste là... tant pis... :(

Reply

Marsh Posté le 21-09-2004 à 13:06:02    

Après recherche, j'ai trouvé ça :
 

Citation :

jpg files are typically encoded in a three-channel, RGB format. It is possible, in some programs, to create .jpg files that are encoded in four-channel, CMYK color format (cyan, magenta, yellow, and black used in four-color printed reproduction). Importantly, Windows is unable to display .jpg files that are not in three-channel, RGB color format under all circumstances - they will work in standard view, but functions such as thumbnail won't work."  This interesting problem may also prevent pictures from being saved as JPG (only BMP) will be available, and weird effects when trying to print 4 channel jpgs.


 
c'est peut-être ça le problème ? Mais alors, comment savoir si mes images sont bien en RGB ou si elles sont en CMYK ??? et comment changer la config' ??? :(

Reply

Marsh Posté le 29-09-2004 à 15:26:39    

Bonjour à vous...
 
je poursuis mes recherches, mais sans succès hélas. :(
 
J'ai modifié mes en-têtes, mais ça n'a rien donné, je ne récupère même pas la taille du fichier, je ne comprends pas :
 

Code :
  1. <?
  2. // Création de la session
  3. session_start();
  4. // Définition de la sortie renvoyé au browser
  5. header("Content-Type: image/jpeg" );
  6. header("Content-Length: $imgPoids" );
  7. header("Content-Disposition: inline; filename=file.jpg" );
  8. // HTTP/1.1
  9. header("Cache-Control: no-store, no-cache, must-revalidate" );
  10. header("Cache-Control: post-check=0, pre-check=0", false);
  11. // HTTP/1.0
  12. header("Pragma: no-cache" );
  13. etc... ?>


 
là, je dois avouer que je cale. :(

Reply

Marsh Posté le 29-09-2004 à 16:57:13    

Ca y est, j'ai résolu mon problème, merci à ceux qui ont réfléchi à mon problème.
 
j'ai mis ça comme header :

Code :
  1. <?
  2. // Création de la session
  3. session_start();
  4. // Définition de la sortie renvoyé au browser
  5. Header("Content-Disposition: inline; filename=image.jpg" );
  6. Header("Content-Type: image/jpeg" );
  7. Header("Content-Length: $imgPoids" );
  8. Header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
  9. Header('Pragma: public');
  10. Header("Expires: 0" );


 
et ça marche !
 
Exemple ici : http://weaky.free.fr/php/galeries/ [...] &ID=PHO030 (en théorie, si vous cherchez à enregistrer, ça sera en Jpg, et si vous faites un click droit, vous voyez le nombre d'octet !)
 
voili voilou. ;)

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed