Как правильно масштабировать изображение?

Рейтинг: 0Ответов: 1Опубликовано: 04.04.2023

Есть исходное изображение:

введите сюда описание изображения

Как средствами python я могу его масштабировать в :введите сюда описание изображения

Изображение обрезается и становится нужного мне разрешения, обычным resize подобного достичь не удалось. Я так понимаю, что мне нужно определить пропорцию, обрезать изображение с помощью crop и только потом увеличить. Размер изображения может быть любым, в данном случае оригинал 500х517, сделать надо 1920х1080 или 1080х1920, в зависимости от пользовательского ввода.

from PIL import Image

image = Image.open(image_path)
image = image.convert('RGBA')
image = image.resize((1920, 1080))

Ответы

▲ 0Принят

Мне помогло следующее решение, оно определяет горизонтальную либо вертикальную ориентацию изображения и в зависимости от этого обрезает изображения, а потом увеличивает до размеров переданных в new_width и new_height

from PIL import Image


new_width, new_height = 1920, 1080
image = Image.open('test.png')
width, height = image.size
aspect_ratio = width / height
target_aspect_ratio = new_width / new_height
if aspect_ratio > target_aspect_ratio:
    crop_width = height * target_aspect_ratio
    left = (width - crop_width) / 2
    top = 0
    right = (width + crop_width) / 2
    bottom = height
else:
    crop_height = width / target_aspect_ratio
    left = 0
    top = (height - crop_height) / 2
    right = width
    bottom = (height + crop_height) / 2
image = image.crop((left, top, right, bottom))
image = image.resize((new_width, new_height))
image.save('resizedimg.png')