PIL调整大小图像返回NoneType

时间:2017-03-18 18:41:05

标签: python python-imaging-library boto3

我尝试使用thumbnail()/resize()函数调整图片大小,我知道这个thumbnail()会返回NoneType因为它确实具有魔力并且不创建副本。我尝试过几个选项: 注意:我不想将其保存到本地,这将发送到s3

original_image是一个文件存储,它来自form

尝试1:

from PIL import Image
from io import BytesIO

def resize_img(original_image, size):
    sizes = {
        'thumbnail': (128, 128),
        'medium': (640, 640),
        'large': (1024, 1024)
    }

    im = Image.open(BytesIO(original_image.read()))
    return im.thumbnail(sizes[size], Image.ANTIALIAS)

返回NoneType并且无法使用它。有没有办法让它返回可用的东西?

尝试2:

wpercent = (sizes[size]/float(im.size[0]))
hsize = int((float(im.size[1])*float(wpercent)))
return im.resize((sizes[size], hsize), Image.ANTIALIAS)

返回<class 'PIL.JpegImagePlugin.JpegImageFile'>,但boto3抱怨此Fileobj must implement read

我有什么选择?

2 个答案:

答案 0 :(得分:1)

以下是我提出解决方案的方法。感谢@jasonharper

traces | extend d = parsejson(message) | mvexpand d.address

此解决方案有效且JLabel也不会抱怨。

答案 1 :(得分:0)

我从上面的代码中看到,您也在尝试:

return im.thumbnail(sizes[size], Image.ANTIALIAS)

但是,Image.thumbnail是返回None的就地操作。您将需要以下内容:

im.thumbnail(sizes[size], Image.ANTIALIAS)
return im

您可能还想对原始图像进行.copy()处理。

P.S。 sizes[size]必须是一个元组。在您的示例中。我只是说这是因为我个人几次犯了这个错误。 :)