Com a inclusion tag, é possível redimensionar e/ou cortar, uma imagem de acordo com a necessidade. Para isso, basta utilizar assim no seu template:
{% load thumbnail %}
A linha acima deve ser colocar no começo do arquivo para carregar as tags da sorl para seu template. E para a imagem fazemos:
<img src='{% thumbnail seu_objeto.campo_foto 150x150 crop,upscale %}' />
Aqui temos um exemplo em que será gerada uma imagem de 150px de largura por 150px de altura. As opções crop,upscale são opcionais e servem para corte e redimensionamento, respecticamente.
Há uma certa desvantagem em utilizar desta forma. A thumb somente será gerada quando alguma requisição for feita para a página, e após isso o arquivo físico da thumb é gerado em tempo de execução. Posteriormente, se a thumb não for trocada, o sistema utiliza a thumb gerada na primeira requisição ao invés de gerar uma nova.
Uma outra opção, e fazer a geração de todas as thumbs utilizadas para uma mesma foto, no momento que a foto é inserida ou alterada. Para isso temos o ThumbnailField.
No seu model, já com a sorl instalada no seu projeto e/ou no virtualenv, faça:
No ínicio do arquivo models.py que for utilizar thumbs, import o ThumbnailField:
from sorl.thumbnail.fields import ThumbnailField
E na sua classe, crie o campo com o campo importado da seguinte forma:
class SuaClasse(models.Model):
foto = ThumbnailField(
upload_to="uploads/banners/home/%Y",
help_text=u"Tamanho mínimo e proporcional a 1024x768",
options = ('upscale',),
size = (1920,1000),
generate_on_save = True,
extra_thumbnails={
'1024x768':{ 'size':(1024,768), 'options':('upscale',) },
'1280x1024':{ 'size':(1280,1024), 'options':('upscale',) },
'1280x800':{ 'size':(1280,800), 'options':('upscale',) },
'1440x900':{ 'size':(1440,900), 'options':('upscale',) },
'1366x768':{ 'size':(1366,768), 'options':('upscale',) },
},
Deste modo, teremos 6 arquivos para cada imagem que for inserida.
- A original foto, que terá no máximo 1920x1000 px de tamanho, sendo que fará uso do upscale
- E 5 extra_thumbnails, onde cada uma terá um tamanho próprio, também utilizando o upscale.
No template para utilizar o campo foto, nada muda, continua sendo :
{{ seu_obj.foto }}
Já para acessar alguma das thumbs, utilize:
{{ seu_obj.foto.extra_thumbnails.NOME_DO_THUMBNAIL }} , por exemplo:
{{ seu_obj.foto.extra_thumbnails.1280x1024 }}
Em alguns casos temos que acessá-los em uma view, seja para montar um json para o ajax, ou até mesmo um xml pro inútil e arcaico Flash. Para isso utilize:
seu_obj.foto.extra_thumbnails_tag['1280x800']
Outra opção é criar um model, muito útil para quando deseja-se mostrar a thumb no change list do admin. Para isso, utilize:
def thumb_admin(self):
from sorl.thumbnail import get_thumbnail
im = get_thumbnail(self.imagem, '120x120', crop='center', quality=99)
if im:
return '<a href="%s/"><img src="%s" alt="Imagem" /></a>' % (self.id, str(im.url))
return 'Sem foto'
thumb_admin.is_safe = True
thumb_admin.allow_tags = True
thumb_admin.short_description = 'Thumb'
Outra opção é criar um model, muito útil para quando deseja-se mostrar a thumb no change list do admin. Para isso, utilize:
def thumb_admin(self):
from sorl.thumbnail import get_thumbnail
im = get_thumbnail(self.imagem, '120x120', crop='center', quality=99)
if im:
return '<a href="%s/"><img src="%s" alt="Imagem" /></a>' % (self.id, str(im.url))
return 'Sem foto'
thumb_admin.is_safe = True
thumb_admin.allow_tags = True
thumb_admin.short_description = 'Thumb'
hasta!
Nenhum comentário:
Postar um comentário