В настоящее время у меня есть скрипт, в котором пользователи могут загружать файлы изображений любых размеров. Загруженное изображение отправляется с помощью ajax в сценарий PHP, где оно должно быть изменено и сохранено на сервере. Процесс изменения размера не должен обрезать или искажать изображение, а скорее изменять его размер до определенного размера c, добавляя белый цвет по бокам или сверху / снизу, если он не совсем соответствует размерам. У меня этот процесс отлично работает для квадратного изображения, но при попытке изменить процесс для работы с размерами прямоугольника он больше не работает правильно.
$sourceImage = imagecreatefromjpeg("../img/whiteBG.jpg");
$dimensions = getimagesize($files["tmp_name"][$i]);
$ratio = $dimensions[0] / $dimensions[1]; // width/height
$dst_y = 0;
$dst_x = 0;
//final image should be 600x360
if ($ratio > 1) {
$width = 600;
$height = 360 / $ratio;
$dst_y = (360 - $height) / 2;
} else {
$width = 600 * $ratio;
$height = 360;
$dst_x = (600 - $width) / 2;
}
$src = imagecreatefromstring(file_get_contents($files["tmp_name"][$i]));
$dst = imagecreatetruecolor($width, $height);
imagecopyresampled($dst, $src, 0, 0, 0, 0, $width, $height, $dimensions[0], $dimensions[1]);
imagecopymerge($sourceImage, $dst, $dst_x, $dst_y, 0, 0, imagesx($dst), imagesy($dst), 100);
$moved = imagepng($sourceImage, $dir . $filename);
Выводимое изображение ($ Move) должно иметь окончательные размеры 600 х 360. Вместо этого, окончательное изображение всегда искажается. Если загружено высокое соотношение изображения, конечный продукт будет растянут по ширине. Если загружено более широкое соотношение изображений, оно сжимается и выравнивается с дополнительным верхним и нижним интервалом. whiteBG.jpg - просто белый jpeg с размерами 600x360