Найти в Дзене
programmer's notes (python and more)

Программирование на языке Python. Библиотека pillow. Справочник по объекту Image

Оглавление

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

Справочные материалы по объекту Image библиотеки pillow (PIL)

Не большой справочник по метода объекта Image.

Объект - изображение может быть создан следующими способами:

  1. Image.new(mode, size, color=0) — создаётся объект - новое изображение. mode - режим, например 'RGB', size - кортеж, содержащий размеры изображения, color - цвет заливки изображения, по умолчанию чёрный цвет.
  2. Image.open(fp, mode='r', formats=None) — создаётся объект - изображение на основе файла-картинки. fp - путь к файлу или файловый объект. mode - режим открытия, 'r' - чтение, 'w' - запись. formats - кортеж или список загружаемых форматов. По умолчанию все форматы.
  3. Image.frombytes() — создаёт объект - изображение на основе пиксельных данных, расположенных в памяти.

Объект - изображение имеет следующие свойства:

  • Image.filename — имя файла - изображения;
  • Image.format — формат файла - изображения;
  • Image.mode — режим изображения;
  • Image.size — размер изображения в пикселях (кортеж);
  • Image.width — ширина изображения;
  • Image.height — высота изображения;
  • Image.palette — цветовая палитра изображения;
  • Image.info — другие данные, связанные с изображением;
  • Image.is_animated — изображение имеет более одного кадра;
  • Image.n_frames — количество кадров.

Пример

#!/usr/bin/python3
from PIL import Image
im = Image.open('1.png')
print(im.filename)
print(im.format)
print(im.mode)
print(im.size)
print(im.n_frames)
im.close()

Результат выполнения программы
1.png
PNG
RGB
(1920, 1080)
1

Методы объекта Image

Список методов представлен ниже. Далее идут несколько примеров с использованием этих методов.

  • Image.alpha_composite(im, dest=(0, 0), source=(0, 0)) — накладывает изображение im на изображение Image.
  • Image.apply_transparency() — применяет прозрачность к палитре изображения.
  • Image.convert(mode=None, matrix=None, dither=None, palette=Palette.WEB, colors=256) — осуществляет преобразование изображения.

Пример

#!/usr/bin/python3
from PIL import Image
im = Image.open('1.png')
im1 = im.convert('L')
im1.save('1a.png')
im.close()

В результате создаётся чёрно-белая копия изображения ('1a.png').

  • Image.copy() — создаёт копию изображения.
  • Image.crop(box=None) — возвращает вырезанную часть изображения. box - кортеж координат левого верхнего угла и правого нижнего угла, вырезаемого изображения.
  • Image.draft(mode, size) — пытается изменить открытое изображение под указанный режим.
  • Image.effect_spread(distance) — случайно распределяет пиксели в изображении. distance — расстояние в котором распределяются пиксели. Позволяет создавать эффект размытости. Пример такой размытости при distance=40 см. на рисунке 1.
Рисунок 1. Результат работы метода effect_spread()
Рисунок 1. Результат работы метода effect_spread()
  • Image.entropy(mask=None, extrema=None) — вычисление энтропии изображения.
  • Image.filter(filter) — изменяет изображение согласно указанному фильтру.

#!/usr/bin/python3
from PIL import Image, ImageFilter
im = Image.open('1.png')
im1 = im.filter (ImageFilter.CONTOUR)
im1.save('1c.png')

Результат работы программы см. Рисунок 2

Рисунок 2. Результат работы фильтра ImageFilter.CONTOUR
Рисунок 2. Результат работы фильтра ImageFilter.CONTOUR
  • Image.getbands() — возвращает кортеж, состоящий из названий каждого канала изображении.
  • Image.getbbox() — возвращает ограничивающую рамку ненулевых областей изображения.
  • Image.getchannel(channel) — возвращает изображение в режиме 'L', содержащем один канал изображения.
  • Image.getcolors(maxcolors=256) — возвращает список цветов, используемых в этом изображении в виде несортированных значений. Максимальное количество выводимых цветов указывать обязательно.
  • Image.getdata(band=None) — возвращает последовательность значений пикселей изображения.
  • Image.getexif() — возвращает словарь тегов изображения.
  • Image.getextrema() — получает минимальное и максимальное значения пикселей для каждого канала изображения. Например для RGB ((0, 255), (0, 255), (0, 255)).
  • Image.getpalette(rawmode='RGB') — возвращает палитру изображения. None, если изображение без палитры.
  • Image.getpixel(xy) — возвращает цвет указанного пикселя.

