Crop a part of the image with Python, Pillow (trimming)

Posted: | Tags: Python, Pillow, Image Processing

The image processing library Pillow (PIL) of Python provides Image.crop() for cutting out a partial area of an image.

This article describes the following contents with sample code.

  • Normal crop
  • Specify outside area
  • Crop the center of the image
  • Crop the largest square from the rectangle

Please see the following article for the installation and basic usage of Pillow (PIL).

Use resize() to resize the whole image instead of cutting out a part of the image, and use putalpha() to create a transparent image by cutting out a shape other than a rectangle (such as a circle).

Use slicing to crop the image represented by the NumPy array ndarray.

Import Image from PIL and open the target image.

from PIL import Image

im = Image.open('data/src/astronaut_rect.bmp')

original image - astronaut

Normal crop

Set the cropping area with box=(left, upper, right, lower).

The top left coordinates correspond to (x, y) = (left, upper), and the bottom right coordinates correspond to (x, y) = (right, lower). The area to be cropped is left <= x <right and upper <= y <lower, and the pixels of x = right andy = lower are not included.

Be careful not to forget that box requires ().

im_crop = im.crop((60, 20, 400, 200))
im_crop.save('data/dst/astronaut_pillow_crop.jpg', quality=95)

If you just want to save the cropped image without using it for other operations, you can write in one line.

im.crop((60, 20, 400, 200)).save('data/dst/astronaut_pillow_crop.jpg', quality=95)

Pillow Image.crop normal

Specify outside area

Even if the outside of the image is set in the cropping area, an error is not raised, and the image is displayed in black.

im_crop_outside = im.crop((200, 150, 600, 360))
im_crop_outside.save('data/dst/astronaut_pillow_crop_outside.jpg', quality=95)

Pillow Image.crop outside area

Crop the center of the image

If you want to crop the center of the image to any size, it is convenient to define the following function.

def crop_center(pil_img, crop_width, crop_height):
    img_width, img_height = pil_img.size
    return pil_img.crop(((img_width - crop_width) // 2,
                         (img_height - crop_height) // 2,
                         (img_width + crop_width) // 2,
                         (img_height + crop_height) // 2))
source: imagelib.py

Usage example:

im_new = crop_center(im, 300, 150)
im_new.save('data/dst/astronaut_pillow_crop_center.jpg', quality=95)

Pillow Image.crop center

Crop the largest square from the rectangle

When creating a thumbnail image, you may need to trim a square as large as possible from the rectangular image.

Define a function that crops a square of short side length from the center of the rectangular image.

Use size attribute to get the height and width of the image, and min() to get the shorter one. The function crop_center() defined above is used.

def crop_max_square(pil_img):
    return crop_center(pil_img, min(pil_img.size), min(pil_img.size))
source: imagelib.py

Usage example:

im_new = crop_max_square(im)
im_new.save('data/dst/astronaut_pillow_crop_max_square.jpg', quality=95)

Pillow Image.crop largest square

See the following article for more information about generating thumbnail images with Pillow.

Related Categories

Related Articles