On Jul 23, 11:07 am, Chris Hoeppner <[EMAIL PROTECTED]> wrote:
> Hi there!
>
> I haven't been able to find this documented anywhere (and I'll kindly
> apologize if there actually *is* some doc about it), and thought I'd
> turn to you guys ;)
>
> I'd like to override a model's save() method in order to "thumbnailize"
> the data from an image field. Users are able to upload images for
> certain model's instances, and I'd like to keep them on a certain size,
> no mater what they send me.
>
Here's what I did:
I added a thumb.py to my app directory with the following code:
from PIL import Image
from os.path import splitext
def get_default_thumbnail_filename(filename):
path, ext = splitext(filename)
return path + '.thumb' + ext
def thumbnail(filename, size=(120, 120), output_filename=None):
image = Image.open(filename)
if image.mode not in ('L', 'RGB'):
image = image.convert('RGB')
image.thumbnail(size, Image.ANTIALIAS)
# get the thumbnail data in memory.
if not output_filename:
output_filename = get_default_thumbnail_filename(filename)
image.save(output_filename, image.format)
return output_filename
And then I have this in my model:
class ImageSeriesItem(models.Model):
class Admin:
pass
def __str__(self):
return self.description[:50]
description = models.CharField(maxlength=255)
missing = models.BooleanField(default=False)
has_image = models.BooleanField(default=True)
created = models.DateField()
modified = models.DateField(auto_now=True)
image_file = models.ImageField(upload_to="imagearchive/%Y/%m/%d")
series = models.ForeignKey(ImageSeries)
number = models.IntegerField()
thumbnail = models.CharField(maxlength=255, editable=False)
def save(self):
f = create_thumbnail(os.path.join(MEDIA_ROOT,
self.image_file))
self.thumbnail = f.replace(MEDIA_ROOT,MEDIA_URL + os.path.sep)
super(ImageSeriesItem, self).save()
I am no guru, however, and welcome criticism of this code. Some of
what I have was borrowed from various places, in particular (thanks,
limodou):
http://www.djangosnippets.org/snippets/20/
See:
http://code.djangoproject.com/wiki/ThumbNails
for more discussion.
- syd
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups
"Django users" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to [EMAIL PROTECTED]
For more options, visit this group at
http://groups.google.com/group/django-users?hl=en
-~----------~----~----~----~------~----~------~--~---