You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

46 lines
1.9 KiB

11 years ago
11 years ago
11 years ago
11 years ago
11 years ago
  1. #!/usr/bin/env python
  2. from __future__ import division
  3. import os, sys
  4. from PIL import Image
  5. from PIL import ImageEnhance
  6. import argparse
  7. parser = argparse.ArgumentParser()
  8. parser.add_argument("--width", dest="width", type=int, required=True)
  9. parser.add_argument("--height", dest="height", type=int, required=True)
  10. parser.add_argument("--crop", action="store_true", required=False)
  11. parser.add_argument("--keep-aspect-ratio", dest="keep_aspect_ratio", action="store_true", required=False)
  12. parser.add_argument("source", type=str)
  13. parser.add_argument("destination", type=str)
  14. args = parser.parse_args()
  15. size = args.width, args.height
  16. infile = args.source
  17. outfile = args.destination
  18. try:
  19. im = Image.open(infile)
  20. im = im.convert()
  21. if args.crop:
  22. width_crop = im.size[0]
  23. height_crop = int(im.size[0]/(args.width/args.height))
  24. width_padding = 0
  25. height_padding = int((im.size[1]-height_crop)/2)
  26. if height_crop > im.size[1]:
  27. width_crop = int(im.size[1]/(args.height/args.width))
  28. height_crop = im.size[1]
  29. width_padding = int((im.size[0]-width_crop)/2)
  30. height_padding = 0
  31. print((width_padding, height_padding, width_crop+width_padding, height_crop+height_padding))
  32. im_crop = im.crop((width_padding, height_padding, width_crop+width_padding, height_crop+height_padding))
  33. im_result = im_crop.resize(size, Image.ANTIALIAS)
  34. else:
  35. im.thumbnail(size, Image.ANTIALIAS)
  36. if args.keep_aspect_ratio:
  37. im_result = im
  38. else:
  39. im_result = Image.new('RGB', (args.width, args.height), (255, 255, 255))
  40. im_result.paste(im, ((args.width - im.size[0]) / 2, (args.height - im.size[1]) / 2))
  41. enhancer = ImageEnhance.Contrast(im_result)
  42. im_result = enhancer.enhance(1.05)
  43. im_result.save(outfile, "JPEG", quality=100)
  44. except IOError:
  45. print("cannot create thumbnail for '%s'" % infile)