Traitement d'image

Drazounet Messages postés 63 Date d'inscription jeudi 30 octobre 2003 Statut Membre Dernière intervention 27 mars 2008 - 18 nov. 2005 à 16:17
coucou747 Messages postés 12303 Date d'inscription mardi 10 février 2004 Statut Membre Dernière intervention 30 juillet 2012 - 22 nov. 2005 à 10:48
Bonjour à tous,



J'ai trouvé sur ce site une fonction sympa qui permet de redimensionner
des images (en indiquant la largeur et la hauteur) sans la déformer. Le
problème c'est que certaines photos perdent énormément de leur qualité
(inscrustation de vert / gris ou autre sur l'image) alors que d'autres
sont impecable. Par exemple :



image ok :





image bugée :





Savez-vous d'où le problème peut-il venir ? Voici la fonction :



function generer_miniature($image, $largeur, $hauteur, $qualite, $categorie, $action) {



// chemin de la miniature à générer

if ($action==1) $dest = "photos/$categorie/mini/mini_$image";

else $dest = "photos/$categorie/$image";



// dossier où se trouve l'image source

$dossier = "imgtmp/";



$img_in = ImageCreateFromJpeg($dossier.$image);



$size = getimagesize($dossier.$image);

$l = $size[0];

$h = $size[1];



if (($l >= $largeur) && ($h>= $hauteur)) {

$new_haut = ($h * $largeur) / $l;

if($new_haut < $hauteur) {



$new_haut = $hauteur;

$new_larg = ($l * $hauteur) / $h;

}

else {

$new_larg = $largeur;

}

// on réduit l'image à la largeur voulue, mais en gardant la hauteur proportionnelle

$img_out = ImageCreate($new_larg, $new_haut);

ImageCopyResized($img_out,
$img_in, 0, 0, 0, 0, ImagesX($img_out), ImagesY($img_out), $l, $h);



// création d'une image vide aux dimensions de la miniature

$im = ImageCreate($largeur, $hauteur);



// on copie la zone de l'image de hauteur voulue dans l'image vide

ImageCopy($im, $img_out, 0, 0, 0, 0, $largeur, $hauteur);

ImageJpeg($im, $dest, $qualite);



// destruction des images en mémoire

ImageDestroy($img_out);

ImageDestroy($im);

}

elseif (($l < $largeur) && ($h >= $hauteur)) {

$img_out = ImageCreate($l, $h);

ImageCopyResized($img_out,
$img_in, 0, 0, 0, 0, ImagesX($img_out), ImagesY($img_out), $l, $h);



$im = ImageCreate($l, $hauteur);



ImageCopy($im, $img_out, 0, 0, 0, 0, $l, $hauteur);

ImageJpeg($im, $dest, $qualite);



// destruction des images en mémoire

ImageDestroy($img_out);

ImageDestroy($im);

}

elseif ($l >= $largeur && $h < $hauteur) {

$img_out = ImageCreate($l, $h);

ImageCopyResized($img_out,
$img_in, 0, 0, 0, 0, ImagesX($img_out), ImagesY($img_out), $l, $h);



$im = ImageCreate($largeur , $h);



ImageCopy($im, $img_out, 0, 0, 0, 0, $largeur, $hauteur);

ImageJpeg($im, $dest, $qualite);



// destruction des images en mémoire

ImageDestroy($img_out);

ImageDestroy($im);

}

elseif ($l < $largeur && $h< $hauteur) {

ImageJpeg($img_in, $dest, $qualite);

}

// destruction de l'image en mémoire

ImageDestroy($img_in);

}

2 réponses

malalam Messages postés 10839 Date d'inscription lundi 24 février 2003 Statut Membre Dernière intervention 2 mars 2010 25
18 nov. 2005 à 16:31
Salut,

et..diantre.
Je serais toi, je commencerais par télécharger la dernière version de la GD, voir si tu as le même problème.
Mais sinon, il vaut mieux utiliser imagecopyresampled().
http://fr2.php.net/manual/fr/function.imagecopyresampled.php
(à la place de imagecopyresized)
de même; il vaut mieux utiliser imagecreatetruecolor().
(tu trouveras au même endroit).

avec ça tu devrais avoir une qualité optimale.
0
coucou747 Messages postés 12303 Date d'inscription mardi 10 février 2004 Statut Membre Dernière intervention 30 juillet 2012 44
22 nov. 2005 à 10:48
salut, on peut faire bcp plus simple !!!



$src_img = imagecreatefromstring($da['data']);

$x1=imagesx($src_img);

$y1=imagesy($src_img);

//on fait la miniature sans déformer l'image

$k1=128/$x1;

$k2=128/$y1;

$k=min($k1,$k2);

$x=intval($k*$x1);

$y=intval($k*$y1);

$dst_img= ImageCreateTrueColor($x,$y);

ImageCopyResized($dst_img,$src_img,0,0,0,0,$x,$y,$x1,$y1);

imagedestroy($src_img);


quel gain de temps !!!


In a dream, I saw me, drop dead... U was here, U cried... It was just a deam, if I die, U won't cry, maybe, U'll be happy

http://coucou747.hopto.org
0
Rejoignez-nous