Как установить фиксированную ширину, максимальную высоту, используя sorl-thumbnail (в Django) - PullRequest
2 голосов
/ 31 октября 2011

Я не могу понять, возможно ли создать следующий эскиз, используя sorl-thumbnail в шаблоне django:

  • Фиксированная ширина, при необходимости увеличена.
  • Максимальная высота,Если измененное изображение короче максимальной высоты, чем я не против.
  • Я не хочу обрезать изображение по ширине, но я не против обрезать его по высоте.

Если бы мне удалось сделать это в два этапа, я бы:

  • изменил бы размер изображения до ширины х, что позволило бы увеличить его.
  • Обрезать изображение, чтобы оно соответствовалов прямоугольнике x на y.

Лучшее, что я могу сделать, это то, что ширина выглядит хорошо, но не обрезает высоту.

{% thumbnail banner "1010" crop="center" as im %}<img id='banner' src='{{ im.url }}'/>{% endthumbnail %}

Есть идеи?

1 Ответ

6 голосов
/ 28 ноября 2011

Насколько я знаю, sorl-thumbnail не позволяет вам сделать это за один шаг.Если вам нужна только максимальная высота, вы можете использовать синтаксис геометрии "x100", но он не обеспечивает фиксированную ширину.

Я вижу три альтернативы:

Используйте фильтр is_portrait дляузнайте, нужна ли вам обрезка или нет:

{% if my_img|is_portrait %}
{% thumbnail my_img.filename "100x100" crop="top" as thumb %}
<img src="{{thumb}}" height="{{thumb.height}}" width="{{thumb.width}}"/>
{% endthumbnail %}
{% else %}
{% thumbnail my_img.filename "100" as thumb %}
<img src="{{thumb}}" height="{{thumb.height}}" width="{{thumb.width}}"/>
{% endthumbnail %}
{% endif %}

Создайте специальный механизм сортировки для обрезки с max_height:

from sorl.thumbnail.engines.pil_engine import Engine
class MyCustomEngine(Engine):
    def create(self, image, geometry, options):
      image = super(MyCustomEngine, self).create(image, grometry, options)
      if 'max_height' in options:
          max_height = options['max_height']
          # Do your thing here, crop, measure, etc
      return image

{% thumbnail my_image.filename "100" max_height=100 as thumb %}

Имитируйте обрезку изображений с помощью HTML

{% thumbnail my_img.filename "100" crop="top" as thumb %}
<figure><img src="{{thumb}}" height="{{thumb.height}}" width="{{thumb.width}}"/></figure>
{% endthumbnail %}

# Your CSS file
figure {
max-height: 100px;
overflow: hidden;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...