Например

print(im.getpixel((10, 10)))

получаем

(78, 29, 0)

  • Image.getprojection() — возвращает две последовательности, указывающие, где находятся ненулевые пиксели по оси X и оси Y.
  • Image.histogram(mask=None, extrema=None) — возвращает гистограмму изображения.
  • Image.paste(im, box=None, mask=None) — вставляет одно изображение в другое.
  • Image.point(lut, mode=None) — создаёт новое изображение на основе поиска пикселей в исходном изображении и их замены.
  • Image.putalpha(alpha) — добавляет или заменяет альфа-канал в этом изображении.
  • Image.putdata(data, scale=1.0, offset=0.0) — копирует пиксельные данные из объекта сглаженной последовательности data в изображение.
  • Image.putpalette(data, rawmode='RGB') — прикрепляет палитру data к этому изображению.
  • Image.putpixel(xy, value) — изменяет цвет пикселя в данном месте.
  • Image.quantize(colors=256, method=None, kmeans=0, palette=None, dither=Dither.FLOYDSTEINBERG) — метод преобразует изображение в режим 'P' с указанным количеством цветов.
  • Image.reduce(factor, box=None) — уменьшение изображения (или вырезки изображения указанной в box) в factor-раз.
  • Image.remap_palette(dest_map, source_palette=None) — создаёт изображение на основе данного с изменённой палитрой.
  • Image.resize(size, resample=None, box=None, reducing_gap=None) — возвращает измененную копию этого изображения.
  • Image.save(fp, format=None, **params) — сохраняет изображение.
  • Image.seek(frame) — ищет кадр с указанным номером (для gif-формата).
  • Image.show(title=None) — открывает изображение в программе для просмотра изображения по умолчанию.
  • Image.split() — делит изображение на каналы. По одному изображению для каждого канала (кортеж изображений).
  • Image.tell() — возвращает номер текущего кадра.
  • Image.thumbnail(size, resample=Resampling.BICUBIC, reducing_gap=2.0) — возвращает изображение - миниатюру.
  • Image.tobitmap(name='image') — преобразовывает изображение в строку, содержащие растровое изображения X11. name - префикс имени.
  • Image.tobytes(encoder_name='raw', *args) — возвращает изображение как байтовый объект.
  • Image.transform(size, method, data=None, resample=Resampling.NEAREST, fill=1, fillcolor=None) — преобразует изображение на основе метода method.
  • Image.transpose(method) — транспонирует изображение. Возможные значения для параметра метода: Transpose.FLIP_LEFT_RIGHT,
    Transpose.FLIP_TOP_BOTTOM, Transpose.ROTATE_90,
    Transpose.ROTATE_180, Transpose.ROTATE_270, Transpose.TRANSPOSE, Transpose.TRANSVERSE.

Пример (см. рисунки 3 и 4)

#!/usr/bin/python3
from PIL import Image
im = Image.open('./1.png')
im1 = im.transpose(method=Image.Transpose.TRANSVERSE)
im1.save('1p.png')
im.close()

Рисунок 3. Исходный рисунок для программы выше
Рисунок 3. Исходный рисунок для программы выше
Рисунок 4. Результат операции  Transpose.TRANSVERSE - поворот на 90 градусов по часовой стрелке и предварительное зеркальное отображение слева направо
Рисунок 4. Результат операции Transpose.TRANSVERSE - поворот на 90 градусов по часовой стрелке и предварительное зеркальное отображение слева направо
  • Image.verify() — проверяет не повреждён ли файл изображения. Если обнаруживает повреждение, то вызывает исключение.
  • Image.load() — загрузка картинки в память. Метод следует использовать при условии, что вам нужно работать с координатами изображения.
  • Image.close() — закрыть файл- изображение.

Замечание.
Будем возвращаться к этому справочнику в следующих статьях, обращаясь к тому или иному методу.

Ну, пока всё!

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

Разбивать программу на модули каждый может, а слабо написать программу из одного модуля длиной в 10000 строк?
Разбивать программу на модули каждый может, а слабо написать программу из одного модуля длиной в 10000 строк?