Drawing Rectangles with Rounded Corners with Pillow and Python

Pillow is a package devoted to working with images in Python. Starting in Pillow 8.2, there is a new drawing type: the rounded rectangle. A rounded rectangle lets you round the corners of the rectangle. So instead of sharp corners, you get rounded ones! You can read all about the new drawing type in the Pillow documentation.

Getting Started

Make sure that you have the latest version of Pillow. If you have a version of Pillow older than 8.2, then you won’t be able to use this new type of drawing.

Here is how you can upgrade Pillow:

python3 -m pip install pillow --upgrade

Now that you have Pillow installed or upgraded, you can use the new drawing type.

Drawing a Rounded Rectangle

You are now ready to draw a rounded rectangle. Open up a new file in your favorite Python IDE and add the following code:

# draw_rounded_rectangle.py

from PIL import Image, ImageDraw


def rectangle(output_path):
    image = Image.new("RGB", (400, 400), "green")
    draw = ImageDraw.Draw(image)
    # Draw a regular rectangle
    draw.rectangle((200, 100, 300, 200), fill="red")
    # Draw a rounded rectangle
    draw.rounded_rectangle((50, 50, 150, 150), fill="blue", outline="yellow",
                           width=3, radius=7)
    image.save(output_path)
    
    
if __name__ == "__main__":
    rectangle("rounded_rectangle.jpg")

The rounded_rectangle() function takes in a tuple of four integers. These integers define the two points of the bounding box. The radius defines how much to round the corners. You can fill the rectangle with a color. You can also add a border using the outline parameter. The width is the number of pixels thick the border should be.

When you run this code, it will create an image that contains a regular rectangle and a rectangle with rounded corners that looks like this:

Rounded Rectangle Example

The blue rectangle on the left shows what a rounded rectangle looks like. If you set the radius to zero, then the corners are not rounded at all. The larger the radius value, the larger the curve on the corners.

Wrapping Up

While this new drawing type isn’t amazing, it’s a nice new tool to add to your drawing toolkit. If you are stuck using a version of Pillow older than 8.2, there are some alternate solutions for creating rounded rectangles on StackOverflow. Have fun!