Select Page

A simple python function to downsize an image and calculate the new dimensions while keeping aspect ratio.

I needed this functionality for a web application. There are some variations found on the net from which I constructed this simple but effective python function to get ‘the other’ value.

Based on the original image dimensions “i_…” it figures out whether the image is portrait or landscape and calculates either the width or height.

```def calculate_image_resize(i_width, i_height, max=0):

i_width = float(i_width)
i_height = float(i_height)
ratio = i_width / i_height

print 'w:', i_width, 'h:', i_height, 'r:', ratio

if i_width < i_height:
print 'portrait'
c_height = max
c_width = max * ratio
else:
print 'landscape'
c_width = max
c_height = max / ratio

c_width = int(c_width)
c_height = int(c_height)

return c_width, c_height
```

Dropping the function in a python shell and calling it results in this output:

```In : calculate_image_resize(1700, 330, max=150)
w: 1700.0 h: 330.0 r: 5.15151515152
landscape
Out: (150, 29)

In : calculate_image_resize(170, 330, max=150)
w: 170.0 h: 330.0 r: 0.515151515152
portrait
Out: (77, 150)
```

I deliberately left in the obvious 150 so you know instantly which dimension was calculated “c_…”.

Hope this saves people the trouble to figure it out by them selves.

GrtzG