Я пытался выяснить, как изменить размер загруженного изображения в PHP, чтобы оно не было меньше заданного размера (650x650). Однако, если пользователь загружает изображение, которое уже меньше моего минимума 650 с обеих сторон, никаких действий предпринимать не нужно.
Сценарий 1 - изображение шириной 2000px на 371px обновляется - размер не изменится, так как 371px уже меньше моего минимума.
Сценарий 2 - изображение размером 2000 на 1823 пикселя загружено - здесь я должен изменить размер изображения как можно ближе к минимуму, но не допускать, чтобы ширина или высота были ниже 650 пикселей.
Вот строки, о которых я думал до сих пор (я использую отличный скрипт simpleImage, чтобы помочь с изменением размера и получением размеров):
$curWidth = $image->getWidth();
$curHeight = $image->getHeight();
$ratio = $curWidth/$curHeight;
if ($curWidth>$minImageWidth && $curHeight>$minImageHeight)
{
//both dimensions are above the minimum, so we can try scaling
if ($curWidth==$curHeight)
{
//perfect square :D just resize to what we want
$image->resize($minImageWidth,$minImageHeight);
}
else if ($curWidth>$curHeight)
{
//height is shortest, scale that.
//work out what height to scale to that will allow
//width to be at least minImageWidth i.e 650.
if ($ratio < 1)
{
$image->resizeToHeight($minImageWidth*$ratio);
}
else
{
$image->resizeToHeight($minImageWidth/$ratio);
}
}
else
{
//width is shortest, so find minimum we can scale to while keeping
//the height above or equal to the minimum height.
if ($ratio < 1)
{
$image->resizeToWidth($minImageHeight*$ratio);
}
else
{
$image->resizeToWidth($minImageHeight/$ratio);
}
}
Однако это дает мне некоторые странные результаты, время от времени оно все равно будет масштабироваться ниже минимума. Единственная его часть, которая работает, как и ожидалось, - это проверка размеров, превышающих минимальные, - она не масштабирует ничего слишком маленького.
Я думаю, что моя самая большая проблема здесь заключается в том, что я не до конца понимаю взаимосвязь между соотношением сторон изображения и размерами, и как определить, какие размеры я смогу масштабировать, чтобы они превышали мои минимумы. Есть предложения?