Вам нужна функция, которая будет рассчитывать размеры миниатюр на основе ширины и высоты исходного изображения, а также максимальной ширины и высоты миниатюр:
function setWidthHeight($srcWidth, $srcHeight, $maxWidth, $maxHeight){
$ret = array($srcWidth, $srcHeight);
$ratio = $srcWidth / $srcHeight;
if($srcWidth > $maxWidth || $srcHeight > $maxHeight){
$ret[0] = $maxWidth;
$ret[1] = $ret[0] / $ratio;
if($ret[1] > $maxHeight){
$ret[1] = $maxHeight;
$ret[0] = $maxHeight * $ratio;
}
}
$ret[0] = intval(ceil($ret[0]));
$ret[1] = intval(ceil($ret[1]));
return $ret;
}
Затем вы можете использовать любую процедуру генерации уменьшенного изображения, которая вам нравится, imagecopyresampled (...) или $ imageMagick-> thumbnailImage ($ newWidth, $ newHeight);