Source

cmsplugin-nivoslider / cmsplugin_nivoslider / thumbnail_processors.py

# Solution found there:
# http://stackoverflow.com/questions/11960079/padded-fit-with-easy-thumbnails

import Image

def pad_image(image, **kwargs):
    'Pad an image to make it the same aspect ratio of the desired thumbnail.'

    img_width, img_height = image.size
    des_width, des_height = kwargs['size']
    fit = (float(img_width) / des_width,
           float(img_height) / des_height)

    if fit[0] > fit[1]:
        new_image_size = (img_width, int(round(des_height * fit[0])))
        top = (new_image_size[1] - img_height) / 2
        left = 0
    elif fit[0] < fit[1]:
        new_image_size = (int(round(des_width * fit[1])), img_height)
        top = 0
        left = (new_image_size[0] - img_width) / 2
    else:
        return image

    try:
        # Black background
        new_image = image.resize(new_image_size)
        new_image.paste((0, 0, 0, 0))

        new_image.paste(image, (left, top))

        return new_image
    except:
        return image