This snippet demonstrates how to use Python’s multiprocessing
module to process multiple images in parallel, significantly speeding up batch operations like resizing or applying filters.
import os
from PIL import Image
from multiprocessing import Pool
from functools import partial
def process_image(image_path, output_dir, size=(128, 128)):
"""Resize an image and save it to the output directory."""
try:
with Image.open(image_path) as img:
img = img.resize(size, Image.LANCZOS)
output_path = os.path.join(output_dir, os.path.basename(image_path))
img.save(output_path)
print(f"Processed: {image_path}")
except Exception as e:
print(f"Error processing {image_path}: {e}")
def batch_process_images(input_dir, output_dir, num_processes=4):
"""Process all images in a directory in parallel."""
if not os.path.exists(output_dir):
os.makedirs(output_dir)
image_files = [
os.path.join(input_dir, f)
for f in os.listdir(input_dir)
if f.lower().endswith(('.png', '.jpg', '.jpeg'))
]
with Pool(num_processes) as pool:
pool.map(partial(process_image, output_dir=output_dir), image_files)
if __name__ == "__main__":
input_directory = "input_images" # Directory containing source images
output_directory = "output_images" # Directory for resized images
batch_process_images(input_directory, output_directory, num_processes=4)
.png
, .jpg
, and .jpeg
files.pip install pillow
input_images
folder (or modify input_directory
).output_images
.size
in process_image()
to change output dimensions.batch_process_images()
to support other formats.resize()
with other PIL
operations (e.g., convert('L')
for grayscale).This snippet is ideal for data scientists preprocessing datasets or developers building image-heavy applications.