Search code examples
pythonimageimage-processingimage-resizing

Python: Image resizing: keep proportion - add white background


I would like to create a Python script to resize images, but not changing its proportions, just by adding a white background

(So, a : 500*700 px image would transform to a 700*700 px image by adding 100 px of a white band on each side)

The three image types I use are .PNG, .JPG and .GIF. I am not even sure it is possible for Gifs, PNG and JPG would already be awesome.

In my case, they have to be squares. But if any of you manage to do it for adaptable to any proportion, it would benefit the maximum number of people that see this thread and you would be even more awesome !

I saw same threads for other languages but not python, do you guys know how you do this ?

PS : I am using Python 3

What I tried :

Combining 3 images together.

If we take our 500*700 px image : Creating two white images of 100*700px and put one on each side of the image. Inspired by :

Combine several images horizontally with Python

But, I am kind of new on python, and I haven't succeded.


Solution

  • Finally did it :

    def Reformat_Image(ImageFilePath):
    
        from PIL import Image
        image = Image.open(ImageFilePath, 'r')
        image_size = image.size
        width = image_size[0]
        height = image_size[1]
    
        if(width != height):
            bigside = width if width > height else height
    
            background = Image.new('RGBA', (bigside, bigside), (255, 255, 255, 255))
            offset = (int(round(((bigside - width) / 2), 0)), int(round(((bigside - height) / 2),0)))
    
            background.paste(image, offset)
            background.save('out.png')
            print("Image has been resized !")
    
        else:
            print("Image is already a square, it has not been resized !")
    

    Thanks to @Blotosmetek for the suggestion, pasting a centered image is definitely simpler than creating images and combining them !

    PS : If you don't have PIL yet, the library's name to install it with pip is "pillow", not PIL. But still, you use it as PIL in the code.