Найти в Дзене
Сапбот

Python Pillow. Работа с изображением

Вам понадобится:
1. Python 2. Исходное изображение 3. Ubuntu Linux или WSL (рекомендуется, но не обязательно) Установка с помощью apt-get (Рекомендуемый способ для Ubuntu Linux) sudo apt-get install python3-pip Установка с помощью pip (Рекомендуемый способ для всех остальных ОС) pip install pillow from PIL import Image img = Image.open("<название файла>.<формат файла>") То есть, если у меня есть файл bliss.jpg, то открытие файла будет from PIL import Image img = Image.open("bliss.jpg") Открыли, теперь отобразим на экране. Для этого используется функция img.show from PIL import Image #Импорт библиотеки Image.open("bliss.jpg").show() #Открываем изображение и сразу же показываем на экране ВНИМАНИЕ: img.show всего лишь сохраняет временный файл, и открывает его в просмотре изображений. Если такового у вас нет, см. 3.4. Сохранение Моё оригинальное изображение имеет разрешение 640x427. К примеру, нам необходимо изменить разрешение до 128x128. Для того чтобы это сделать напишем такой код:
fr
Оглавление
Оф. логотип библиотеки Pillow
Оф. логотип библиотеки Pillow

1. Подготовка

Вам понадобится:
1.
Python

2. Исходное изображение

(Я буду использовать это)
(Я буду использовать это)

3. Ubuntu Linux или WSL (рекомендуется, но не обязательно)

2. Установка

Установка с помощью apt-get (Рекомендуемый способ для Ubuntu Linux)

sudo apt-get install python3-pip

Установка с помощью pip (Рекомендуемый способ для всех остальных ОС)

pip install pillow

3. Базовые функции

3.1. Импортирование изображений

from PIL import Image
img = Image.open("<название файла>.<формат файла>")

То есть, если у меня есть файл bliss.jpg, то открытие файла будет

from PIL import Image
img = Image.open("bliss.jpg")

3.2. Отображение на экране

Открыли, теперь отобразим на экране. Для этого используется функция img.show

from PIL import Image #Импорт библиотеки
Image.open("bliss.jpg").show() #Открываем изображение и сразу же показываем на экране

ВНИМАНИЕ: img.show всего лишь сохраняет временный файл, и открывает его в просмотре изображений. Если такового у вас нет, см. 3.4. Сохранение

3.3. Изменяем разрешение изображения

Моё оригинальное изображение имеет разрешение 640x427. К примеру, нам необходимо изменить разрешение до 128x128. Для того чтобы это сделать напишем такой код:


from PIL import Image #Импортируем библиотеку
img = Image.open("bliss.jpg") #Открываем изображение
img = img.resize((128, 128)) #Изменяем разрешение
img.show() #Отображаем на экран
P.S. Дзен требует минимум 300x300 изображение, поэтому пришлось немного увеличить.
P.S. Дзен требует минимум 300x300 изображение, поэтому пришлось немного увеличить.

3.4. Сохранение

Для того чтобы сохранить наше изображение, мы будем использовать функцию im.save. Думаю долго объяснять не нужно т.к. функция работает совершенно также как и im.show.

3.5 Изменение разрешения без изменения соотношения сторон масштабирования

(англ. Relative resizing)

from PIL import Image, ImageOps
size = (100, 150) #Выставление разрешения для масштабирования
with Image.open("bliss.jpg") as im: #Открываем изображение для изменения
ImageOps.contain(im, size).save("imageops_contain.webp") #"Содержит"
ImageOps.cover(im, size).save("imageops_cover.webp") #"Закрывает"
ImageOps.fit(im, size).save("imageops_fit.webp") #"Помещается"
ImageOps.pad(im, size, color="#f00").save("imageops_pad.webp")"Уменьшается"

# thumbnail() тоже используется,
# но изменяет обьект вместо копирования.
im.thumbnail(size) #"Логотип"
im.save("image_thumbnail.webp")
оф. таблица примеров
оф. таблица примеров

3.6. Конвертирования цветности изображения

Список цветовых пространств:

  • RGB - Цветное RGB изображение
  • L - Изображение в оттенках серого
  • 1 - Чёрно-белое изображение с dither'ингом
  • CMYK - Цветное CMYK изображение
  • P - 8-битное изображение привязанное к палитре
  • RGBA - RGB с прозрачностью
  • LAB - CIELAB, чрезвычайно сложный стандарт видео
  • HSV - Цветное HSV изображение
  • I - 32-битный целочисленный стандарт цветов. Плохо описывается в документации, возможно YIQ.
  • F - 32-битный стандарт цветов с плавающей запятой. Также как и I, плохо описывается в документации.

Список экспериментальных цветовых пространств:

  • LA - L с прозрачностью
  • PA - P с прозрачностью
  • RGBX - RGB с увеличенным количеством возможных цветов
  • RGBa - RGB с увеличенным качеством прозрачности
  • La - L с улучшенной прозрачностью
  • I;16 - Информация в рунете отсутствует. Оф. описание: 16-bit unsigned integer pixels
  • I;16L - Информация в рунете отсутствует. Оф. описание: 16-bit little endian unsigned integer pixels
  • I;16B - Информация в рунете отсутствует. Оф. описание: 16-bit big endian unsigned integer pixels
  • I;16N - Информация в рунете отсутствует. Оф. описание: 16-bit native endian unsigned integer pixels

Пример кода:

from PIL import Image #Импорт библиотеки
Image.open("bliss.jpg").convert("1").show() #Открытие изображения, преобразование в чёрно-белый с dither'ингом, отображение на экране.
-5
from PIL import Image #Импорт библиотеки
Image.open("bliss.jpg").convert("P").convert("RGB").show() #Открытие изображения, преобразование в палитру с dither'ингом и обратно, отображение на экране.
-6

3.7. Вырезаем изображение...

from PIL import Image
img = Image.open("bliss.jpg")
region = img.crop((0, 0, 64, 64))
region.show()
-7

3.8. ...Поворачиваем и вставляем обратно.

from PIL import Image
box = (0, 0, 256, 256)
img = Image.open("bliss.jpg")
region = img.crop(box)
region = region.transpose(Image.Transpose.ROTATE_180)
img.paste(region, box)
img.show()
-8

3.9. Поворачиваем

from PIL import Image #Импорт библиотеки
Image.open("bliss.jpg").rotate(90).show()
-9

4. Pillow И CV2

pip install opencv-python
pip install numpy

Для Ubuntu/Debian:

sudo apt-get install python3-numpy
sudo apt-get install python3-opencv

4.1. Конвертация в формат CV2 и отображение

from PIL import Image
import cv2 as cv
import numpy as np
img = np.array(Image.open("bliss.jpg"))
cv.imshow('Заголовок',img)

По сравнению с Pillow, cv2 имеет встроенную программу для просмотра изображения. Поэтому, мы можем написать заголовок для окна. Если без закрытия окна предыдущего изображения с таким же заголовком, то предыдущее окно обновиться. Можно использовать для отображения видео.

Доп. информация:

Официальная документация Pillow: https://pillow.readthedocs.io/en/stable/index.html

Официальная документация CV2: https://docs.opencv.org/4.x/index.html