Io ho effettuato qualche modifica tempo fa al calcolo proporzionale.
codice:
if (($width/$maxwidth) < ($height/$maxheight)) {
$prop = ceil ($width / $maxwidth);
$height1 = ceil ($height / $prop);
$width1 = $maxwidth;

} else {
$prop = ceil ($height / $maxheight);
$width1 = ceil ($width / $prop);
$height1 = $maxheight;
}
Anch'io usavo prima quella funzione, ma la trovavo inidonea per l'adattamento delle immagini su formati verticali e orizzontali.
Perciò calcolo il rapporto tra base/basemax e altezza/altezzamax e in base a quello ridimensiono.