Улучшенные миниатюры

У меня есть сценарий, который успешно создает эскизы, но они отображаются с низким качеством. Есть ли что-то, что я могу изменить в сценарии, чтобы улучшить качество эскизов?

function createThumbnail($filename) { $final_width_of_image = 200; $path_to_image_directory = 'images/fullsized/'; $path_to_thumbs_directory = 'images/thumbs/'; if(preg_match('/[.](jpg)$/', $filename)) { $im = imagecreatefromjpeg($path_to_image_directory . $filename); } else if (preg_match('/[.](gif)$/', $filename)) { $im = imagecreatefromgif($path_to_image_directory . $filename); } else if (preg_match('/[.](png)$/', $filename)) { $im = imagecreatefrompng($path_to_image_directory . $filename); } $ox = imagesx($im); $oy = imagesy($im); $nx = $final_width_of_image; $ny = floor($oy * ($final_width_of_image / $ox)); $nm = imagecreatetruecolor($nx, $ny); imagecopyresized($nm, $im, 0,0,0,0,$nx,$ny,$ox,$oy); if(!file_exists($path_to_thumbs_directory)) { if(!mkdir($path_to_thumbs_directory)) { die("There was a problem. Please try again!"); } } imagejpeg($nm, $path_to_thumbs_directory . $filename); $tn = '<img src="' . $path_to_thumbs_directory . $filename . '" alt="image" />'; $tn .= '<br />Congratulations. Your file has been successfully uploaded, and a thumbnail has been created.'; echo $tn; } 

Solutions Collecting From Web of "Улучшенные миниатюры"

Единственное, что я могу предложить с помощью этого кода:

  • Увеличьте значение $final_width_of_image чтобы увеличить изображение.
  • Добавьте третий аргумент quality в imagejpeg ; согласно руководству PHP , он колеблется от 0 до 100, а 100 – это лучшее качество.
  • Не используйте JPEG для ваших эскизов.
  • Используйте imagecopyresampled чтобы получить лучший алгоритм интерполяции пикселей.

imagecopyresampled дает намного лучшие результаты (и использовать параметр качества imagejpeg как уже упоминалось.

Возможно, попробуйте этот код, который использует ImageCopyResampled :

 function createImage($in_filename, $out_filename, $width, $height) { $src_img = ImageCreateFromJpeg($in_filename); $old_x = ImageSX($src_img); $old_y = ImageSY($src_img); $dst_img = ImageCreateTrueColor($width, $height); ImageCopyResampled($dst_img, $src_img, 0, 0, 0, 0, $width, $height, $old_x, $old_y); ImageJpeg($dst_img, $out_filename, 80); ImageDestroy($dst_img); ImageDestroy($src_img); }