Библиотека Pillow в Python
Библиотека Pillow добавляет в Python довольно мощные возможности обработки изображений, идентифицирует и читает большое количество форматов. Поддержка записи ограничена наиболее часто используемыми форматами. Pillow идеально подходит для приложений пакетной обработки изображений. Ее можно использовать для создания эскизов, преобразования между форматами файлов, печати изображений и т. д.
Библиотека Pillow содержит основные функции обработки изображений:
- содержит ряд готовых операций для изображениями L и RGB (автоконтраст, обрезка, масштабирование,вращение, произвольные аффинные преобразования и .т.д.)
- содержит набор предопределенных фильтров улучшения изображения ( BLUR , DETAIL , SHARPEN и т.д.).
- при сохранении файлов JPEG может использовать настройки качества изображения, эквивалентные настройкам Photoshop.
- умеет делать копирование содержимого экрана (скриншот экрана).
- поддерживает фильтрацию с помощью набора встроенных ядер свертки и преобразования цветового пространства.
- метод гистограммы позволяет извлечь некоторую статистику из изображения, которую можно использовать для автоматического улучшения изображения и для статистического анализа.
- умеет загружать шрифты TrueType или OpenType с последующим созданием объекта шрифта с заданным размером для выполнения надписей на изображении.
- имеет простую 2D-графику для создания новых изображений, ретуширования существующих, а также для создания графики на лету для использования в Интернете.
Содержание:
- Установка Pillow в виртуальное окружение;
- Модель и режим изображений;
- Система координат;
- Прозрачность изображений;
- Пример использования модуля Pillow .
Установка Pillow в виртуальное окружение:
# создаем виртуальное окружение, если нет $ python3 -m venv .venv --prompt VirtualEnv # активируем виртуальное окружение $ source .venv/bin/activate # обновляем `pip` (VirtualEnv):~$ python3 -m pip install -U pip # ставим модуль `Pillow` (VirtualEnv):~$ python3 -m pip install Pillow -U
Модель и режим изображений.
Изображение может состоять из одной или нескольких полос/каналов с данными. Pillow позволяет хранить несколько каналов в одном изображении при условии, что все они имеют одинаковые размеры и глубину. Например, изображение PNG может иметь полосы R , G , B и A для значений прозрачности красного, зеленого, синего и альфа-канала. Многие операции воздействуют на каждую полосу отдельно, например, гистограммы. Полезно думать, что каждый пиксель имеет одно значение для каждой полосы. Чтобы получить количество и названия каналов на изображении, используйте метод Image.getbands() .
Режим изображения mode — это строка, определяющая тип и глубину пикселя изображения. Каждый пиксель использует полный диапазон битовой глубины. Таким образом, 1-битный пиксель имеет диапазон от 0 до 1, 8-битный пиксель имеет диапазон от 0 до 255, 32-разрядный целочисленный пиксель имеет диапазон INT32 , а 32-битный пиксель с плавающей запятой имеет диапазон FLOAT32 .
Библиотека Pillow поддерживает следующие стандартные режимы:
- 1 (черно-белые 1-битные пиксели, хранятся по одному пикселю на байт)
- L (черно-белые 8-битные пиксели)
- P (8-битные пиксели, сопоставленные с любым другим режимом с помощью цветовой палитры)
- RGB (3×8-битные пиксели, истинный цвет)
- RGBA (4×8-битные пиксели, истинный цвет с маской прозрачности)
- CMYK (4×8-битные пиксели, цветоделение)
- YCbCr (3×8-битные пиксели, формат цветного видео)
- Обратите внимание, это относится к стандарту JPEG, а не к стандарту ITU-R BT.2020.
- Диапазон оттенка 0-255 — это масштабированная версия 0 градусов
Pillow пока не поддерживает многоканальные изображения с глубиной более 8 бит на канал.
Прочитать режим изображения можно через атрибут Image.mode . Это строка, содержащая одно из указанных выше значений.
Система координат.
Библиотека Pillow использует декартову пиксельную систему координат с (0,0) в верхнем левом углу. Обратите внимание, что координаты относятся к подразумеваемым углам пикселей. Центр пикселя, адресованного как (0, 0) , на самом деле лежит в (0,5, 0,5) .
Координаты обычно передаются в библиотеку в виде двух кортежей (x, y) . Прямоугольники представляются как 4-х элементный кортеж, причем левый верхний угол дается первым. Например, прямоугольник, покрывающий все изображение размером 800×600 пикселей, записывается как (0, 0, 800, 600).
Размер изображения можно прочитать через атрибут Image.size . Это кортеж из двух элементов, содержащий размер по горизонтали Image.width и вертикали в пикселях Image.height .
Прозрачность изображений.
Если изображение не имеет альфа-канала, то прозрачность может быть указана в атрибуте Image.info с ключом transparency .
В большинстве случаев значение transparency представляет собой одно целое число, описывающее, какое значение пикселя является прозрачным в изображении в режимах 1 , L , I или P . Однако изображения PNG могут иметь три значения, по одному для каждого канала в изображении в режиме RGB , или могут иметь строку байтов для изображения в режиме P (альфа-значение для каждой записи палитры).
Ориентация изображений.
Общим элементом атрибута Image.info изображений в формате JPG и TIFF является тег ориентации EXIF . Это инструкция о том, как следует ориентировать данные изображения при просмотре в программе-просмотрщике изображений. Например, тег может указывать, что изображение повернуто на 90 градусов или зеркально отражено. Чтобы применить эту информацию к сохраняемому изображению, можно использовать Image.exif_transpose() .
Пример использования модуля Pillow .
Прочитать изображение по URL можно следующим образом:
from PIL import Image from urllib.request import urlopen url = "https://python-pillow.org/images/pillow-logo.png" # открываем URL img = Image.open(urlopen(url)) # сохраняем изображение img.save('pillow-logo.png')
Следующий код делает скриншот экрана и выполняет некоторые преобразования с полученным изображением. Все преобразования детально прокомментированы.
from PIL import (Image, ImageEnhance, ImageOps, ImageGrab, ImageDraw, ImageFont) import time # делаем задержку в 2 секунды, что бы # успеть переключиться на нужное окно time.sleep(2) # делаем скриншот im_orig = ImageGrab.grab() # получаем размеры скриншота print(f'Размеры: im_orig.size>') # получаем режим изображения скриншота print(f'Режим: im_orig.mode>') # обрезаем по 100px с каждого края im_orig = ImageOps.crop(im_orig, border=100) # добавляем черную границу в 2px im_orig = ImageOps.expand(im_orig, border=2, fill='#000000') # и с верху добавляем белую границу в 10px im_orig = ImageOps.expand(im_orig, border=10, fill='#ffffff') # делаем надпись на скриншоте idraw = ImageDraw.Draw(im_orig) # текст text = 'DOCS-PYTHON.RU' # подключаем Font и задаем высоту в пикселях font = ImageFont.truetype("/usr/share/fonts/truetype/freefont/FreeSans.ttf", size=18) # вычисляем длину надписи textlength = idraw.textlength(text, font) # вычисляем положение надписи на скриншоте, например по ширине # ширина скриншота - длина надписи - граница 2px + 10px size = (im_orig.size[0]-textlength-12, im_orig.size[1]-32) # накладываем текст на скриншот idraw.text(size, text, font=font, fill='green') # сохраняем обработанный скриншот im_orig.save('scrshoot.png') # сохраняем скриншот в формате `JPG` # с оптимизацией и заданным качеством im_orig.save('scrshoot.jpg', optimize=True, quality=90) # Открываем изображение скриншота # (для примера) with Image.open('scrshoot.png') as im_orig: # получаем формат файла print(f'Формат файла: im_orig.format>') # ВНИМАНИЕ! все дальнейшие преобразования # проделываем с оригинальным изображением `im_orig` # результат каждого преобразования будем сохранять # обесцвечиваем изображение с оттенками серого im = ImageOps.grayscale(im_orig) # сохраняем im.save('scrshoot_grayscale.png') # накладываем сепию 'black='#523224'' im = ImageOps.colorize(im, black='#523224', white='#ffffff') im.save('scrshoot_colorize.png') # отображаем картинку зеркально im = ImageOps.mirror(im_orig) im.save('scrshoot_mirror.png') # `режим сканера` с порогом 150 # т.е. применяем к каждому пикселю картинки функцию `fn` threshold = 150 fn = lambda x : 255 if x > threshold else 0 # метод image.convert('L') - предварительно обесцвечивает картинку im = im_orig.convert('L').point(fn, mode='1') im.save('scrshoot_scan.png') # увеличим резкость im = ImageEnhance.Sharpness(im_orig).enhance(2) im.save('scrshoot_Sharpness.png') # увеличим контрастность im = ImageEnhance.Contrast(im_orig).enhance(2) im.save('scrshoot_Contrast.png') # увеличим насыщенность im = ImageEnhance.Color(im_orig).enhance(2) im.save('scrshoot_Color.png') # изменим размер изображения так, что бы оно вписалось в size size = (700, 700) # соотношения сторон сохраняются im = ImageOps.contain(im_orig, size, method=Image.BICUBIC) im.save('scrshoot_contain.png') # создание `thumbnail` size = (150, 150) im_orig.thumbnail(size) im_orig.save('scrshoot_thumbnail.jpg')
- КРАТКИЙ ОБЗОР МАТЕРИАЛА.
- Функция Image.open() модуля Pillow
- Функция Image.new() модуля Pillow
- Функция Image.frombytes() модуля Pillow
- Функция Image.frombuffer() модуля Pillow
- Функция Image.fromarray() модуля Pillow
- Создание скриншота с использованием Pillow
- Объект Image модуля Pillow
- Обработка GIF изображений в Pillow
- Параметры для JPG, ICO и WebP модуля Pillow
- Извлечение EXIF-тегов модулем Pillow
- Встроенные фильтры улучшения модуля Pillow
- Фильтры передискретизации модуля Pillow
- Подмодуль ImageDraw модуля Pillow
- Функция Image.alpha_composite() модуля Pillow
- Функция Image.blend() модуля Pillow
- Функция Image.composite() модуля Pillow
- Функция Image.merge() модуля Pillow
- Функция Image.eval() модуля Pillow
- Регулировка яркости, контрастности, резкости и насыщенности: Pillow
- Автоматическая регулировка контрастности, Pillow
- Тонирование черно-белого фото модулем Pillow
- Масштабирование изображений с модулем Pillow
- Добавить/обрезать рамку изображения, модуль Pillow
- Перевернуть/отразить изображение, модуль Pillow
- Обесцвечивание/инверсия изображения, модуль Pillow
- Операции с каналами изображений, модуль Pillow
Установка Python Image Library (PIL) в x64 системы на примере CentOS
Ну и напоследок пример установки для CentOS:
Подразумевается, что нужная версия python и python-devel уже установлена в необходимом
виртуальном окружении.yum install libjpeg libjpeg-devel zlib zlib-devel libtiff libtiff-devel freetype freetype-devel wget http://effbot.org/downloads/Imaging-1.1.7.tar.gz tar -zxvf Imaging-1.1.7.tar.gz cd Imaging-1.1.7Теперь патчим setup.py и продолжим уже в необходимом виртуальном окружении:
python setup.py build --force python setup.py installОбработка и генерация изображений в Python. Библиотека Pillow

