pythonpngthumbnailspython-imaging-libraryalpha

PIL: Thumbnail and end up with a square image


Calling

image = Image.open(data)
image.thumbnail((36,36), Image.NEAREST)

will maintain the aspect ratio. But I need to end up displaying the image like this:

<img src="/media/image.png" style="height:36px; width:36px" />

Can I have a letterbox style with either transparent or white around the image?


Solution

  • Paste the image into a transparent image with the right size as a background

    from PIL import Image
    size = (36, 36)
    image = Image.open(data)
    image.thumbnail(size, Image.LANCZOS)
    background = Image.new('RGBA', size, (255, 255, 255, 0))
    background.paste(
        image, (int((size[0] - image.size[0]) / 2), int((size[1] - image.size[1]) / 2))
    )
    background.save("output.png")
    

    EDIT: fixed syntax error