Работа с изображениями
Одной из популярных библиотек для работы с изображениями является Pillow . Формально эта библиотека является форком другой библиотеки — PIL (Python Imaging Library). Однако если PIL работала со 2-й версий Python и давно уже не развивается, то Pillow имеет поддержку 3-й версии и продолжает развиваться.
Итак, установим данную библиотеку с помощью следующей команды:
pip install Pillow
(Стоит отметить, что в некоторые дистрибутивы Linux данная библиотека уже включена по умолчанию)
Подключение
Для работы с библиотекой необходимо импортировать модуль Image :
from PIL import Image
Открытие изображения
Для открытия изображения вызывается функция open() , в которую передается путь к файлу:
from PIL import Image # открытие изображения img = Image.open("forest.jpg")
В данном случае предполагается, что изображение представляет файл «forest.jpg» и располагается в одной папке с текущим скриптом Python. После выполнения функции переменная img будет содержать информацию об изображении в виде объекта класса Image (класс Image располагается в подключенном модуле Image).
На случай, если будет передан некорректный путь, и программа сгенерирует ошибку, можно поместить вызов метода в конструкцию try/catch :
from PIL import Image try: img = Image.open("C://somefolder//forest.jpg") except: print("Ошибка")
Получение информации о файле
Класс Image предоставляет ряд атрибутов, которые хранят информацию об изображении:
- filename : имя файла или путь к файлу в виде строки
- format : формат файла. Если изображение создано самой библиотекой, то имеет значение None .
- mode : режим изображения, например, «1», «L», «RGB» или «CMYK». (Полный список форматов доступен в документации)
- size : размер в виде кортежа (width, height)
- width : ширина
- height : высота
- info : словарь dict, который хранит дополнительную ассоциированную с файлом информацию
- is_animated : представляет булевое значение и равно True , если изображение содержит более одного фрейма. Применяется к анимированным изображениям
- n_frames : количество фреймов в изображении. Применяется к анимированным изображениям
Например, получим некоторую информацию об изображении:
from PIL import Image img = Image.open("forest.jpg") print(f"Width: ") print(f"Height: ") print(f"Filename: ") print(f"Format: ") print(f"Mode: ")
Консольный вывод в моем случае:
Width: 484 Height: 363 Filename: forest.jpg Format: JPEG Mode: RGB
Вывод изображения на экран
С помощью метода show() можно октрыть изображение в программе для просмотра изображений по умолчанию для текщей операционной системы:
from PIL import Image img = Image.open("forest.jpg") img.show()
Сохранение изображения
Для сохранения изображения применяется метод save() . В качестве обязательного параметра он принимает путь, по которому сохраняется изображение:
from PIL import Image img = Image.open("forest.jpg") # сохраняем в файл forest_new.jpg img.save("forest_new.jpg")
Поворот изображения
Для вращения изображения применяется метод rotate() , в который в качестве обязательного параметра передается угол поворота. Результатом метода является повернутое изображение:
from PIL import Image img = Image.open("forest.jpg") # поворот на 90 градусов img2 = img.rotate(90) # сохраняем новое изображение img2.save("forest_new.jpg")
Обрезка изображения
Метод crop() позволяет вырезать часть изображения. В качестве параметра он принимает кортеж из 4 чисел, в формате:
(координата_X_верхнего_левого _угла, координата_Y_верхнего_левого _угла, координата_X_правого_нижнего _угла, координата_Y_правого_нижнего _угла)
Результатом метода является новое изображение:
from PIL import Image img = Image.open("forest.jpg") img = img.crop((0, 0, img.width/2, img.height/2)) img.save("forest_new.jpg")
В данном случае происходит обрезка, начиная с левого верхнего угла до его половины ширины и высоты.

