Примечание: я не делаю Python, так что это псевдокод.
Вам нужны относительные пропорции двух блоков, поскольку они определяют, какая из новых осей должна быть одинакового размеракак новая коробка:
r_old = old_w / old_h
r_new = new_w / new_h
if (r_old > r_new) then
w = new_w // width of mapped rect
h = w / r_old // height of mapped rect
x = 0 // x-coord of mapped rect
y = (new_h - h) / 2 // y-coord of centered mapped rect
else
h = new_h
w = h * r_old
y = 0
x = (new_w - w) / 2
endif