Обрезка изображения в Python, используя библиотеку Pillow
Автор Амина С. На чтение 9 мин Опубликовано
Библиотека для работы с картинками Pillow имеет функцию crop(), которая дает возможность обрезать изображение, основываясь на имеющихся координатах. Сегодня мы поговорим о том, какие есть способы обрезки: как выполняется стандартная обрезка, обрезка картинки за пределами ее размеров, как оставить лишь центральную часть изображения, а также обрезать самый крупный квадрат из прямоугольника. Также мы узнаем, что делать для того, чтобы добавить прозрачный канал в изображение, поскольку это нужно уметь делать для того, чтобы качественно выполнять обрезку сложного фрагмента текста.
Содержание
- Установка библиотеки PIL
- Как создать картинку с прозрачным фоном с помощью putalpha()
- Как использовать Image.putalpha()?
- Равномерная прозрачность по всей поверхности
- Использование существующего изображения для задания прозрачного фона
- Простая обрезка изображения в Pillow
- Обрезка картинки за ее пределами
- Осуществление обрезки изображения по центру
- Как вырезать квадрат из прямоугольника?
- Заключение
Установка библиотеки PIL
Для начала нам надо установить саму библиотеку Pillow, если это не было сделано ранее. Для этого необходимо ввести следующую команду.
pip install --upgrade Pillow
Естественно, нужно иметь библиотеку PyPI, чтобы установить эту библиотеку. Убедитесь в том, что она есть у вас на компьютере. Если нет, установите.
Если будет желание, вы можете создать картинку с прозрачным фоном. Для этого нужно обрезать какую-либо другую форму, кроме прямоугольника. В качестве нее может быть, например, круг. Можно использовать putalpha().
Далее осуществляем импорт изображения из PIL и открываем картинку, которая нужна нам. Изображение, которое расположено ниже, можно сохранить на вашем компьютере под названием guido-van-rossum.jpg, а дальше начать с ней работать. Конечно, можно использовать и любое другое название. Просто в ином случае код, который будет использоваться ниже для демонстрации возможностей библиотеки Pillow для обрезки изображений, у вас не будет работать. Вы же можете использовать любое другое название.
from PIL import Image im = Image.open('guido-van-rossum.jpg') img.show()
Как создать картинку с прозрачным фоном с помощью
putalpha()Модуль Image библиотеки Pillow – это функциональный инструмент, который позволяет добавить альфа-канал к изображению, помимо многих других возможностей. Для этого необходимо воспользоваться модулем Image.putalpha(). Прозрачная маска позволяет добиваться самых интересных эффектов. Например, вырезать часть изображения в форме лошади. Как это сделать, поговорим немного позже.
Как использовать Image.putalpha()?
Параметр у этой функции только один – alpha. С его помощью и добавляется альфа-канал к оригинальному изображению. Выражается в целочисленных константах. Есть несколько режимов оригинальной картинки, от которых зависит наличие альфа-канала и действия этой функции с изображением:
- RGB. Это формат цветных изображений, где каждый цвет формируется из трех – красного, зеленого и синего. Они смешиваются в разных долях между собой. В этом случае происходит конвертация картинки из формата RGB в RGBA.
- RGBA. Это модификация RGB, где есть прозрачный канал.
- LA. Черно-белое изображение с альфа-каналом.
- L. Черно-белое изображение.
Если альфа-канала изображение не имеет, то он добавляется. Если он есть, обновляется.
Интенсивность альфа-канала является целочисленным значением, которое варьирует от 0 до 255. 0 – это полная прозрачность, а 255 – полное отсутствие прозрачности. Если вы устанавливаете объект типа «изображение» в таком же размере в черно-белом режиме, то можно назначить альфа-канал соответственно различным формам. Значения константы, выражающей интенсивность альфа-канала, здесь также будет варьировать в пределах от 0 до 255.
Равномерная прозрачность по всей поверхностиЕсли вы установите целочисленное значение на альфа, прозрачность в соответствии с с ним будет установлена на всей поверхности. Чем больше ее добавить, тем более мутной будет картинка на прозрачном фоне. Тем не менее, на непрозрачном в ней начнет просвечиваться фон. Таким образом можно добиваться очень интересных эффектов.
Обратите внимание, что putalpha () перезаписывает исходное изображение. Поэтому, если вы хотите сохранить исходное изображение как есть, используйте изображение, скопированное с помощью copy().
im_rgba = im_rgb.copy() im_rgba.putalpha(128) im_rgba.save('data/dst/pillow_putalpha_solid.png')
В результате, мы получим следующее изображение.
В этом примере используется интенсивность прозрачности 128. Это означает, что картинка будет полупрозрачной.
Создание прозрачного канала в рисунке
Если вы хотите добавить альфа-канал с простой формой, такой как круг или прямоугольник, для этого существует модуль ImageDraw. Поэтому его нужно импортировать в программу перед тем, как начать использовать.
Нарисуйте белый круг на черном фоне и присвойте ему альфа-канал.
im_a = Image. new("L", im_rgb.size, 0) draw = ImageDraw.Draw(im_a) draw.ellipse((140, 50, 260, 170), fill=255)
im_rgba = im_rgb.copy() im_rgba.putalpha(im_a) im_rgba_crop = im_rgba.crop((140, 50, 260, 170)) im_rgba_crop.save('data/dst/pillow_putalpha_circle.png')
Также можно использовать ImageFilter, чтобы смазать границы нашей маски.
im_a_blur = im_a. filter(ImageFilter.GaussianBlur(4))
im_rgba = im_rgb.copy() im_rgba.putalpha(im_a_blur) im_rgba_crop = im_rgba.crop((135, 45, 265, 175)) im_rgba_crop.save('data/dst/pillow_putalpha_circle_blur.png')
Использование существующего изображения для задания прозрачного фона
Также можно использовать ту картинку, которая есть, в качестве альфа-канала. Например, давайте попробуем использовать такую картинку для того, чтобы сделать прозрачный фон.
В этом примере, чтобы сделать так, чтобы картинка была в форме лошади, используем инвертированное изображение с белой лошадью и черным фоном. То есть, такое.
После того, как мы осуществим открытие изображения с помощью open(), картинка будет выровнена по размеру изображения с помощью resize(). А также мы используем
im_a = Image.open('data/src/horse_r.png').convert('L').resize(im_rgb.size)
im_rgba = im_rgb.copy() im_rgba.putalpha(im_a) im_rgba.save('data/dst/pillow_putalpha_horse.png')
Симпатичный результат, не так ли?
Простая обрезка изображения в Pillow
Давайте обозначим область, в рамках которой будет осуществляться картинки, приведенной выше.
Для реализации этой задачи необходимо использовать следующий кортеж box=(left, upper, right, lower).После того, как вы его добавите, уже больше никаких изменений вносить не получится. Напоминаем, что кортеж – неизменяемый набор данных.
Соответствие левой верхней координате – (x, y) = (left, upper). Что касается правой верхней координаты, то соответствие ей будет следующим – (x, y) = (right, lower). Область, обрезка которой требуется, – это lett <= x <right и upper <= y <lower. Что касается пикселей x = right и y = lower, то они не включаются.
Учтите тот факт, что box вместе со скобками нужно использовать:
from PIL import Image im = Image. open('guido-van-rossum.jpg') im_crop = im.crop((100, 75, 300, 150)) im_crop.save('guido_pillow_crop.jpg', quality=95)
Если вам достаточно лишь сохранить обрезанное изображение без дополнительной обработки, то тогда достаточно использовать следующий код.
im.crop((100, 75, 300, 150)).save('guido_pillow_crop.jpg', quality=95)
Обрезка картинки за ее пределами
Если область, которая находится за пределами размеров картинки, попадает в область обрезки, то в этом случае ошибок не будет. Просто эта часть изображения будет окрашена в черный цвет.
from PIL import Image im = Image. open('guido-van-rossum.jpg') im_crop_outside = im.crop((100, 175, 300, 250)) im_crop_outside.save('guido_pillow_crop_outside.jpg', quality=95)
Осуществление обрезки изображения по центру
Если вам надо вырезать центр картинки определенного размера, то в этом случае необходимо использовать функцию crop_center.
from PIL import Image def crop_center(pil_img, crop_width: int, crop_height: int) -> Image: """ Функция для обрезки изображения по центру. """ img_width, img_height = pil_img.size return pil_img.crop(((img_width - crop_width) // 2, (img_height - crop_height) // 2, (img_width + crop_width) // 2, (img_height + crop_height) // 2)) im = Image. open('guido-van-rossum.jpg') im_new = crop_center(im, 200, 200) im_new.save('guido_crop_center.jpg', quality=95)
Как вырезать квадрат из прямоугольника?
Нередко нужно вырезать максимально возможный квадрат из прямоугольной картинки. В этом случае необходимо создать специальную функцию.
def crop_max_square(pil_img): return crop_center(pil_img, min(pil_img.size), min(pil_img.size))
А вот фрагмент кода, демонстрирующий особенности использования данной функции.
from PIL import Image def crop_center(pil_img, crop_width: int, crop_height: int) -> Image: """ Функция для обрезки изображения по центру. """ img_width, img_height = pil_img.size return pil_img.crop(((img_width - crop_width) // 2, (img_height - crop_height) // 2, (img_width + crop_width) // 2, (img_height + crop_height) // 2)) def crop_max_square(pil_img): return crop_center(pil_img, min(pil_img.size), min(pil_img.size)) im = Image.open('guido-van-rossum.jpg') im_new = crop_max_square(im) im_new.save('guido_crop_max_square.jpg', quality=95)
После того, как мы запустим этот код, получим на выходе файл guido_crop_max_square.jpg. Сама картинка будет такой.
Заключение
Мы разобрались в том, как обрезать часть изображения в Python. Как видим, для реализации этой задачи достаточно нескольких строк кода. Чтобы сделать это, используется одна из функций.
Оцените качество статьи. Нам важно ваше мнение:
фрагмент кода
Skip Side Navigation
- Home
- Глоссарий терминов
- Доступность
- Начало начало
- Редактирование вашего сайта
- Компоненты
- Свладание
- .
- Загрузка OU
- Таблица OU
- Компонент Youtube
- Управление столбцами Bootstrap
- Accordion
- Фрагмент кода
- Галерея
- Компонент Iframe
- Справочник
- Социальные сети — Twitter и Facebook
- Дополнительно: ссылки, кнопки, формы и т. д. Менеджер
- Предварительный просмотр
- Публикация
- Отмена публикации
- «Заметка»
- Компоненты
- Календарь
- Настройка нового сайта
- Часы работы
- 06
- 060006
- Контакты
Маркетинг и коммуникации / CMS / Редактирование вашего сайта / Компоненты / Фрагмент кода
Фрагмент кода можно использовать для серии кода, который вы хотите разместить на своей странице.
ПРИМЕЧАНИЕ. Если вы встраиваете форму, видео и т. д. откуда-то еще, код может содержать URL-адрес как часть кода — вам может потребоваться удалить http: или https: — URL-адрес начинается с // делает это относительная ссылка (видимая как в среде http, так и в среде https)
http: отображается на действующем сайте (не будет отображаться у автора)
https: отображается у автора ( может не отображаться на действующем сайте)
- Формы — в частности, Wufoo и Google Forms — могут быть встроены Qualtrics через компонент iframe
- Видео Vimeo — видео YouTube могут быть встроены через компонент Youtube
- И т. д. и т. д.
Вы можете найти компонент «Фрагмент кода» на своей надежной боковой панели.
- Свойства кода: скопируйте и вставьте код для встраивания, полученный из системы, или поместите код, который необходимо использовать для управления вашим контентом .
При выборе компонента вы можете:
- Редактировать: Редактировать компонент
- Удалить: Удалить компонент
- Группа: для одновременного выбора нескольких компонентов (для перемещения, вырезания, копирования)
Код:
vimeo.com/video/231557692″ frameborder=»0″ webkitallowfullscreen mozallowfullscreen allowfullscreen>
Это типичная реклама миллениалов от Растворить на Vimeo.
ПРИМЕЧАНИЕ. https: удален из приведенного выше кода. . Начало URL с // делает его относительной ссылкой (видимой как в среде http, так и в среде https)
http: отображается на активном сайте (не будет отображаться в авторе)0085 https: отображается у автора ( может не отображаться на сайте)
Это типичная реклама миллениалов от Dissolve на Vimeo.
код:
0″>Загрузка…
ПРИМЕЧАНИЕ. https: удален из приведенного выше кода. Начало URL с // делает его относительной ссылкой (видимой как в средах http, так и в https).
http: отображается на сайте в реальном времени (не будет отображаться у автора)
https: отображается у автора ( может не отображаться на сайте в реальном времени)
3 способа быстро разделить видеофайл с помощью VSDC Free Video Редактор
Редактирование видео может быть захватывающим! Но иногда все, что вам нужно, это просто быстро разделить видео на несколько файлов или разделить сцены на более короткие части, чтобы составить более динамичную историю.
В зависимости от ваших целей это задание можно выполнить по-разному. Вам нужна сверхвысокая точность, потому что вы пытаетесь поймать определенный момент на отснятом материале? Вы планируете экспортировать фрагменты отдельными файлами? Или вы разделяете отснятый материал, чтобы просто применить различные эффекты к его частям?
В этом уроке мы покажем вам, как разделить видео для любых целей с помощью VSDC Free Editor.
Скачать VSDC Free Video Editor для Windows
Способ 1: Разбить видеофайл на 2 части в один клик
Вот самый простой способ, который подойдет вам, если вы не ищете высокой точности. Просто выберите файл, который вы хотите разделить, нажав на него. Затем поместите курсор в точку, где должен заканчиваться первый фрагмент и начинаться второй. Нажмите бритвенно-подобную кнопку «Разделить на части», расположенную в верхнем меню «Обрезка и разделение» — вы сразу увидите, как ваш видеофайл превращается в два отдельных фрагмента, расположенных один за другим на временной шкале.
Способ №2. Разделение по маркерам при экспорте видеофайла
Иногда может возникнуть необходимость разделить видео на несколько частей после применения всех эффектов ко всему файлу. В этом случае мы рекомендуем использовать инструмент разделения на уровне экспорта.
После добавления видеофайла в сцену и выполнения всех запланированных действий по редактированию выберите вкладку «Экспорт проекта» на панели команд ленты. В верхнем меню программы нажмите кнопку «Установить маркеры» — появится отдельное окно, как показано ниже. Найдите столько маркеров, сколько вам нужно, в точках, где вы хотите разделить файл. Нажмите «Применить изменения», когда будете готовы.
Оставаясь на той же вкладке «Экспорт», перейдите на вкладку «Дополнительные настройки» (нижнее меню) и установите флажок «Разделить по маркерам». Затем выберите формат видео и нажмите кнопку «Экспортировать проект». В результате вы получите столько видеофрагментов, сохраненных на вашем ПК, сколько вы создали с помощью маркеров.
Способ №3. Разделение одного видеофайла на несколько сцен для применения к каждой из них различных эффектов
Если вы хотите применить разные эффекты к отдельным частям отснятого материала, вы можете разделить видеофайл и поместить каждый фрагмент в отдельную сцену. Для этого добавьте файл на временную шкалу и щелкните по нему правой кнопкой мыши. Выберите «Свойства» в раскрывающемся меню — вы увидите окно «Свойства», выдвигающееся с правой стороны интерфейса программы. Прокрутите вниз и нажмите светло-зеленую кнопку «Вырезать и разделить».
Появится такое же окно «Вырезание и разделение», и вы сможете разместить маркеры в местах, где вы хотите разделить файл.