Изменение размера
Для изменения размера изображения применяется метод resize() , в который в качестве параметра передается кортеж из двух чисел — новой высоты и ширины. Результатом метода является сгенерированное изображение. Например, уменьшим в два раза:
from PIL import Image img = Image.open("forest.jpg") # уменьшаем в два раза img = img.resize((img.width//2, img.height//2)) img.save("forest_new.jpg")
Если необходимо пропорциональное уменьшение размеров, то можно использовать метод reduce() , который в качестве обязательного параметра принимает множитель уменьшения. Например, уменьшим изображение в 2 раза:
from PIL import Image img = Image.open("forest.jpg") # уменьшаем в два раза img = img.reduce(2) img.save("forest_new.jpg")
Наложение изображения
Функция paste() позволяет наложить одно изображение на другое:
Image.paste(im, box=None, mask=None)
Первый параметр — im представляет второе изображение, которое будет накладываться. Параметр box определяет область наложения, а третий параметр — mask
from PIL import Image img = Image.open("forest.jpg") img2 = Image.open("cats.jpg") img.paste(img2) img.save("cats_in_forest.jpg")
В данном случае изображение «cats.jpg» накладывается на «forest.jpg». Поскольку область наложения не указана, то верхний левый угол «cats.jpg» проецируется на верхний левый угол «forest.jpg».
Параметр box позволяет определить область наложения либо в виде кортежа с двумя элементами (координаты X и Y верхнего левого угла), либо в виде кортежа с четырьмя элементами(координаты X и Y верхнего левого угла и правого нижнего угла):
from PIL import Image img = Image.open("forest.jpg") img2 = Image.open("cats_small.jpg") img.paste(img2, (img.width//2, img.height//2)) img.save("cats_in_forest.jpg")

Зеркальное отражение
Для зеркального отражения применяется метод transpose() . В качестве параметра он принимает принцип отзеркаливания в виде одного из следующих значений:
- Image.Transpose.FLIP_LEFT_RIGHT
- Image.Transpose.FLIP_TOP_BOTTOM
- Image.Transpose.ROTATE_90
- Image.Transpose.ROTATE_180
- Image.Transpose.ROTATE_270
- Image.Transpose.TRANSPOSE
- Image.Transpose.TRANSVERSE
Например, применим значение Image.Transpose.FLIP_LEFT_RIGHT , которое отражает слева направо:
from PIL import Image img = Image.open("cats.jpg") img = img.transpose(Image.Transpose.FLIP_LEFT_RIGHT) img.save("cats_new.jpg")

Применение фильтров
С помощью метода filter() к изображению можно применить фильтры. В качестве параметра метод принимает определение фильтра. По умолчанию библиотека предоставляет следующие фильтры, которые определены в модуле ImageFilter:
- BLUR
- CONTOUR
- DETAIL
- EDGE_ENHANCE
- EDGE_ENHANCE_MORE
- EMBOSS
- FIND_EDGES
- SHARPEN
- SMOOTH
- SMOOTH_MORE
Например, применение фильтра размытия Blur
from PIL import Image, ImageFilter img = Image.open("forest.jpg") img = img.filter(ImageFilter.BLUR) img.save("forest_new.jpg")

Для более детального ознакомления с остальным функционалом библиотеки можно обратиться к документации
PIL установка
скачал с офицалки соурс кит(все версии работают) пробовал через cmd : выдает ошибку.
как установить?
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
Ответы с готовыми решениями:
Библиотека PIL
Как открыть картинку не в фотошопе, а в стандартной программе просмотра фото. У меня открывается.

Фильтры и маски изображения. PIL Image. Python
Как наложить фото 1 на фото 2 чтобы пространство по центру осталось незаполненным?
Установка Pil . Полний 0
Хотел установить PIl, понял что не знаю как,искал в нете,там то пип,то командная строка, не могу.
Не ставиться PIL
Добрый день. Подскажите пожалуйста, почему не ставиться PIL? Делаю так: python -m pip install pil.
2740 / 2339 / 620
Регистрация: 19.03.2012
Сообщений: 8,830
Качаешь отсюда https://pypi.python.org/pypi/Pillow/2.8.2 хоть колеса, хоть exe и без проблем ставишь.
141 / 141 / 38
Регистрация: 20.02.2012
Сообщений: 597
а лучше поставить pip и ставить пакеты через него
2740 / 2339 / 620
Регистрация: 19.03.2012
Сообщений: 8,830
ilnurgi, Что касается остальных библиотек, то да, а вот pil и другие просто так не поставишь. Она же не на чистом python написана и по этому нужен компилятор Си и правильно настроенное окружение.
По этому такие библиотеки лучше ставить из колёс или exe.
141 / 141 / 38
Регистрация: 20.02.2012
Сообщений: 597
хотя да, тут же винда
2740 / 2339 / 620
Регистрация: 19.03.2012
Сообщений: 8,830
ilnurgi, ну лично у меня и на linux без проблем через pip не ставится. Я предпочитаю готовые пакеты из стандартных репозиториев ставить.
141 / 141 / 38
Регистрация: 20.02.2012
Сообщений: 597
в последний раз у меня через пип все норм поставилось, скорее всего все зависимости уже стояли в системе.
Регистрация: 08.09.2012
Сообщений: 77
Как вариант возьмите pillow он вроде полностью совместим с PIL но дополнительно поддерживает python 3. Ссылка на неофициальные виндовые сборки, я ими частенько пользуюсь, полёт нормальный.
2740 / 2339 / 620
Регистрация: 19.03.2012
Сообщений: 8,830
MAKAPOH, Посмотри внимательней, я сразу дал ссылку на pillow. Простым pil ни кто сейчас уже не пользуется.
Регистрация: 12.05.2015
Сообщений: 132
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
Помогаю со студенческими работами здесь

Библиотека PIL
Помогите пожалуйста. Нужно с помощью библиотеки PIL с модулями ImageDraw рассчитать координаты трех.

Проблемы с PIL(pillow)
Есть желание вставить изображение в программу на pythin с GUI на tkinter. Везде советуют.

Сменить шрифт в pil
Всем привет. Код с pil font=("open_sans.ttf", 12) font2=("open_sans2.ttf", 12) draw.text ((x,y).

Библиотека PIL дублирование шара
Добрый день. Использую библиотеку PIL в Python. Необходимо нарисовать пять шаров по вертикали. Шары.
PIL — как обновить текст?
Здравствуйте! Мне необходимо, чтобы программа выводила на поверхность изображения текст, который.
Установка 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
Библиотека PIL. Работа с изображениями в Python
7 августа 2013 г.
Archy
Просмотров: 51374
RSS
6
Работа с изображениями » Python для начинающих
pil python 3, python pil, python обработка изображений

Для работы с изображениями в Python наиболее часто используют библиотеку PIL (Python Image Library). В этой статье рассмотрим базовые возможности данной библиотеки, применяемые наиболее часто. Для установки библиотеки скачивайте файл PIL-1.2.6.win32-py2.6.exe с официального сайта библиотеки а затем запускайте уже знакомую для вас установку. Процесс установки очень прост и в комментариях не нуждается. Чтобы проверить работоспособность библиотеки и узнать удачно ли она установилась, в окне Python Shell редактора IDLE наберите следующий код.
>>> from PIL import Image >>> Image.VERSION '1.1.6'
Если вы получили ответ, не важно если версия библиотеки будет другая, главное получить ответ а не ошибку. Получив версию библиотеки вы можете работать с ней, значит она успешно установилась.
Уже более пяти лет мы продаем подарочную упаковку оптом. Вы можете купить упаковка подарочная по очень хорошим ценам. В каталоге вы найдете сотни видов подарочной упаковки.
Загрузка готового изображения
Для открытия файла с готовым изображением применяется функция open(). Функция возвращает объект, с помощью которого производится дальнейшая работа с изображением. Если открыть файл с изображением не удалось, возбуждается исключение IOError. Формат функции:
open([, mode='r'])
В первом параметре можно указать абсолютный путь или относительный путь к изображению. Откроем файл Forest-large.jpg, который расположен в том же рабочем каталоге, что и сам скрипт.
>>> img = Image.open("Forest-large.jpg")
Вместо указания пути к файлу можно передать файловый объект, открытый в бинарном режиме.
>>> f = open("foto.gif", "rb") # Открываем файл в бинарном режиме >>> img = Image.open(f) # Передаем объект файла >>> img.size # Получаем размер изображения (800, 600) >>> f.close() # Закрываем файл
Если изображение было загружено в какую-либо переменную, то можно создать файловый объект с помощью модуля StringIO и передать его в функцию open(). Язык программирования Python имеет много интересных библиотек для работы с видео, музыкой и обработка профессиональных фотографии. Работая над длинной программой код будет удлинятся все глубже и на маленьком экране ноутбука неудобно писать длинные программы. Чтобы расширить свою зону видимости кода нужно подключить второй монитор к ноутбуку и работать уже на широком 22 дюймовом мониторе. Тогда при редактировании видео и изображении на Python ваш результат будет лучше анализированным визуально на широком мониторе чем на ноутбуке.
Загрузка изображения из строки
>>> f = open("foto.gif", "rb") # Открываем файл в бинарном режиме >>> i = f.read() # Сохраняем изображение в переменной >>> f.close() # Закрываем файл >>> import StringIO # Подключаем модуль StringIO >>> img = Image.open(StringIO.StringIO(i)) # Передаем объект >>> img.format # Выводим формат изображения 'GIF'
Как видно из примера, формат изображения определяется автоматически. Следует также заметить, что после открытия файла с помощью функции open() само изображение не загружается сразу в память из файла. Загрузка изображения производится при первой операции с изображением. Загрузить изображение явным образом позволяет метод load(). Хотя в большинстве случаев это делать не нужно. Начиная с версии 1.1.6 метод load() возвращает объект, с помощью которого можно получить доступ к определенным пикселям изображения.
Еще записи по теме
- Модуль StringIO в Python
- Распаковка последовательности в отдельные переменные
- Создание базы данных SQLite в Python
- Доступ к базе данных SQLite из Python
- Копирование файлов в Python
- Подсчет ссылок и сборка мусора в Python
- Дата и время. Модуль calendar — работа с календарем
