Garder la qualité d'une image

Garder la qualité d'une image - PHP - Programmation

Marsh Posté le 20-05-2005 à 11:21:53    

Bonjour,
 
 
J'ai une fonction PHP qui à partir d'un grande photo crée une autre photo plus petite (une vignette). Malheureusement la qualité de la petite photo est nettement moins bonne que celle de la grande.
je voudrais savoir quelles sont les fonctions qui permettent de garder la qualité de la photo de départ pour la vignette ou d'améliorer la qualité de la vignette.
 
 
Merci

Reply

Marsh Posté le 20-05-2005 à 11:21:53   

Reply

Marsh Posté le 20-05-2005 à 11:40:40    

Si tu utilises imagecopyresized(), utilise plutôt imagecopyresampled(), qui donnera un meilleur résultat.

Reply

Marsh Posté le 20-05-2005 à 11:53:41    

jeff@be a écrit :

Si tu utilises imagecopyresized(), utilise plutôt imagecopyresampled(), qui donnera un meilleur résultat.


 
justement c'est cette fonction (imagecopyresampled()) que j'utilise et la photo miniature n'est pas super.
 :(
 
juste un exemple
 
grande photo
http://membres.lycos.fr/adrien97110/Miller.jpg
 
petite photo  
http://membres.lycos.fr/adrien97110/MillerMini.jpg


Message édité par adrien971 le 20-05-2005 à 12:20:21
Reply

Marsh Posté le 20-05-2005 à 13:10:23    

donne-nous tout ton code

Reply

Marsh Posté le 20-05-2005 à 13:11:56    

C'est étrange, ta miniature semble avoir été converti en image à palette.
Bonne idée le code, j'aimerais bien voir également.
 
Donne aussi, si possible, ta version de PHP et de GD.


Message édité par The-Shadow le 20-05-2005 à 13:12:31
Reply

Marsh Posté le 20-05-2005 à 13:20:52    

assure-toi aussi que l'image cible est bien créée par imagecreatetruecolor()
Mais ton code pourra peut-être nous éclairer...

Reply

Marsh Posté le 20-05-2005 à 13:32:19    

code

Code :
  1. function redimage($img_src,$img_dest,$dst_w,$dst_h) {
  2.    // Lit les dimensions de l'image
  3.    $size = GetImageSize($img_src);
  4.    $src_w = $size[0]; $src_h = $size[1];
  5.    // Teste les dimensions tenant dans la zone
  6.    $test_h = round(($dst_w / $src_w) * $src_h);
  7.    $test_w = round(($dst_h / $src_h) * $src_w);
  8.    // Si Height final non précisé
  9.    if(!$dst_h) $dst_h = $test_h;
  10.    // Sinon si Width final non précisé
  11.    elseif(!$dst_w) $dst_w = $test_w;
  12. // Sinon teste quel redimensionnement tient dans la zone
  13.    elseif($test_h>$dst_h) $dst_w = $test_w;
  14.    else $dst_h = $test_h;
  15.    // La vignette existe ?
  16.    $test = (file_exists($img_dest));
  17.    // L'original à modifier?
  18.    if($test)
  19.       $test = (filemtime($img_dest)>filemtime($img_src));
  20.    // Les dimensions de la vignette sont correctes ?
  21.    if($test) {
  22. $size2 = GetImageSize($img_dest);
  23.       $test = ($size2[0]==$dst_w);
  24.       $test = ($size2[1]==$dst_h);
  25.    }
  26.    // Créer la vignette ?
  27.    if(!$test) {
  28.       // Cr\216e une image vierge aux bonnes dimensions
  29.       $dst_im = imagecreate($dst_w,$dst_h);
  30.       // Copie dedans l'image initiale redimensionn\216e
  31.          $src_im = ImageCreateFromJpeg($img_src);
  32.       ImageCopyResampled($dst_im,$src_im,0,0,0,0,$dst_w,$dst_h,$src_w,$src_h);
  33.       // Sauve la nouvelle image
  34.       ImageJpeg($dst_im,$img_dest);
  35.       // D\216truis les tampons
  36.       ImageDestroy($dst_im);
  37.       ImageDestroy($src_im);
  38.    }
  39. }


Reply

Marsh Posté le 20-05-2005 à 13:34:04    

Bon bah Jeff@be avait vu juste.
Remplace imagecreate par imagecreatetruecolor.

Reply

Marsh Posté le 20-05-2005 à 13:45:48    

jeff@be a écrit :

assure-toi aussi que l'image cible est bien créée par imagecreatetruecolor()
Mais ton code pourra peut-être nous éclairer...


 
 
Oui c'est bon merci j'ai remplacé ma fonction imagecreate() par imagecreatetruecolor() et la vignette est mieux.
 
résultat
 
avant:
http://membres.lycos.fr/adrien97110/MillerMini.jpg
 
 
après:
http://membres.lycos.fr/adrien97110/MillerMiniNew.jpg
 
 :D  
 
Merci

Reply

Sujets relatifs:

Leave a Replay

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