avatars.py 1.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344
  1. from django.conf import settings
  2. try:
  3. from PIL import Image
  4. has_pil = True
  5. except ImportError:
  6. has_pil = False
  7. avatar_sizes = {}
  8. def avatar_size(size):
  9. if not has_pil:
  10. return None
  11. try:
  12. return avatar_sizes[size]
  13. except KeyError:
  14. avatar_sizes[size] = None
  15. for i in settings.AVATAR_SIZES[1:]:
  16. if size <= i:
  17. avatar_sizes[size] = i
  18. return avatar_sizes[size]
  19. def resizeimage(image, size, target):
  20. if isinstance(image, basestring):
  21. image = Image.open(image)
  22. info = image.info
  23. format = image.format
  24. if format in "GIF":
  25. if 'transparency' in info:
  26. image = image.resize((size, size), Image.ANTIALIAS)
  27. image.save(target, image.format, transparency=info['transparency'])
  28. else:
  29. image = image.convert("RGB")
  30. image = image.resize((size, size), Image.ANTIALIAS)
  31. image = image.convert('P', palette=Image.ADAPTIVE)
  32. image.save(target, image.format)
  33. if format in "PNG":
  34. image = image.resize((size, size), Image.ANTIALIAS)
  35. image.save(target, quality=95)
  36. if format == "JPEG":
  37. image = image.convert("RGB")
  38. image = image.resize((size, size), Image.ANTIALIAS)
  39. image = image.convert('P', palette=Image.ADAPTIVE)
  40. image = image.convert("RGB", dither=None)
  41. image.save(target, image.format, quality=95)