Изменение размера загруженных изображений на основе максимальной ширины в Django (PIL) - PullRequest
2 голосов
/ 18 марта 2012

Я работаю над простым приложением доски объявлений в Django, которое позволяет людям загружать изображения, которые будут отображаться в их сообщениях. Поскольку размер div, содержащего сообщения, составляет всего 700 пикселей, я хочу изменить размер загруженных изображений до максимальной ширины, например, 680 пикселей, чтобы сэкономить пространство, вместо того, чтобы использовать css для отображения изображения, которое слишком велико в условиях ограниченного пространства.

Я давно искал этот сайт, Google и документы PIL и не нашел способа изменить размер изображения в одном измерении при сохранении исходного соотношения сторон. Учитывая мою неопытность, вполне возможно, что я просто не узнаю решение, которое является простым для того, кто знает, что искать.

Ответы [ 2 ]

3 голосов
/ 18 марта 2012

Как еще один вариант, вы можете изменить размер изображения с помощью CSS. Таким образом, изображения могут сохранять свое исходное разрешение (что позволяет пользователю сохранять их) и в то же время хорошо вписываться в деления.

Для предотвращения слишком больших изображений с помощью CSS вы можете использовать:

img {
max-width:100%;
height:auto;
}

Edit: Извините, Эндрю, я не знаю о ПИЛ. Однако, если вы знаете, как изменить размер, и вам просто нужно работать над поддержанием соотношения, вы можете попробовать что-то вроде:

def scale_dimensions(width, height, max_width):
    if width > max_width:
        ratio = max_width*1./width
        return (int(width*ratio), int(height*ratio))
    return (width, height)
0 голосов
/ 18 марта 2012
  • Если вы хотите, чтобы максимальный размер, высота или ширина, был определенного размера, Image.thumbnail делает именно это.

  • Если вы хотите, чтобы ширина была определенного размера, а высота масштабировалась соответствующим образом, вы можете использовать (еще не проверено!):

    # my_image contains the input image; target_width contains the width to resize to.  
    (width, height) = my_image.size   
    target_height = int(height * (1.0 * target_width / width))   
    im.resize((target_width, target_height))  
    
...