如何调整图像大小?

时间:2013-05-17 10:36:34

标签: python django image-uploading

我有图像字段和上传功能的表单:

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 [数字]。[扩展名]图像可能是png或jpg,纵向或横向。如何使用宽高比(减少后最终裁剪更长的部分)?

1 个答案:

答案 0 :(得分: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)