Как изменить размер изображения до фиксированной ширины & amp; высота при сохранении соотношения сторон в PHP?

Я пытаюсь пакетным образом изменить размер изображения до размера 250 х 250 в PHP

Все исходные изображения имеют размер больше 250 x 250, так что это полезно.

Я хочу сохранить соотношение сторон, но сделать их все 250 х 250. Я знать что часть изображения будет обрезана для этого. Это не проблема для меня

Проблема в том, что мой текущий скрипт работает только с шириной и высотой в соответствии с аспектом, но иногда изображение в конечном итоге будет, скажем, 250 x 166. Я не могу это использовать.

В этом случае его необходимо будет изменить в противоположном направлении (высота к ширине)

Как должен выглядеть сценарий, чтобы всегда делать окончательное изображение 250 х 250 без растяжения. Опять же, мне все равно, есть ли обрезка. Я предполагаю, что где-то там будет кто-то еще, но сейчас это над моей головой. Я — больше человек переднего конца.

Любая помощь будет отличной.

Ниже приведена соответствующая часть моего полного сценария:

$width = 250;
$height = true;

// download and create gd image
$image = ImageCreateFromString(file_get_contents($url));

// calculate resized ratio
// Note: if $height is set to TRUE then we automatically calculate the height based on the ratio
$height = $height === true ? (ImageSY($image) * $width / ImageSX($image)) : $height;

// create image
$output = ImageCreateTrueColor($width, $height);

ImageCopyResampled($output, $image, 0, 0, 0, 0, $width, $height, ImageSX($image), ImageSY($image));

// save image
ImageJPEG($output, $destdir, 100);

0

Решение

    $newWidth = 250;
$newHeight = 250;

// download and create gd image
$image = ImageCreateFromString(file_get_contents($url));
$width = ImageSX($image);
$height = ImageSY($image);

$coefficient =  $newHeight / $height;
if ($newHeight / $width > $coefficient) {
$coefficient = $newHeight / $width;
}

// create image
$output = ImageCreateTrueColor($newWidth, $newHeight);

ImageCopyResampled($output, $image, 0, 0, 0, 0, $width * $coefficient, $height * $coefficient, $width, $height);

// save image
ImageJPEG($output, $destdir, 100);
2

Другие решения

Других решений пока нет …