Функция imagecopyresampled полезна для создания эскиза или изменить размер изображения, сохраняя при этом соотношение сторон:Select PHP, изменение размера алгоритм
$fn = $_FILES['data']['tmp_name'];
$size = getimagesize($fn);
$width = $size[0];
$height = $size[1];
$ratio = $width/$height;
if ($ratio > 1 && $size[0] > 500) { $width = 500; $height = 500/$ratio; }
else { if ($ratio <= 1 && $size[1] > 500) { $width = 500 * $ratio; $height = 500; }}
$src = imagecreatefromstring(file_get_contents($fn));
$dst = imagecreatetruecolor($width, $height);
imagecopyresampled($dst, $src, 0, 0, 0, 0, $width, $height, $size[0], $size[1]);
imagedestroy($src);
imagejpeg($dst, 'test.jpg');
imagedestroy($dst);
Как выбрать алгоритм изменения размера используемого PHP?
Примечание: как указано in this question, установка imagesetinterpolation($dst, IMG_BILINEAR_FIXED);
или такие вещи не работают.
Согласно тестам, которые я сделал (на другом языке), «билинейной изменение размера» иногда дает лучший результат, чем бикубический, а иногда наоборот (зависит, если это сокращение или преобразования).
Как отметил [здесь] (http://php.net/manual/fr/function.imagecopyresampled.php#54448): «Следует отметить, что функция imagecopyresampled() гораздо более размыта, чем Photoshop CS default bicubic funtion и похож на туманную версию билинейной функции Photoshop. В документации не указано, какой алгоритм используется при повторной выборке ». – Basj
Похоже, что это не относится к imagecopyresampled - я удалю его как неправильное, пока я пытаюсь его обработать. Сожалею. –
Как указано [в этом вопросе] (http://stackoverflow.com/q/41729409/1422096), установка 'imagesetinterpolation ($ dst, IMG_BILINEAR_FIXED);' или такие вещи, похоже, не работают. – Basj