Last modified: Apr 12, 2025 By Alexander Williams

Python Resizing Images Guide

Resizing images is a common task in Python. It helps optimize storage and improve performance. This guide covers the best methods.

Why Resize Images in Python?

Image resizing is useful for many applications. It reduces file size and speeds up processing. It also standardizes dimensions for machine learning.

Common use cases include web development and image recognition. Resized images load faster and consume less bandwidth.

Using PIL/Pillow for Image Resizing

The Python Imaging Library (PIL) is popular for image processing. Its fork Pillow is more maintained. First, install it:

 
# Install Pillow
pip install pillow

Here's how to resize an image with Pillow:


from PIL import Image

# Open image
img = Image.open('input.jpg')

# Resize to 300x300 pixels
resized_img = img.resize((300, 300))

# Save resized image
resized_img.save('output.jpg')

The resize() method takes a tuple of width and height. It returns a new image object. Always save the result to preserve quality.

Maintaining Aspect Ratio

Forced resizing can distort images. Calculate new dimensions to keep proportions. This example reduces width by half while keeping ratio:


from PIL import Image

img = Image.open('input.jpg')
width, height = img.size
new_width = width // 2
new_height = int(height * (new_width / width))

resized_img = img.resize((new_width, new_height))
resized_img.save('output.jpg')

This method prevents stretching. It's ideal for displaying images consistently.

Using OpenCV for Resizing

OpenCV is another powerful library. It's often used with image processing tasks. Install it first:


# Install OpenCV
pip install opencv-python

Here's the OpenCV approach:


import cv2

# Read image
img = cv2.imread('input.jpg')

# Resize using interpolation
resized_img = cv2.resize(img, (300, 300), interpolation=cv2.INTER_AREA)

# Save result
cv2.imwrite('output.jpg', resized_img)

The cv2.resize() function offers interpolation options. INTER_AREA works best for shrinking. INTER_CUBIC is good for enlarging.

Batch Resizing Multiple Images

Process folders of images efficiently. This script resizes all JPGs in a directory:


from PIL import Image
import os

input_folder = 'images/'
output_folder = 'resized/'
size = (800, 600)

for filename in os.listdir(input_folder):
    if filename.endswith('.jpg'):
        img = Image.open(os.path.join(input_folder, filename))
        img.thumbnail(size)
        img.save(os.path.join(output_folder, filename))

The thumbnail() method maintains aspect ratio automatically. It's perfect for creating uniform galleries.

Quality Considerations

Resizing affects image quality. Always work with originals when possible. Save in lossless formats like PNG for critical edits.

For JPEGs, specify quality (1-100):


resized_img.save('output.jpg', quality=90)

Higher values mean better quality but larger files. 85-95 is a good balance.

Conclusion

Python makes image resizing simple. Pillow and OpenCV offer powerful options. Remember to maintain aspect ratios for professional results.

For more advanced techniques, explore PIL image handling. Always test different methods for your specific needs.