Skip to Content
ModulesPillow TutorialAdvanced Image Processing

Advanced Image Processing with Pillow

Pillow offers advanced image processing techniques such as masking, blending, creating thumbnails, and using alpha transparency to create dynamic and visually appealing images.


Masking and Blending Images

Masking Images

Masking allows you to combine images based on a mask, where the mask controls the transparency of the overlay.

from PIL import Image # Open base image and overlay image base_img = Image.open("background.jpg") overlay_img = Image.open("overlay.png").resize(base_img.size) # Create a mask (grayscale) mask = Image.open("mask.png").convert("L") # Combine images using the mask blended_img = Image.composite(overlay_img, base_img, mask) blended_img.show()

Blending Images

Blending combines two images with a specified alpha (transparency) value.

# Blend images with 50% transparency blended_img = Image.blend(base_img, overlay_img, alpha=0.5) blended_img.show()

Creating Thumbnails

Thumbnails are smaller representations of images, useful for previews or galleries.

Example: Create a Thumbnail

# Open an image img = Image.open("example.jpg") # Create a thumbnail with a max size of (128, 128) img.thumbnail((128, 128)) img.show()

Thumbnails preserve the aspect ratio of the image while resizing it.


Using Alpha Transparency

Alpha transparency enables the creation of images with transparent regions.

Adding an Alpha Channel

# Open an image img = Image.open("example.jpg").convert("RGBA") # Create a transparent region alpha = Image.new("L", img.size, 128) # 50% transparency img.putalpha(alpha) img.show()

Working with Transparent Overlays

# Open base and overlay images base_img = Image.open("background.jpg").convert("RGBA") overlay_img = Image.open("overlay.png").convert("RGBA").resize(base_img.size) # Blend using alpha transparency blended_img = Image.alpha_composite(base_img, overlay_img) blended_img.show()

Practical Applications

Example 1: Watermarking an Image

Add a transparent text watermark to an image.

from PIL import ImageDraw, ImageFont # Open an image img = Image.open("photo.jpg").convert("RGBA") # Create a watermark watermark = Image.new("RGBA", img.size, (255, 255, 255, 0)) draw = ImageDraw.Draw(watermark) font = ImageFont.truetype("arial.ttf", 36) draw.text((10, 10), "Watermark", fill=(255, 255, 255, 128), font=font) # Apply the watermark watermarked_img = Image.alpha_composite(img, watermark) watermarked_img.show()

Example 2: Create a Circular Thumbnail

Crop an image into a circular thumbnail using masking.

# Open an image img = Image.open("photo.jpg").resize((200, 200)) # Create a circular mask mask = Image.new("L", img.size, 0) draw = ImageDraw.Draw(mask) draw.ellipse((0, 0, img.size[0], img.size[1]), fill=255) # Apply the mask circular_thumb = Image.composite(img, Image.new("RGB", img.size, "white"), mask) circular_thumb.show()

Try It Yourself

Problem 1: Blend Two Images

Write a script to blend two images (image1.jpg and image2.jpg) with 70% transparency for image1.

Show Solution

from PIL import Image img1 = Image.open("image1.jpg") img2 = Image.open("image2.jpg").resize(img1.size) blended_img = Image.blend(img1, img2, alpha=0.7) blended_img.show()

Create thumbnails for all .jpg images in a folder and save them in a thumbnails directory.

Show Solution

import os from PIL import Image input_folder = "images" output_folder = "thumbnails" os.makedirs(output_folder, exist_ok=True) for filename in os.listdir(input_folder): if filename.endswith(".jpg"): img = Image.open(os.path.join(input_folder, filename)) img.thumbnail((128, 128)) img.save(os.path.join(output_folder, filename))

Master these advanced techniques to create visually stunning images and add professional touches to your projects with Pillow!

Last updated on