Complete Guide to Displaying PIL Images in Jupyter Notebook

Nov 21, 2025 · Programming · 14 views · 7.8

Keywords: Jupyter Notebook | PIL Image Display | IPython Display | Matplotlib Integration | Image Processing

Abstract: This article provides a comprehensive overview of various methods for displaying PIL images in Jupyter Notebook, including the use of IPython's display function, matplotlib integration, and PIL's show method. Based on high-scoring Stack Overflow answers and practical experience, it offers complete code examples and best practice recommendations to help users select the most appropriate image display solution for their specific needs.

Core Methods for PIL Image Display

Displaying PIL images in Jupyter Notebook environment is a common requirement in data science and image processing workflows. Through in-depth analysis of high-scoring Stack Overflow answers and relevant technical documentation, we have summarized several effective display methods.

Using IPython's Display Function

Jupyter Notebook's built-in display function is currently the most concise solution. This method requires no additional module imports and directly calls display on the PIL image object to achieve image rendering.

from PIL import Image
pil_im = Image.open('data/empire.jpg')
display(pil_im)

It is worth noting that in the latest versions of Jupyter Notebook, outputting the image object as the last line of a cell can also trigger automatic display. This implicit display mechanism significantly simplifies the code writing process.

Method Based on IPython.display Module

For scenarios requiring finer control, the Image class provided by the IPython.display module can be used. This method supports loading images directly from file paths and is suitable for situations where PIL image processing is not required.

from IPython.display import Image
pil_img = Image(filename='data/empire.jpg')
display(pil_img)

Matplotlib Integration Display Solution

When image analysis and visualization are needed, converting PIL images to numpy arrays and displaying them through matplotlib is a more appropriate choice. This method fully utilizes matplotlib's rich plotting capabilities.

from matplotlib.pyplot import imshow
import numpy as np
from PIL import Image

%matplotlib inline
pil_im = Image.open('data/empire.jpg', 'r')
imshow(np.asarray(pil_im))

Using the %matplotlib inline magic command ensures images are displayed inline in the Notebook, while the np.asarray function converts PIL images to matplotlib-compatible array format.

Image Preview and Size Adjustment

In practical applications, it is often necessary to adjust the display size of images. PIL library's thumbnail method can conveniently achieve this functionality.

from PIL import Image
from IPython.display import display

path = 'data/empire.jpg'
size = (200, 200)

with Image.open(path) as img:
    img.thumbnail(size)
    display(img)

Using the with statement ensures proper release of image resources, while the thumbnail method adjusts size while maintaining the image's aspect ratio.

External Preview Method

For simple preview needs that don't require inline display, PIL provides the show method. This method opens the image in the system's default image viewer.

pil_im = Image.open('data/empire.jpg', 'r')
pil_im.show()

This method is suitable for quickly checking image content but is not ideal for building complete visualization workflows within the Notebook.

Method Selection Guide

Based on different usage scenarios, we recommend the following selection strategy:

By appropriately selecting display methods, work efficiency in image processing and analysis within Jupyter Notebook can be significantly improved.

Copyright Notice: All rights in this article are reserved by the operators of DevGex. Reasonable sharing and citation are welcome; any reproduction, excerpting, or re-publication without prior permission is prohibited.