avatars.py 1.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546
  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, info=None, format=None):
  20. if isinstance(image, basestring):
  21. image = Image.open(image)
  22. if not info:
  23. info = image.info
  24. if not format:
  25. format = image.format
  26. if format == "GIF":
  27. if 'transparency' in info:
  28. image = image.resize((size, size), Image.ANTIALIAS)
  29. image.save(target, image.format, transparency=info['transparency'])
  30. else:
  31. image = image.convert("RGB")
  32. image = image.resize((size, size), Image.ANTIALIAS)
  33. image = image.convert('P', palette=Image.ADAPTIVE)
  34. image.save(target, image.format)
  35. if format == "PNG":
  36. image = image.resize((size, size), Image.ANTIALIAS)
  37. image.save(target, quality=95)
  38. if format == "JPEG":
  39. image = image.convert("RGB")
  40. image = image.resize((size, size), Image.ANTIALIAS)
  41. image = image.convert('P', palette=Image.ADAPTIVE)
  42. image = image.convert("RGB", dither=None)
  43. image.save(target, image.format, quality=95)