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

    # Black background
    new_image = Image.new('RGBA', new_image_size)

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

    return new_image