Source code for boilerplate.models

# -*- coding: utf-8 -*-
from __future__ import unicode_literals

try:
    from StringIO import StringIO
except ImportError:
    from io import StringIO

from django.core.files.base import ContentFile
from django.core.files.storage import default_storage as storage

from PIL import Image
import six


[docs]class ModelImageThumbs(object): IMAGESIZES = None def save(self, *args, **kwargs): response = super(ModelImageThumbs, self).save(*args, **kwargs) if self.image: filename = str(self.image.name) imgFile = Image.open(storage.open(filename)) if imgFile.mode not in ('L', 'RGB'): imgFile = imgFile.convert('RGB') for field_name, size in six.iteritems(self.IMAGESIZES): field = getattr(self, field_name) if not field: working = imgFile.copy() working = working.resize(size, Image.ANTIALIAS) fp = StringIO() working.save(fp, 'JPEG', quality=95) cf = ContentFile(fp.getvalue()) field.save(name=self.image.name, content=cf, save=True) else: for field_name, size in six.iteritems(self.IMAGESIZES): field = getattr(self, field_name) field.delete(save=True) return response