import os import io from django.conf import settings try: import Image import ImageFile except ImportError: try: from PIL import Image from PIL import ImageFile except ImportError: raise ImportError("Could not import the Python Imaging Library.") ImageFile.MAXBLOCK = 1000000 def make_local_copies(self,photo): orig_dir = settings.IMAGES_ROOT + '/flickr/full/' + photo.pub_date.strftime("%Y") if not os.path.isdir(orig_dir): os.makedirs(orig_dir) im = io.StringIO(fname.read().decode('UTF-8')) # constructs a StringIO holding the image img = Image.open(im) local_full = '%s/%s.jpg' % (orig_dir, photo.flickr_id) img.save(local_full) #calculate crop: cur_width, cur_height = img.size new_width, new_height = 291, 350 ratio = max(float(new_width) / cur_width, float(new_height) / cur_height) x = (cur_width * ratio) y = (cur_height * ratio) xd = abs(new_width - x) yd = abs(new_height - y) x_diff = int(xd / 2) y_diff = int(yd / 2) box = (int(x_diff), int(y_diff), int(x_diff + new_width), int(y_diff + new_height)) # create resized file resized = img.resize((int(x), int(y)), Image.ANTIALIAS).crop(box) # save resized file resized_filename = '%s/%s.jpg' % (crop_dir, set.id) try: if img.format == 'JPEG': resized.save(resized_filename, 'JPEG', quality=95, optimize=True) else: resized.save(resized_filename) except IOError as e: if os.path.isfile(resized_filename): os.unlink(resized_filename) raise e os.unlink(img)