#python #python-imaging-library
Вопрос:
У меня есть два изображения размером 339 x 1000 пикселей и 6000 x 4000 пикселей, и я хочу, чтобы они оба имели ширину 256 пикселей с сохранением пропорций (соотношение сторон).
Но команда из библиотеки PIL:
img.thumbnail((256, 256))
Делает их в точности:
- 256×87 пикселей
- 171×256 пикселей
Я не могу передать только один параметр. Как установить только пользовательскую ширину и сделать ее миниатюрой с соотношением сторон?
Я предполагаю, что поведение функции заключается в том, что когда соотношение >1, то оно правильно устанавливает высоту, когда >
Ответ №1:
Вы можете рассчитать коэффициент уменьшения, необходимый для правильной ширины, и применить его к высоте:
from PIL import Image
# Create some representative images
tall = Image.new("L",(339,1000))
wide = Image.new("L",(6000,4000))
tall_s = tall.resize((256,tall.height*256//tall.width))
wide_s = wide.resize((256,wide.height*256//wide.width))
Что приводит к этому:
tall_s <PIL.Image.Image image mode=L size=256x755 at 0x7FE2F1369D30>
wide_s <PIL.Image.Image image mode=L size=256x170 at 0x7FE3003F9370>
Комментарии:
1. У меня растянутое изображение из вашего решения, поэтому я решил сам рассчитать пропорцию, чтобы вспомнить математику из школы, и я получаю уравнение не (высокий.высота*256//высокий.ширина), а (высокий.ширина*256//высокий.высота) для ширины, я отредактировал код, и теперь он работает, вы знаете, почему это может быть?
2. Я поменял ширину и высоту местами. Извините, пожалуйста, попробуйте скопировать мой код заново.
3. Теперь работает отлично, спасибо!