Сохранение пропорций при изменении размера изображений с использованием библиотеки 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)