1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
|
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)
|