JavaRush /Курсы /Python SELF /Изменение размеров изображений

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

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

1. Загрузка и сохранение изображений

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

Загрузка изображения

Чтобы загрузить изображение, используйте метод Image.open(). Он позволяет открыть изображение любого поддерживаемого формата.

Python

from PIL import Image

# Открытие изображения
image = Image.open("example.jpg")

# Печать информации о файле
print(image.format)  # Формат изображения, например, JPEG или PNG
print(image.size)    # Размеры изображения (ширина, высота)
print(image.mode)    # Цветовой режим, например, RGB или Grayscale

Этот код загружает изображение example.jpg и выводит его основные характеристики: формат, размер и цветовой режим. Если изображение не находится в той же папке, укажите полный путь к файлу.

Сохранение изображения

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

Python

# Сохранение изображения в другом формате
image.save("example.png")  # Сохраняет изображение в формате PNG

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

Python

# Сохранение с изменением качества
image.save("compressed_example.jpg", quality=85)  # Значение quality варьируется от 1 до 95

2. Изменение размеров изображения

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

Изменение размера с помощью метода resize()

Метод resize() позволяет указать точные размеры изображения (ширину и высоту), но при этом изображение может искажаться, если новые размеры не сохраняют исходные пропорции.

Python

# Установка нового размера
new_size = (800, 600)
resized_image = image.resize(new_size)

# Сохранение уменьшенного изображения
resized_image.save("resized_example.jpg")

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

Пропорциональное изменение размера с помощью thumbnail()

Чтобы изменить размер изображения, сохранив его пропорции, используйте метод thumbnail(). Этот метод автоматически уменьшает изображение так, чтобы оно соответствовало указанным размерам, при этом сохраняя исходные пропорции. Это особенно полезно для создания миниатюр изображений.

Python

# Создание миниатюры с максимальными размерами 400x400 пикселей
image.thumbnail((400, 400))

# Сохранение миниатюры
image.save("thumbnail_example.jpg")

Метод thumbnail() изменяет изображение "на месте", что означает, что изменения происходят в исходном объекте image. После выполнения thumbnail() Pillow уменьшит изображение так, чтобы его размеры не превышали 400x400 пикселей, сохраняя пропорции.

Масштабирование с учетом пропорций с помощью ImageOps.fit()

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

Python

from PIL import ImageOps

# Установка нового размера
target_size = (400, 400)
fitted_image = ImageOps.fit(image, target_size, method=Image.LANCZOS)

# Сохранение обрезанного изображения
fitted_image.save("fitted_example.jpg")

Метод ImageOps.fit() автоматически обрезает изображение, чтобы оно соответствовало указанным размерам без искажений. Например, если исходное изображение — прямоугольное, метод обрежет края, чтобы оно стало квадратным и подходило под размер 400x400 пикселей.

3. Пример полного кода

Ниже приведен пример кода, который объединяет все рассмотренные методы — от загрузки до изменения размеров и сохранения изображений.

Python

from PIL import Image, ImageOps

# Открываем изображение
image = Image.open("example.jpg")

# Изменение размера без сохранения пропорций
resized_image = image.resize((800, 600))
resized_image.save("resized_example.jpg")

# Пропорциональное уменьшение изображения
image.thumbnail((400, 400))
image.save("thumbnail_example.jpg")

# Масштабирование с обрезкой до нужного размера
fitted_image = ImageOps.fit(image, (400, 400), method=Image.LANCZOS)
fitted_image.save("fitted_example.jpg")

Пояснения к методам изменения размера

  1. resize(): позволяет задать произвольные размеры, но может привести к искажению изображения, если новые размеры не соответствуют пропорциям оригинала.
  2. thumbnail(): изменяет размер изображения, сохраняя пропорции. Полезно для создания миниатюр и уменьшения больших изображений.
  3. ImageOps.fit(): масштабирует изображение до заданных размеров с обрезкой краев. Применяется, когда важно точно соответствовать указанным размерам без искажений.

4. Советы:

Практическое применение изменения размеров изображений

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

Советы по выбору методов

Используйте resize(), когда нужно точно указать ширину и высоту изображения, и вам не важно, если пропорции изменятся.

Применяйте thumbnail() для создания миниатюр или когда хотите уменьшить изображение, сохранив его пропорции.

Используйте ImageOps.fit(), когда требуется изображение определенного размера, но без искажения пропорций. Этот метод обрезает лишние части, что удобно для подгонки изображения под нужные рамки.

Комментарии
ЧТОБЫ ПОСМОТРЕТЬ ВСЕ КОММЕНТАРИИ ИЛИ ОСТАВИТЬ КОММЕНТАРИЙ,
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