pillow Python

Содержание
Введение
Создать
Показать
В другой формат
Изменить размер
Повернуть
Заблюрить
Обрезать
Похожие статьи

Введение

Библиотека обработки изображений Python добавляет возможности обработки изображений в ваш интерпретатор Python.

Эта библиотека обеспечивает расширенную поддержку форматов файлов, эффективное внутреннее представление и довольно мощные возможности обработки изображений.

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

Официальная документация

Установка

python -m pip install pillow

Collecting pillow Downloading pillow-12.0.0-cp312-cp312-win_amd64.whl.metadata (9.0 kB) Downloading pillow-12.0.0-cp312-cp312-win_amd64.whl (7.0 MB) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 7.0/7.0 MB 3.0 MB/s eta 0:00:00 Installing collected packages: pillow Successfully installed pillow-12.0.0

Создать изображение

from PIL import Image size = (1000, 300) im_blank = Image.new("RGBA", size) im_blank.show() im_green = Image.new("RGBA", size, "green") im_green.show()

Ниже вы видите пустое изображение. Чтобы убедиться в том, что это изображение - можете кликнуть правой кнопкой мыши и нажать Открыть изображение в новой вкладке (Open Image In New Tab)

Пустое изображение с помощью pillow www.devhops.ru
↑ Пустое изображение ↑
Пустое изображение с помощью pillow www.devhops.ru
↑ Зелёное изображение ↑

Показать изображение

Рассмотрим проект со следующей структурой: скрипт demo.py и несколько фотографий с сайта HeiHei.ru

pillow ├── demo.py ├── fuengirola.jpg ├── malaga.jpg ├── riga.jpg └── torremolinos.jpg

from PIL import Image im = Image.open("fuengirola.jpg") im.show()

Фуэнхирола
Фуэнхирола
www.heihei.ru

Альтернативный способ открыть изображение - воспользоваться менеджером контекста

from PIL import Image with Image.open("malaga.jpg") as im: im.show()

Малага изображение с сайта www.heihei.ru
Малага
www.heihei.ru

Получить данные об изображении

print(im.format, im.size, im.mode) print(im.format_description)

JPEG (1000, 500) RGB JPEG (ISO 10918)

Сохранить в другом формате

Сохраним фотографию Фуэнхиролы как png файл.

from PIL import Image im = Image.open("fuengirola.jpg") im.save("fuengirola.png")

pillow ├── demo.py ├── fuengirola.jpg ├── fuengirola.png ├── malaga.jpg ├── riga.jpg └── torremolinos.jpg

Сохраним все файлы с расширением jpg как png

Сперва применим способ с официального сайта pillow

# demo.py import os, sys from PIL import Image for infile in sys.argv[1:]: f, e = os.path.splitext(infile) outfile = f + ".png" if infile != outfile: try: with Image.open(infile) as im: im.save(outfile) except OSError: print("cannot convert", infile)

python demo.py fuengirola.jpg malaga.jpg riga.jpg torremolinos.jpg

pillow ├── demo.py ├── fuengirola.jpg ├── fuengirola.png ├── malaga.jpg ├── malaga.png ├── riga.jpg ├── riga.png ├── torremolinos.jpg └── torremolinos.png

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

Для этого нам пригодится метод listdir() из библиотеки os

import os from PIL import Image if not os.path.exists("pngs"): os.makedirs("pngs") for f in os.listdir("."): if f.endswith(".jpg"): i = Image.open(f) fn, fext = os.path.splitext(f) i.save("pngs/{}.png".format(fn))

pillow ├── demo.py ├── fuengirola.jpg ├── malaga.jpg ├── pngs │ ├── fuengirola.png │ ├── malaga.png │ ├── riga.png │ └── torremolinos.png ├── riga.jpg └── torremolinos.jpg

Изменить размер изображений

Изменим размер изображений задав его явно.

from PIL import Image im = Image.open("malaga.jpg") im_resized = im.resize((500,300)) im_resized.show()

Малага изображение с сайта www.heihei.ru

В таких задачах удобно использовать фактор сжатия и исходные размеры изображения

from PIL import Image im = Image.open("malaga.jpg") x, y = im.size scale_factor = 0.5 new_size = (int(x * scale_factor), int(y * scale_factor)) im_resized = im.resize(new_size) im_resized.show()

Малага изображение с сайта www.heihei.ru

В следующем примере изменим размер всех jpg изображений в директории.

Для изменения размера используем метод thumbnail

import os from PIL import Image if not os.path.exists("300"): os.makedirs("300") size_300 = (300, 300) for f in os.listdir("."): if f.endswith(".jpg"): im = Image.open(f) fn, fext = os.path.splitext(f) im.thumbnail(size_300) im.save("300/{}_300{}".format(fn, fext)) Image.open("300/fuengirola_300.jpg").show()

Фуэнгирола изображение с сайта www.heihei.ru

pillow ├── 300 │ ├── fuengirola_300.jpg │ ├── malaga_300.jpg │ ├── riga_300.jpg │ └── torremolinos_300.jpg ├── demo.py ├── fuengirola.jpg ├── malaga.jpg ├── riga.jpg └── torremolinos.jpg

