Полезный алгоритм, из тех, которые лучше знать. Итак, задача: есть изображение (потенциально - большое), есть максимальная высота и ширина. Надо уменьшить изображение пропорционально так, чтобы оно влезло в эти максимальные пределы.
function getNewSize($size, $maxX, $maxY) {
$k = $maxX / $maxY;
$kimage = $size[0] / $size[1];
if ($kimage > $k) { //resize of maxX
$ksize = $maxX /$size[0];
} else { //resize of maxY
$ksize = $maxY / $size[1];
}
$newX = floor($size[0] * $ksize);
$newY = floor($size[1] * $ksize);
/* image resize */
return [$newX, $newY];
}
Спасибо romach с форума php.ru