J'ai un script php qui enregistre l'image originale, puis la redimensionne - une vignette et une image plus grande pour la visualisation sur le web. Cela fonctionne bien sauf avec quelques images la qualité est terrible. Il semble être enregistré avec une palette de couleur très basse. Vous pouvez voir le résultat à http://kalpaitch.com/index.php?filter=white - cliquez sur la première vignette avec le titre « blanc blanc blanc »php imagecopyresampled mauvaise qualité
Ci-dessous est le code utilisé pour le rééchantillonnage d'image:
function resizeImg($name, $extension, $size1, $size2) {
if (preg_match('/jpg|jpeg|JPG|JPEG/',$extension)){
$image = imagecreatefromjpeg($name);
}
if (preg_match('/gif|GIF/',$extension)){
$image = imagecreatefromgif($name);
}
$old_width = imageSX($image);
$old_height = imageSY($image);
$old_aspect_ratio = $old_width/$old_height;
if($size2 == 0){
$new_aspect_ratio = $old_aspect_ratio;
if($old_width > $old_height){
$new_width = $size1;
$new_height = $new_width/$old_aspect_ratio;
} else {
$new_height = $size1;
$new_width = $new_height * $old_aspect_ratio;
}
} elseif($size2 > 0){
$new_aspect_ratio = $size1/$size2;
//for landscape potographs
if($old_aspect_ratio >= $new_aspect_ratio) {
$x1 = round(($old_width - ($old_width * ($new_aspect_ratio/$old_aspect_ratio)))/2);
$old_width = round($old_width * ($new_aspect_ratio/$old_aspect_ratio));
$y1 = 0;
$new_width = $size1;
$new_height = $size2;
//for portrait photographs
} else{
$x1 = 0;
$y1 = 0;
$old_height = round($old_width/$new_aspect_ratio);
$new_width = $size1;
$new_height = $size2;
}
}
$new_image = imagecreatetruecolor($new_width, $new_height);
imagecopyresampled($new_image, $image, 0, 0, $x1, $y1, $new_width, $new_height, $old_width, $old_height);
return $new_image;
Merci beaucoup
post-scriptum [photos ont été supprimées du serveur]
Et voici le reste du code de téléchargement:
// Move the original to the right place
$result = @move_uploaded_file($image['tmp_name'], $origlocation);
// Resize the image and save the thumbnail
$new_image = resizeImg($origlocation, $extension, 500, 0);
if (preg_match("/gif/",$extension)){
imagegif($new_image, $normallocation);
} else {
imagejpeg($new_image, $normallocation);
}
// Resize the image and save the thumbnail
$new_image = resizeImg($origlocation, $extension, 190, 120);
if (preg_match("/gif/",$extension)){
imagegif($new_image, $thumblocation);
} else {
imagejpeg($new_image, $thumblocation);
}
Pouvez-vous montrer un exemple avant-après? –
Je ne suis pas 100% clair, mais il semble que certaines des images que vous obtenez sont d'une certaine taille et que votre script le redimensionne plus GRAND qu'il ne l'était à l'origine? La qualité sera terrible si vous faites cela. – Jage
Non, le script redimensionnera l'image proportionnellement si une seule taille est donnée. Si deux tailles sont données, elles seront redimensionnées et le reste sera coupé sans changer le rapport d'aspect. Les images rééchantillonnées ont toujours une résolution beaucoup plus faible que l'image originale. La photo ci-dessus n'est pas l'original, ils sont à la fois la même résolution mais l'avant est sauvegardé avec photoshop et l'après est sauvegardé avec mon script. – kalpaitch