Не совсем понятно, о чем вы спрашиваете.
1) Сколько происходит масштабирование? Если это не так уж и много, лучше оставить CSS.
2) Я полагаю, вы используете GD или ImageMagick или что-то еще? Возможно, вы ищете что-то вроде этого:
function scale($x,$y,$maxX, $maxY) {
if ($x > $maxX) return array($maxX, $maxX / $x * $y);
else return array($x, $y);
}
...
<declare variables $toScaleX, $toScaleY, $maxX, $maxY>
list($x, $y) = scale($toScaleX, $toScaleY, $maxX, $maxY);
list($x, $y) = scale($y, $x, $maxY, $maxX);
<$x, $y, are now the desired dimensions to scale to>