РЕКЛАМА хостинга Beget, которым я пользуюсь более десяти лет

Изображение баннера

Конец рекламы хостинга Beget, который я всем рекомендую.

Повернуть изображение

from PIL import Image im = Image.open("300/fuengirola_300.jpg") # Против часовой стрелки im.rotate(90).show()

Фуэнгирола изображение с сайта www.heihei.ru

from PIL import Image im = Image.open("malaga_300.jpg") im_rotated = im.rotate(60) im_rotated.show()

Малага изображение с сайта www.heihei.ru

Часть изображения пропала, так как сохранился оригинальный размер фотографии.

Чтобы избежать потери данных нужно использовать expand

from PIL import Image im = Image.open("malaga_300.jpg") im_rotated = im.rotate(60, expand=True) im_rotated.show()

Малага изображение с сайта www.heihei.ru

Чтобы изменить цвет, нужно воспользоваться fillcolor

im_rotated = im.rotate(60, expand=True, fillcolor=(162,57,202))

Малага изображение с сайта www.heihei.ru

Если требуется задавать цвета с помощью слов - пригодится ImageColor.getcolor

from PIL import Image, ImageColor im = Image.open("malaga_300.jpg") im_rotated = im.rotate(60, expand=True, fillcolor=ImageColor.getcolor("red", "RGB")) im_rotated.show()

Малага изображение с сайта www.heihei.ru

Сделать изображение чёрно-белым

from PIL import Image im = Image.open("300/fuengirola_300.jpg") im.convert(mode="L").show()

Фуэнгирола изображение с сайта www.heihei.ru

Заблюрить изображение

Чтобы заблюрить изображение нужно использовать ImageFilter.

В следующем примере используем GaussianBlue. Значение по умолчанию 2.

from PIL import Image, ImageFilter im = Image.open("300/fuengirola_300.jpg") im.filter(ImageFilter.GaussianBlur()).show() im.filter(ImageFilter.GaussianBlur(2)).show() im.filter(ImageFilter.GaussianBlur(5)).show() im.filter(ImageFilter.GaussianBlur(10)).show()

Фуэнгирола изображение с сайта www.heihei.ru Фуэнгирола изображение с сайта www.heihei.ru Фуэнгирола изображение с сайта www.heihei.ru Фуэнгирола изображение с сайта www.heihei.ru

Обрезать изображение

Чтобы обрезать изображение нужно использовать crop.

В следующем примере зададим левый X, верхний Y, правый X, нижний Y вручную

from PIL import Image im = Image.open("malaga_300.jpg") im_crop = im.crop((50, 10, 300, 150)) im_crop.show() im_crop.save("malaga_300_crop.jpg")

Малага изображение с сайта www.heihei.ru

Часто бывает удобно отталкиваться от размера исходного изображения.

В следующем примере вырежем из правого нижнего угла водяной знак с логотипом HeiHei.ru

Обратите внимание на то, что в crop мы передаём кортеж для наглядности выделил фиолетовыми скобками.

from PIL import Image im = Image.open("malaga.jpg") x, y = im.size from_right = x - 160 from_bottom = y - 160 im_crop = im.crop((from_right, from_bottom, x, y)) im_crop.show()

Малага изображение с сайта www.heihei.ru

Отзеркалить изображение

Для горизонтального или вертикального отражения картинки используется метод transpose

from PIL import Image im = Image.open("malaga_300.jpg") im_flip_horiz = im.transpose(Image.Transpose.FLIP_LEFT_RIGHT) im_flip_vert = im.transpose(Image.Transpose.FLIP_TOP_BOTTOM) im_transposed = im.transpose(Image.Transpose.TRANSPOSE) im_flip_horiz.show() im_flip_vert.show() im_transposed.show()

Малага изображение с сайта www.heihei.ru Малага изображение с сайта www.heihei.ru Малага изображение с сайта www.heihei.ru

Автор статьи: Андрей Олегович

Похожие статьи
OCR
Python
Установка OCR библиотек
OpenCV
pytesseract

Поиск по сайту

Подпишитесь на Telegram канал @aofeed чтобы следить за выходом новых статей и обновлением старых

Перейти на канал

@aofeed

Задать вопрос в Телеграм-группе

@aofeedchat

Контакты и сотрудничество:
Рекомендую наш хостинг beget.ru
Пишите на info@urn.su если Вы:
1. Хотите написать статью для нашего сайта или перевести статью на свой родной язык.
2. Хотите разместить на сайте рекламу, подходящую по тематике.
3. Реклама на моём сайте имеет максимальный уровень цензуры. Если Вы увидели рекламный блок недопустимый для просмотра детьми школьного возраста, вызывающий шок или вводящий в заблуждение - пожалуйста свяжитесь с нами по электронной почте
4. Нашли на сайте ошибку, неточности, баг и т.д. ... .......
5. Статьи можно расшарить в соцсетях, нажав на иконку сети: