Не верный рассчет соотношения сторон?
Как-то у вас чересчур сложно вычисляется всё.$width = $img->getImageWidth();
$height = $img->getImageHeight();
if ($height*16 > $width*9) {
  $width = $height*16/9;
} else {
  $height = $width*9/16;
}
Вы производите вычисления с плавающей точно, но потом округляете до целого, и так дважды. Вот вам и разница.