summaryrefslogtreecommitdiff
path: root/app/photos/resize.py
blob: 13c01518a0ca5d938239ccca4a5f0a81bdcc4735 (plain)
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)