Найти тему
programmer's notes (python and more)

Программирование на языке Python. Начала обработки изображений. Библиотека Pillow

Доброго времени суток, читатели, зрители моего канала programmer's notes. Не забывайте подписываться и писать свои комментарии к моим статьям и видео.

Графика на Python | programmer's notes (python and more) | Дзен

Начала библиотеки Pillow

Пришло время перейти к графике. Начинаем изучать мощную библиотеку для работы с изображениями pillow. Самое главное в том, что библиотека избавляет нас самим декодировать и кодировать изображения разных форматов, предоставляя доступ как к отдельным пикселям, так и к возможностям выполнения набора операций над всем изображением или отдельной его частью. Сегодня посмотрим общую идею работы с изображениями.

Значительная часть обработки идёт через объект получаемый при открытии файла изображения с диска или из Internet. Для этого используется класс Image, импортируемый из PIL. Далее можно использовать различные методы и свойства полученного объекта.

Замечание 1
Библиотека называется Pillow, но в команде импорта используется имя PIL. Этому есть чисто историческая причина.

Замечание 2
Буду всюду при работе с графикой использовать свои фотографии, чтобы не думать о законности использования картинок.

Рисунок 1. Изображение im2.png используется в программе ниже
Рисунок 1. Изображение im2.png используется в программе ниже

#!/usr/bin/python3
from PIL import Image
img = Image.open('./im2.png', mode='r')
# вывод информации об изображении
print(img.mode)
print(*img.size)
newf1 = './mim1.jpg'
newf2 = './mim2.jpg'
img.save(newf1, 'jpeg')
img.thumbnail((256, 256))
img.save(newf2, 'jpeg')
img.close()

В результате работы программы на консоли появится информация об изображении - тип и его размер и будет создана копия начального изображения 'mim1.jpg' (Рисунок 1) и миниатюра 'mim2.jpg' (рисунок 1а) указанного в программе размера.

Рисунок 1а. Миниатюра
Рисунок 1а. Миниатюра

Замечание 3
Хотя в программе указан размер миниатюры 256 на 256, на самом деле метод берёт указанную ширину, а высоту выбирает согласно пропорции размеров в исходном изображении.

Несколько пояснений к программе выше

  • img = Image.open('./im2.png', mode='r') — создаём объект, который потом используется для различных манипуляций с картинкой.
  • img.save(newf1, 'jpeg') — сохраняем изображение под новым именем.
  • img.thumbnail((256, 256)) — создаём изображение - миниатюру указанным размеров (см. замечание выше). Миниатюра заменяет исходное изображение.
  • img.close() — закрыть файл и изображение.

Перейдём ко второму примеру.

Рисунок 2. Изображение im3.png, используемое в программе ниже
Рисунок 2. Изображение im3.png, используемое в программе ниже

#!/usr/bin/python3
from PIL import Image
img = Image.open('./im3.png', mode='r')
img1 = img.copy()
img.thumbnail((256, 256))
# получить размеры исходного рисунка и миниатюры
ix1, iy1 = img.size
ix, iy = img1.size
img1.paste(img, (ix - ix1, iy - iy1))
img1.save('imgg.png', 'png')
img2 = img1.rotate(-90, expand=True)
img2.save('imggr.png', 'png')
img.close()
img1.close()
img2.close()

В результате работы программы будет создана копия изображения из рисунка 2 'im3.png' ('imgg.png' - рисунок 3) с миниатюрой самого изображения в правом нижнем угле и это же это же изображение, но повёрнутое на 90 градусов по часовой стрелке ('imggr.png' - рисунок 4).

Рисунок 3. Изображение imgg.png
Рисунок 3. Изображение imgg.png
Рисунок 4. Повёрнутое изображение
Рисунок 4. Повёрнутое изображение

Сделаем несколько пояснений к программе выше

  • img1 = img.copy() — создаём копию исходного изображения.
  • img2 = img1.rotate(-90, expand=True) — повернуть изображение на 90 градусов по часовой стрелке.
  • img1.paste(img, (ix - ix1, iy - iy1)) — вставить миниатюру в рисунок (рисунок 3).

Ну, пока всё!

Пишите свои предложения и замечания и занимайтесь программированием, а также проектированием баз данных, хотя бы для поддержания уровня интеллекта.

Кто вы? Я не узнаю вас на фотографии
Кто вы? Я не узнаю вас на фотографии