0

画像を取得して3つのサイズで返す次の関数があります。次に、別の関数がそれらの画像を A​​mazon S3 にアップロードします。ファイルの保存方法に冗長性があるように思えます-

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)

これを改善する方法はありますか?

4

1 に答える 1

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))で十分です。

于 2012-05-21T08:05:44.327 に答える