Нередко нам нужно изменить размер картинки, кропнуть ее, наложить текст и так далее. Все это можно автоматизировать с помощью Python и библиотеки Pillow.
Установка Pillow
Установка производится через pip3. Вводим в консоль:
pip3 install pillow
Комьюнити теперь в Телеграм
Подпишитесь и будьте в курсе последних IT-новостейНачало работы с библиотекой
Для начала нам нужно инициализировать библиотеку в нашем скрипте:
from PIL import Image
В папку со скриптом поместим произвольное изображение. Файл назовем test.jpg.
Теперь откроем изображение через метод в библиотеке:
from PIL import Image img = Image.open('test.jpg') img.show()На экране у нас отобразилось изображение, которое мы добавили в папку:

Для просмотра основной информации об изображении с помощью Pillow используем следующие методы:
from PIL import Image img = Image.open('test.jpg') print(img.format) # Просмотр формата изображения. Выведет 'JPEG' print(img.mode) # Просмотр типа цветового пространства. Выведет 'RGB' print(img.size) # Просмотр размера изображения. Выведет (568, 305) print(img.filename) # Просмотр имени файла. Выведет 'test.jpg' r, g, b = img.split() histogram = img.histogram() print(histogram) # Просмотр значений RGB изображения. Выведет 1750, 255, 267, 237, 276, 299…Обрезка изображений
В Pillow есть методы для кропа (обрезки) изображений. Обрежем наше изображение с помощью метода crop(), передав в параметры координаты обрезки:
from PIL import Image img = Image.open('test.jpg') cropped = img.crop((0, 0, 100, 200)) cropped.save('cropped_test.jpg') img = Image.open('cropped_test.jpg') img.show()После выполнения данного кода, получим следующее изображение:

