У меня есть сценарий, который успешно создает эскизы, но они отображаются с низким качеством. Есть ли что-то, что я могу изменить в сценарии, чтобы улучшить качество эскизов?
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; }
Единственное, что я могу предложить с помощью этого кода:
$final_width_of_image
чтобы увеличить изображение. quality
в imagejpeg
; согласно руководству PHP , он колеблется от 0 до 100, а 100 – это лучшее качество. 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); }