Recientemente para un proyecto he necesitado generar una serie de thumbnails de distintos tamaños. (Es algo bastante habitual).
Para ello, he utilizado el plugin "django-thumbs" (Algo viejuno, pero perfectamente funcional), creado por Alexis Couronne. Como requisito necesitas tener Pillow (Anteriormente PIL), es muy cómodo de utilizar, a saber:
Creamos el modelo y en lugar de ImageField utilizamos ImageWithThumbsField
from django.db import models
from django_thumbs.db.models import ImageWithThumbsField
class Person(models.Model):
photo = ImageWithThumbsField(upload_to='images', sizes=((125,125),(200,200)))
Esto generará las imágenes de los tamaños indicados en "sizes".
Para llamar a los thumbnails generados, simplemente llamamos a someone.photo.url_200x200 y nos devolverá la URL que queremos.
Por ejemplo en un serializer de Django Rest Framework:
person_thumbnail = serializers.SerializerMethodField('thumbnail')
def thumbnail(self, obj):
item = obj.photo.url_200x200
return item
Obteniendo un response similar a:
{
"photo": "http://miurl/media/images/lafotooriginal.jpg",
"person_thumbnail": "http://miurl/media/images/lafotooriginal.200x200.jpg"
},
Eso es todo. Tenéis más info en la home del repo:
https://github.com/skitoo/django-thumbs
¡Avisa si te atascas y necesitas ayuda! :)
Saludos,
Alberto.