Files
the_information_nexus/tech_docs/python/new_pillow.md
2024-05-01 12:28:44 -06:00

3.1 KiB

Let's focus on Pillow (PIL Fork), an extensive library used for opening, manipulating, and saving many different image file formats in Python. It's a continuation and an extension of the original Python Imaging Library (PIL) and is designed to be user-friendly and efficient for processing images.

Pillow (PIL Fork) Complete Guide

Installation

pip install Pillow

Basic Operations

Opening and Saving Images

from PIL import Image

# Open an image
img = Image.open("path/to/image.jpg")

# Save the image in a different format
img.save("path/to/new_image.png")

Displaying Images

img.show()

Image Manipulation

Cropping Images

# Define the box to crop (left, upper, right, lower)
box = (100, 100, 400, 400)
cropped_img = img.crop(box)
cropped_img.show()

Resizing Images

# Resize the image to a new resolution
new_size = (300, 300)
resized_img = img.resize(new_size)
resized_img.show()

Rotating and Flipping Images

# Rotate the image by 90 degrees
rotated_img = img.rotate(90)
rotated_img.show()

# Flip the image left to right
flipped_img = img.transpose(Image.FLIP_LEFT_RIGHT)
flipped_img.show()

Color Transforms

# Convert to grayscale
gray_img = img.convert('L')
gray_img.show()

Image Enhancements

Pillow provides the ImageEnhance module for adjusting color, brightness, contrast, and sharpness.

from PIL import ImageEnhance

# Enhance the brightness
enhancer = ImageEnhance.Brightness(img)
bright_img = enhancer.enhance(2.0)  # Increase brightness
bright_img.show()

# Enhance the contrast
enhancer = ImageEnhance.Contrast(img)
contrast_img = enhancer.enhance(2.0)  # Increase contrast
contrast_img.show()

Drawing on Images

Pillow allows you to draw on images directly using the ImageDraw module.

from PIL import ImageDraw

draw = ImageDraw.Draw(img)
draw.line((0, 0) + img.size, fill=128)
draw.line((0, img.size[1], img.size[0], 0), fill=128)

Working with Text

You can also use Pillow to add text to images.

from PIL import ImageFont

draw.text((10, 25), "Hello World", fill="black")

# Using a TTF font
font = ImageFont.truetype("path/to/font.ttf", 15)
draw.text((10, 50), "Hello with font", font=font, fill="black")

Potential Use Cases

  • Automating Image Editing: Batch processing images for web optimization, creating thumbnails, or applying watermarks.
  • Data Visualization: Generating dynamic images or charts for web or print.
  • Content Generation: Creating images for social media posts, website banners, or marketing materials programmatically.
  • Machine Learning Preprocessing: Preparing image datasets for training, including resizing, normalization, and augmentation.

Pillow's extensive set of features makes it an essential library for any project that involves image processing in Python. Whether you're developing a web application that handles user-uploaded images, creating graphics dynamically, or preprocessing data for machine learning models, Pillow provides the tools necessary to accomplish these tasks efficiently and effectively.