Page 1 sur 1

Redimenssionement d'images en conservant la qualité

Posté : 13 oct. 2009, 16:37
par visualight
Bonjour,

Je me demandais si il existait un paramètre me permettant de redimensionner une image en conservant 90 à 100% de sa qualité ?

Voici mon code de redimensionnement :
// ON VA CREER LES MINIATURES D'IMAGES
// On teste si le fichier n'est pas vide
if($file_size){
// On crée les images en fonction du type
if($file_type == "image/pjpeg" || $file_type == "image/jpeg"){
$new_img = imagecreatefromjpeg($file_tmp);
}elseif($file_type == "image/x-png" || $file_type == "image/png"){
$new_img = imagecreatefrompng($file_tmp);
}elseif($file_type == "image/gif"){
$new_img = imagecreatefromgif($file_tmp);
}


// On liste la hauteur et la lageur et on défini le ratio
list($width, $height) = getimagesize($file_tmp);
$imgratio=$width/$height;

$newwidth = $Thumbs_Mini_Height*$imgratio;
$newheight = $Thumbs_Mini_Height;

//function for resize image.
if (function_exists(imagecreatetruecolor)){
$resized_img = imagecreatetruecolor($newwidth,$newheight);
}else{
die("Erreur: Votre hébergement doit disposer de la librairie GD version 2 ou plus");
}
imagecopyresized($resized_img, $new_img, 0, 0, 0, 0, $newwidth, $newheight, $width, $height);
//save image
ImageJpeg ($resized_img,''.$dirpictures.'thumbs/mini/'.$file_name.'');
ImageDestroy ($resized_img);
ImageDestroy ($new_img);
chmod("".$CfgRelDir."/uploads/thumbs/mini/".$file_name."", 0644);
//print message
echo '<br>Image MINI Thumb: <a href='.$dirpictures.'thumbs/mini/'.$file_name.'>'.$dirpictures.'thumbs/mini/'.$file_name.'</a><br />';
}
Merci pour vos renseignements,
Raph

Re: Redimenssionement d'images en conservant la qualité

Posté : 13 oct. 2009, 16:42
par Cobaye
regarde ImageCreateTrueColor

Re: Redimenssionement d'images en conservant la qualité

Posté : 13 oct. 2009, 17:36
par fab
Pour avoir eu à gérer ce problème sur un site dont la principale activité est la diffusion de photo, je te conseille d'utiliser imagecopyresampled(), ça effectue un ré-échantillonnage de ton image lors de son redimensionnement ce qui permet de garder une bonne qualité tout en gagnant du poids.

Tu as un très bon exemple dans les commentaires de la doc officielle je le met ci-dessous :
<?php
// Le fichier
$filename = 'test.jpg';
$percent = 0.5;

// Content type
header('Content-type: image/jpeg');

// Calcul des nouvelles dimensions
list($width, $height) = getimagesize($filename);
$new_width = $width * $percent;
$new_height = $height * $percent;

// Redimensionnement
$image_p = imagecreatetruecolor($new_width, $new_height);
$image = imagecreatefromjpeg($filename);
imagecopyresampled($image_p, $image, 0, 0, 0, 0, $new_width, $new_height, $width, $height);

// Affichage
imagejpeg($image_p, null, 100);
?>

Re: Redimenssionement d'images en conservant la qualité

Posté : 13 oct. 2009, 19:27
par AB
Petite remarque :

J'utilise la technique indiquée par Fab qui me parait la plus optimisée (j'ai planché longtemps sur le pb car ancien photographe). Mais quelque soit la valeur de qualité indiquée dans la fonction imagejpeg, on est loin d'atteindre la qualité d'un redimensionnement effectué dans un logiciel photo.

Cela vient entre autre du fait qu'il pas de possibilité d'accentuation des contours lors du redimensionnement contrairement aux logiciels photos. Ce serait bien que php nous propose une fonction de ce type, mais ce n'est apparemment pas encore disponible.

Sinon concernant le paramètre de qualité pour la fonction imagejpeg, j'ai trouvé que 88 était un bon compromis (évidemment ça reste subjectif). Au delà les images deviennent très lourdes sans gagner significativement en qualité.

Re: Redimenssionement d'images en conservant la qualité

Posté : 13 oct. 2009, 19:40
par visualight
merci pour vos réponses ^^

J'ai effectué les changements suivants:
- Multi-upload (5 files)
- Création de 2 miniatures à la volée calculée sur le 'height' de l"image (113px et 480px) en utilisant imagecopyresampled
- Enregistrement dans les répertoires individuels des images et miniatures

je suis prêt pour a suite !

Merci ;)