Redimensionner une image à l'upload

Publié par ark le mer 27 Mar 2013 à 18:54

Marre de retrouver des images trop grosses sur vos serveurs, ou de voir certaines pages de sites avec des images qui mettent du temps à se charger ? 
Dans ce cas, il faut modifier la taille de l'image au moment de l'upload, ni vu ni connu.

Plusieurs solutions s'offrent à nous, djangonautes, pour réaliser cette opération, souvent des petites apps comme imagekit, ou encore django-stdimage que j'aime bien pour sa sobriété et son efficacité..

Mais si on veut agir à plus bas niveau, et ne pas installer d'outils supplémentaires, une modification de la méthode save suffit, exemple dans la suite/

En effet, il suffit de surcharger la méthode save, et d'appeler le bien aimé PIL pour nous faire le travail :

 

from django.db import models

from PIL import Image

from django.conf import settings

 

class Photo(models.Model):

        image = models.ImageField(upload_to='upload')

 

       def save(self, size=(400, 300)):

        """

        Save Photo after ensuring it is not blank. Resize as needed.

       """

       if not self.id and not self.source:

              return

       super(Photo, self).save()

       filename = settings.MEDIA_ROOT + self.image.name

       image = Image.open(filename)

       image.thumbnail(size, Image.ANTIALIAS)

       image.save(filename)

 

blog comments powered by Disqus