1

画像フィールドとアップロード機能を備えたフォームがあります。

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

そして今、アップロードされた画像のサイズを変更し、ファイル ico[number].[extension] に保存したい画像は、pngまたはjpg、縦向きまたは横向きです。アスペクト比でこれを行う方法(最終的に縮小後に長い部分をトリミング)?

4

1 に答える 1

0

これは単なるアイデアです。そのためには PIL モジュールが必要です。たとえば、2 倍 (size_index=0.5) に減少します。

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)
于 2013-05-17T12:34:00.470 に答える