Сохранение пропорций при изменении размера изображений с использованием библиотеки WideImage PHP

Я ищу, чтобы изменить размер изображения до заранее определенного максимального размера, сохраняя соотношение сторон с помощью WideImage Library.

Пример:

Максимально допустимые размеры: 200x200

Размер входного изображения: логотип 300x200 (соотношение сторон 1,5:1),

Текущий размер выходного изображения: 200x200

Ожидаемый размер выходного изображения: 200x133 (соотношение сторон 1,5:1).

В настоящее время изображения искажаются при изменении соотношения сторон. Что нужно сделать, чтобы сохранить это соотношение сторон?

Я использую код, найденный ниже.

$targetWidth = 200;
$targetHeight = 200;

$sourceRatio = $sourceWidth / $sourceHeight;
$targetRatio = $targetWidth / $targetHeight;

if ( $sourceRatio < $targetRatio ) {
    $scale = $sourceWidth / $targetWidth;
} else {
    $scale = $sourceHeight / $targetHeight;
}

$resizeWidth = (int)($sourceWidth / $scale);
$resizeHeight = (int)($sourceHeight / $scale);


$img->resize($resizeWidth, $resizeHeight)

PS: я получил вышеупомянутую логику от изменения размера изображения без искажений, сохраняя соотношение сторон, а затем обрезать избыток с помощью WideImage

1 ответ

Решение

Эта простая логика пришла мне на помощь.

$targetWidth = 200;
$targetHeight = 200;

$ratio = $srcWidth / $srcHeight;

if ($ratio > 1) {
    $resizeWidth = $targetWidth;
    $resizeHeight= $targetHeight / $ratio;
} else {
    $resizeWidth = $targetWidth * $ratio;
    $resizeHeight= $targetHeight;
}

$img->resize($resizeWidth, $resizeHeight)
Другие вопросы по тегам