2012-05-21 149 views
0

我有以下功能,它會拍攝一張圖像,然後以三種尺寸返回。另一個功能是將這些圖像上傳到Amazon S3。在我看來,似乎有一些冗餘的文件如何保存 -在PIL中調整圖像大小

def resize_image(image, size_as_tuple): 
    """ 
    Example usage: resize_image(image, (100,200)) 
    """ 

    image_as_string="" 
    for c in image.chunks(): 
     image_as_string += c 

    imagefile = cStringIO.StringIO(image_as_string) 
    image = Image.open(imagefile) 

    if image.mode not in ("L", "RBG"): 
     image = image.convert("RGB") 

    filename = ''.join(random.choice(string.ascii_uppercase + string.digits) for x in range(14)) + ".jpg" 
    height, width = size_as_tuple[0], size_as_tuple[1] 
    image.thumbnail((height, width), Image.ANTIALIAS) 

    imagefile = open(os.path.join('/tmp', filename), 'w') 
    image.save(imagefile, 'JPEG') 

    imagefile = open(os.path.join('/tmp', filename), 'r') 
    content = File(imagefile) 

    return (filename, content) 

有沒有辦法改善這種情況?

回答

2

您可以取代:

height, width = size_as_tuple[0], size_as_tuple[1] 
image.thumbnail((height, width), Image.ANTIALIAS) 

image.thumbnail(size_as_tuple, Image.ANTIALIAS) 

(尤其是因爲widthheight被交換;它應該是width, height = size_as_tuple

而且你不需要open()image.save(os.path.join('/tmp', filename))就夠了。

+0

謝謝你的提示! – David542