简体   繁体   English

在PIL中调整图像大小

[英]Resizing an image in PIL

I have the following function which takes an image and then returns it in three sizes. 我有以下功能,它采取图像,然后以三种尺寸返回它。 Another function then uploads those images to Amazon S3. 然后,另一个功能将这些图像上传到Amazon S3。 It seems to me like there is some redundancy in how the file is being saved - 在我看来,文件如何保存有一些冗余 -

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)

Is there a way to improve this? 有没有办法改善这个?

You could replace: 你可以替换:

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

with

image.thumbnail(size_as_tuple, Image.ANTIALIAS)

(especially since width and height are swapped; it should be width, height = size_as_tuple ) (特别是因为交换了widthheight ;它应该是width, height = size_as_tuple

And you don't need the open() . 而且你不需要open() image.save(os.path.join('/tmp', filename)) is enough. image.save(os.path.join('/tmp', filename))就足够了。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM