Redimenssionement d'images en conservant la qualité

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Redimenssionement d'images en conservant la qualité

Re: Redimenssionement d'images en conservant la qualité

par visualight » 13 oct. 2009, 19:40

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 ;)

Re: Redimenssionement d'images en conservant la qualité

par AB » 13 oct. 2009, 19:27

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é

par fab » 13 oct. 2009, 17:36

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é

par Cobaye » 13 oct. 2009, 16:42

regarde ImageCreateTrueColor

Redimenssionement d'images en conservant la qualité

par visualight » 13 oct. 2009, 16:37

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