JavaRush /Курсы /Python SELF /Обрезка и поворот изображений для подготовки контента

Обрезка и поворот изображений для подготовки контента

Python SELF
45 уровень , 2 лекция
Открыта

1. Обрезка изображений

Понятие обрезки и её применение

Итак, давайте начнем разбираться, как обрезать и поворачивать изображения. Этот навык пригодится вам в самых разных проектах — от подготовки графики для веб-сайтов до создания контента для социальных сетей.

Обрезка изображения — это как отрезать ненужные края от фотографии, чтобы сфокусироваться на главном объекте. Представьте, что вы получили отличное фото заката, но по краям случайно попали любопытные зеваки. Обрезка поможет вам избавиться от них (виртуально, конечно) без суда и следствия!

Метод crop()

Метод crop() принимает координаты прямоугольной области, которую вы хотите вырезать из изображения. Координаты задаются в виде четырех значений: (левая, верхняя, правая, нижняя).


# Обрезка изображения
cropped_image = image.crop((100, 100, 400, 400))
 # Сохранение обрезанного изображения
cropped_image.save("cropped_example.jpg")
        

В этом примере изображение будет обрезано до области с верхним левым углом в точке (100, 100) и нижним правым углом в точке (400, 400). Этот метод создает новое изображение из указанной части исходного изображения.

Динамическая обрезка на основе размеров изображения

Если вы хотите обрезать изображение до центра, можно рассчитать координаты обрезки на основе его размеров:


width, height = image.size
left = (width - 200) / 2
top = (height - 200) / 2
right = (width + 200) / 2
bottom = (height + 200) / 2

center_cropped_image = image.crop((left, top, right, bottom))
center_cropped_image.save("center_cropped_example.jpg")
        

Этот код обрезает центральную часть изображения размером 200x200 пикселей. Вычисление координат гарантирует, что обрезанная область будет расположена в центре изображения.

2. Поворот изображения

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

Метод rotate()

Метод rotate() поворачивает изображение на указанный угол против часовой стрелки. Угол задается в градусах, и метод создает новое повернутое изображение.


# Поворот изображения на 90 градусов против часовой стрелки
rotated_image = image.rotate(90)
rotated_image.save("rotated_90_example.jpg")
        

В данном примере изображение будет повернуто на 90 градусов против часовой стрелки. Можно также задать другой угол поворота (например, 45, 180, или 270 градусов), чтобы добиться нужного результата.

Управление белыми полями при повороте

По умолчанию rotate() добавляет белые поля (или прозрачные, если используется режим RGBA) по краям изображения, чтобы сохранить весь его контент. Если вы хотите, чтобы изображение заполнило весь кадр без полей, используйте параметр expand=True.


# Поворот с расширением изображения, чтобы оно заполнило весь кадр
rotated_expanded_image = image.rotate(45, expand=True)
rotated_expanded_image.save("rotated_expanded_example.jpg")
        

В этом случае Pillow увеличит размеры изображения, чтобы уместить весь его контент, что полезно при поворотах на нестандартные углы (например, 45 градусов).

3. Зеркальное отображение изображения

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

Метод transpose()

Метод transpose() используется для зеркального отображения и поддерживает следующие параметры:

  • Image.FLIP_LEFT_RIGHT: Отражение по горизонтали.
  • Image.FLIP_TOP_BOTTOM: Отражение по вертикали.

# Зеркальное отображение по горизонтали
flipped_horizontal = image.transpose(Image.FLIP_LEFT_RIGHT)
flipped_horizontal.save("flipped_horizontal_example.jpg")

# Зеркальное отображение по вертикали
flipped_vertical = image.transpose(Image.FLIP_TOP_BOTTOM)
flipped_vertical.save("flipped_vertical_example.jpg")
        

Эти команды переворачивают изображение по горизонтали и по вертикали, что можно использовать для различных эффектов или для исправления ориентации.

Примеры практического использования обрезки, поворота и зеркального отображения

  1. Фокусировка на конкретной области изображения: Обрезка позволяет выделить нужную часть изображения, что полезно при создании портретов, обрезке лишних деталей и подготовке изображений для социальных сетей или веб-сайтов.
  2. Исправление ориентации изображения: Поворот используется для исправления ориентации фотографии, особенно если устройство сняло её в неправильном положении. Примером может быть исправление изображения, снятого в альбомной ориентации, для публикации в портретной ориентации.
  3. Создание симметричных эффектов: Зеркальное отображение часто используется в дизайне для создания симметричных изображений, интересных визуальных эффектов и улучшения композиции.

4. Типичные ошибки и как их избежать

При работе с Pillow иногда возникают ошибки, с которыми, вероятно, столкнется каждый новичок. Одна из таких ошибок — попытка обрезать изображение за пределами его фактических размеров. Всегда проверяйте размер изображения и задавайте координаты обрезки в пределах этих размеров.

Еще один нюанс — при вращении изображение может выглядеть обрезанным, если используете метод `rotate` без дополнительных настроек. Это происходит из-за изменения размера изображения при повороте. Чтобы этого избежать, используйте параметр expand=True, который автоматически подгоняет размеры:


# Поворачиваем изображение на 45 градусов с расширением, чтобы избежать обрезки углов
rotated_image = image.rotate(45, expand=True)
rotated_image.save("rotated_expanded.jpg")
        
Комментарии
ЧТОБЫ ПОСМОТРЕТЬ ВСЕ КОММЕНТАРИИ ИЛИ ОСТАВИТЬ КОММЕНТАРИЙ,
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