Python Imaging Library (сокращенно PIL) — библиотека языка Python (версии 2), предназначенная для работы с растровой графикой.
Разработка библиотеки прекращена (последняя правка датируется 2011 годом). Однако проект под названием Pillow, являющийся форком PIL, развивается и включает, в том числе, поддержку Python 3.x. Этот форк был принят в качестве замены оригинальной библиотеки и включён в некоторые дистрибутивы Linux, включая Debian и Ubuntu (с 13.04).
Возможности библиотеки
- поддержка бинарных, полутоновых, индексированных, полноцветных и CMYK изображений;
- поддержка форматов BMP, EPS, GIF, JPEG, PDF, PNG, PNM, TIFF и некоторых других на чтение и запись;
- поддержка множества форматов (ICO, MPEG, PCX, PSD, WMF и др.) только для чтения;
- преобразование изображений из одного формата в другой;
- правка изображений (использование различных фильтров, масштабирование, рисование, матричные операции и т. д.);
- использование библиотеки из Tkinter и PyQt.
Требует наличия библиотек zlib (для PNG), libjpeg, freetype2 (для OpenType/TrueType).
Примеры

Надпись на цветном фоне можно создать с помощью метода text объекта-изображения. В следующем примере надпись наносится на вновь созданное изображение размером 100 на 50 пикселей:
from PIL import Image, ImageDraw text = "Hello, PIL!!!" color = (0, 0, 120) img = Image.new('RGB', (100, 50), color) imgDrawer = ImageDraw.Draw(img) imgDrawer.text((10, 20), text) img.save("pil-basic-example.png")
Следующий пример конвертирует файлы формата JPEG в формат PNG:
import os from PIL import Image def convert_jpegs_to_pngs(folder_path): # Проверяет, является ли указанный путь папкой if not os.path.isdir(folder_path): print(f"Error: {folder_path} is not a valid folder.") return # Перебирает все файлы в папке for filename in os.listdir(folder_path): # Проверяет, имеет ли файл расширение.jpg или.jpeg if filename.lower().endswith(".jpg") or filename.lower().endswith(".jpeg"): # Полный путь к файлу jpeg_path = os.path.join(folder_path, filename) # Путь к преобразованному файлу png_path = os.path.join(folder_path, os.path.splitext(filename)[0] + ".png") try: # Открывает изображение JPEG with Image.open(jpeg_path) as img: # Преобразует и сохраняет как PNG img.save(png_path, "PNG") print(f"Converted {jpeg_path} to {png_path}") except Exception as e: print(f"Error converting {jpeg_path}: {e}")