import os
import os.path
import re
import Image
from django.template import Library
register = Library()
def thumbnail(file, size='100x100x1'):
# defining the size
x, y, ratio = [int(x) for x in size.split('x')]
# defining the filename and the miniature filename
filehead, filetail = os.path.split(file.path)
basename, format = os.path.splitext(filetail)
miniature = basename + '_' + size + format
filename = file.path
miniature_filename = os.path.join(filehead, miniature)
filehead, filetail = os.path.split(file.url)
miniature_url = filehead + '/' + miniature
if os.path.exists(miniature_filename) and os.path.getmtime(filename)>os.path.getmtime(miniature_filename):
os.unlink(miniature_filename)
# if the image wasn't already resized, resize it
if not os.path.exists(miniature_filename):
image = Image.open(filename)
if ratio == 0:
image = image.resize([x, y], Image.ANTIALIAS)
else:
image.thumbnail([x, y], Image.ANTIALIAS)
try:
image.save(miniature_filename, image.format, quality=90, optimize=1)
except:
image.save(miniature_filename, image.format, quality=90)
return miniature_url
register.filter(thumbnail)
# CLEAN CODE (CHANGE THE VARIABLES)
from os import listdir, remove
from os.path import basename, splitext
from re import search
from django.db.models.signals import post_save, pre_delete
from eduardomillan import settings
def clean_thumb(sender, instance, **kwargs):
name, ext = splitext(basename(instance.IMAGE_FIELD.name))
exp = '^%s_\d+x\d+x[0-1]{1}\%s' % (name, ext)
for file_path in listdir(settings.MEDIA_ROOT):
if search(exp, file_path):
remove(settings.MEDIA_ROOT + file_path)
post_save.connect(clean_thumb, sender=FIELD_MODEL)
pre_delete.connect(clean_thumb, sender=FIELD_MODEL)
Comments