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 [2]: calculate_image_resize(1700, 330, max=150) w: 1700.0 h: 330.0 r: 5.15151515152 landscape Out[2]: (150, 29) In [3]: calculate_image_resize(170, 330, max=150) w: 170.0 h: 330.0 r: 0.515151515152 portrait Out[3]: (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