1

I have form with image field and my upload function:

def handle_uploaded_file(f, gallery):
    directory = settings.GALLERIES_ROOT+'gal_'+str(gallery.id)+'/'

    # check if directory exist
    try:
        if not os.path.exists(directory):
            os.makedirs(directory)
    except Exception, e:
        print 'DEBUG (directory): ', e

    # find next pic number, to improve
    i = 1
    for r,d,f in os.walk(directory):
        for file in f:
            if fl.startswith("pic"):
                i += 1

    extension = os.path.splitext(f.name.replace(" ", "_"))[1]
    filename = "pic%03d%s" % (i, extension)

    # saving
    try:
        with open(directory + pf + filename, 'wb+') as destination:
            for chunk in f.chunks():
                destination.write(chunk)
        return True
    except Exception, e:
        print 'DEBUG (file writing problem): ', e
    return False

and now I want to resize uploaded image and save them to file ico[number].[extension] Image may be png or jpg, portrait or landscape. How to do this with aspect ratio (eventually cropped longer part after reduction)?

alecxe
  • 462,703
  • 120
  • 1,088
  • 1,195
Nips
  • 13,162
  • 23
  • 65
  • 103

1 Answers1

0

This is just an idea, you need PIL module for it, decrease in 2 times (size_index=0.5), for example:

from tkinter import *
from PIL.ImageTk import PhotoImage
import os

def images_size(filepath):
    main= Tk()
    imgobj = PhotoImage(file=filepath)
    size=(imgobj.width(), imgobj.height())
    return size

def imageResize(filepath, size_index):
    from PIL import Image
    NEAREST=0
    file_dir=os.path.split(filepath)
    size=images_size(filepath)    # get image size
    new_size=(int(size[0]*size_index), int(size[1]*size_index))  # set new size here
    sourceimage = Image.open(filepath)
    sourceimage.resize(new_size, resample=NEAREST).save(file_dir[0]+'\\ico'+file_dir[1])
    print(file_dir[0]+'\\ico'+file_dir[1])


if __name__ == '__main__':
    imageResize('C:\\pict.png', size_index=0.5)
Ilya Sheroukhov
  • 541
  • 4
  • 6