Поворот изображений
С помощью метода Image.rotate() мы можем поворачивать изображение как нам угодно. В скобках указываем количество градусов, на которое нужно повернуть изображение. Рассмотрим на примере:
from PIL import Image img = Image.open('test.jpg') rotated = img.rotate(180) rotated.save('rotated_test.jpg') img = Image.open('rotated_test.jpg') img.show()
Конвертируем из JPG в PNG с помощью Pillow
Для конвертации нам понадобится открыть изображение и просто сохранить его в другом формате. Рассмотрим на примере:
from PIL import Image img = Image.open('test.jpg') img.save('test_png.png', 'png')Получаем такое же изображение, но в формате PNG.
Изменение размера изображений
Чтобы изменить размер изображения используем метод resize(). Рассмотрим это на примере:
from PIL import Image img = Image.open('test.jpg') img = img.resize((170, 100), Image.ANTIALIAS) img.save('test_text.jpg') img = Image.open('test_text.jpg') img.show()
Пишем текст на изображениях
Для наложения текста на изображение в Pillow существует метод text(), но для начала нужно добавить шрифт. Рассмотрим на примере:
from PIL import Image, ImageDraw, ImageFont img = Image.open('test.jpg') font = ImageFont.truetype("arial.ttf", size=20) idraw = ImageDraw.Draw(img) idraw.text((25, 25), 'TEST test TeSt', font=font) img.save('test_text.jpg') img = Image.open('test_text.jpg') img.show()Получим изображение с текстом:

