如何使用sorl-thumbnail设置固定宽度,最大高度(在Django中)

时间:2011-10-31 17:30:50

标签: django-templates sorl-thumbnail

如果可以在django模板中使用sorl-thumbnail创建以下缩略图,我无法解决:

  • 固定宽度,必要时放大。
  • 最大高度。如果调整大小的图像比我不介意的最大高度短。
  • 我不想在宽度方面裁剪图像,但我不介意在高度上裁剪它。

如果我能分两步完成,我会:

  • 将图像大小调整为x宽度,允许升级。
  • 裁剪图像以适合矩形x y。

我能做的最好的就是这样,宽度看起来不错,但不会裁剪高度。

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

有什么想法吗?

1 个答案:

答案 0 :(得分:6)

据我所知,sorl-thumbnail不允许您一步完成。如果只想要max-height,可以使用“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 %}

制作自定义sorl引擎以在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;
}