How to Use PIL for Image Manipulation in Python

PIL (Python Imaging Library) is a powerful Python library for opening, manipulating, and saving many different image file formats. It provides a wide range of image processing tasks such as resizing, cropping, rotating, and applying various filters to images.

In this tutorial, we will explore the capabilities of PIL and learn how to use it for image manipulation in Python.

Installing PIL

Before we get started, let’s make sure we have PIL installed. Open a terminal or command prompt and run the following command:

pip install pillow

This will install the Pillow library, which is a modern fork of PIL that supports Python 3.

Opening and Displaying Images

To begin, let’s open an image using PIL and display it:

from PIL import Image

# Open an image file
image = Image.open("image.jpg")

# Display the image
image.show()

In the code above, we import the Image class from the PIL module and use its open() method to open an image file called “image.jpg”. The open() method returns an Image object that represents the image.

To display the image, we use the show() method of the Image object. This opens a new window and displays the image using the default image viewer on your system.

Resizing Images

Resizing an image is a common task in image manipulation. PIL provides a simple way to resize images using the resize() method.

from PIL import Image

# Open an image file
image = Image.open("image.jpg")

# Resize the image to a specific width and height
resized_image = image.resize((800, 600))

# Display the resized image
resized_image.show()

In the code above, we use the resize() method of the Image object to resize the image to a specific width of 800 pixels and a height of 600 pixels. The resize() method takes a tuple as its argument, representing the new size of the image.

Note that resizing an image can distort its aspect ratio. If you want to preserve the aspect ratio, you can use the thumbnail() method instead of resize(). The thumbnail() method resizes the image while maintaining its aspect ratio.

Cropping Images

Cropping an image is another common task in image manipulation. PIL provides the crop() method to crop an image.

from PIL import Image

# Open an image file
image = Image.open("image.jpg")

# Crop the image to a specific region
cropped_image = image.crop((100, 100, 300, 300))

# Display the cropped image
cropped_image.show()

In the code above, we use the crop() method of the Image object to crop the image. The crop() method takes a tuple as its argument, representing the region to be cropped. The tuple contains four values: the left position, the upper position, the right position, and the lower position of the region.

Rotating Images

Rotating an image is useful when you want to change its orientation. PIL provides the rotate() method to rotate an image.

from PIL import Image

# Open an image file
image = Image.open("image.jpg")

# Rotate the image by 90 degrees clockwise
rotated_image = image.rotate(-90)

# Display the rotated image
rotated_image.show()

In the code above, we use the rotate() method of the Image object to rotate the image. The rotate() method takes a single argument, representing the angle of rotation in degrees. Positive values rotate the image counterclockwise, and negative values rotate it clockwise.

Applying Filters to Images

PIL provides various filters that can be applied to images to achieve different effects. Let’s take a look at a few examples.

Grayscale Filter

Applying a grayscale filter converts an image to grayscale.

from PIL import Image

# Open an image file
image = Image.open("image.jpg")

# Convert the image to grayscale
grayscale_image = image.convert("L")

# Display the grayscale image
grayscale_image.show()

In the code above, we use the convert() method of the Image object to convert the image to grayscale. The convert() method takes a string argument representing the mode to convert the image to. In this case, we use “L” to indicate grayscale.

Blur Filter

Applying a blur filter blurs an image, giving it a softer appearance.

from PIL import Image, ImageFilter

# Open an image file
image = Image.open("image.jpg")

# Apply a blur filter to the image
blurred_image = image.filter(ImageFilter.BLUR)

# Display the blurred image
blurred_image.show()

In the code above, we import the ImageFilter class from the PIL module to access the predefined filters. We use the filter() method of the Image object to apply the blur filter. The filter() method takes an argument that specifies the filter to apply.

Saving Images

After performing image manipulation tasks using PIL, you may want to save the modified images. PIL provides the save() method to save images in different file formats.

from PIL import Image

# Open an image file
image = Image.open("image.jpg")

# Perform some image manipulation tasks

# Save the modified image to a new file
image.save("modified_image.jpg")

In the code above, we use the save() method of the Image object to save the modified image. The save() method takes a string argument representing the file name to save the image to.

If you want to save the image in a different file format, you can specify the format by including the file extension in the file name. For example, to save the image as a PNG file, you can use image.save("modified_image.png").

Conclusion

In this tutorial, we learned how to use PIL for image manipulation in Python. We explored various image processing tasks such as resizing, cropping, rotating, and applying filters to images. PIL provides a simple and powerful way to perform these tasks and offers a wide range of image manipulation capabilities.

PIL is a versatile library and can be used for many other advanced tasks such as image enhancement, color space conversion, and histogram analysis. I encourage you to explore the official PIL documentation to learn more about its capabilities and experiment with different image manipulation tasks.

If you enjoyed this tutorial and want to take your Python image manipulation skills to the next level, you may also be interested in libraries like OpenCV and scikit-image, which provide even more advanced image processing features.

Related Post