Генерация пустого изображения
Для создания пустого холста (изображения) используем метод Image.new(). Рассмотрим на примере:
from PIL import Image, ImageDraw, ImageFont img = Image.new('RGB', (200, 200), 'black') img.save('test1.jpg') img = Image.open('test1.jpg') img.show()Получаем черный квадрат:

Теперь давайте нарисуем на этом квадрате белый прямоугольник:
from PIL import Image, ImageDraw, ImageFont img = Image.new('RGB', (200, 200), 'black') idraw = ImageDraw.Draw(img) idraw.rectangle((0, 0, 100, 100), fill='white') img.save('test1.jpg') img = Image.open('test1.jpg') img.show()
Вывод
Мы разобрали основные методы библиотеки Pillow в Python: научились писать текст на изображениях, изменять размер, поворачивать их и даже обрезать.
Надеюсь, статья была полезна для вас. Удачи!
Как установить в pycharm библиотеку PIL

pip install —upgrade pip — пробовала
Отслеживать
3,125 6 6 золотых знаков 18 18 серебряных знаков 33 33 бронзовых знака
задан 9 июл 2019 в 15:48
226 2 2 золотых знака 4 4 серебряных знака 18 18 бронзовых знаков
в thonny все работает
9 июл 2019 в 15:494 ответа 4
Сортировка: Сброс на вариант по умолчанию
В PyCharm вы можете установить библиотеку, пользуясь встроенным средством:
File > Settings > Project: *project_name* > Project InterpreterТам можно настроить путь к вашему Python и установить библиотеку из списка
Отслеживать
ответ дан 9 июл 2019 в 17:33
fedotsoldier fedotsoldier
785 5 5 серебряных знаков 24 24 бронзовых знака1) Активируйте виртуальное окружение (из папки vk ):
venv\Scripts\activate2) Установите Pillow :
pip install --upgrade PillowОшибка в том, что Вы не активировали виртуальное окружение, поэтому установили Pillow в папку C:\Users\User\AppData\Local\Programs\Python\Python37-32\Lib\site-packages .
Cкрипт ищет модуль в папке C:\Users\User\PycharmProjects\vk\venv\Lib\site-packages , следовательно его нужно туда установить, активировав окружение.