【问题标题】:Loading image from Flask's request.files attribute into PIL Image将 Flask 的 request.files 属性中的图像加载到 PIL 图像中
【发布时间】:2013-07-18 20:20:47
【问题描述】:
image = Image.open(request.files["fullimage"])

返回:

IOError: 无法识别图像文件

image = Image.open(request.files["fullimage"].read())

返回:

IOError: [Errno 22] 无效模式 ('rb') 或文件名: ''

请问这样做的正确方法是什么?

【问题讨论】:

  • 这不是我帖子中的第一个sn-p吗?
  • 文件在哪里?它有多大?当您上传文件时,您在表单中看到的确切文本是什么?可以分享一下查看代码吗?

标签: python flask python-imaging-library


【解决方案1】:

这可以工作。

img = Image.open(request.files['file'].stream)

也许为时已晚,但希望它能帮助其他发现此问题的人。

【讨论】:

    【解决方案2】:

    我知道这会发生:在尝试组合一个简单的测试用例时,我发现了问题并修复了它。它失败了,因为在尝试将其加载到图像中的行之前,我正在做其他事情,包括:

    request.files["fullimage"].read()
    

    没有它,它工作得很好。添加:

    request.files["fullimage"].seek(0)
    

    在它和将它加载到图像中的行之间解决了这个问题。我的意思是,我现在有另一个问题,但我会单独发布;-)

    【讨论】:

    • 您只能从request.files 读取“文件”一次。它是一个流,所以当你阅读它时,你会清空它。 seek(0) 帮不了你。
    • 那可能是我下一个问题的原因!我可以复印吗?
    • 您可以将其保存到一个临时文件:docs.python.org/2/library/tempfile.html - 创建这样一个文件对象并将其传递给save()
    • 这是唯一的方法吗?我不能创建内存中的副本吗?
    • @matthewk:当然,将其写入StringIO/cStringIO 对象。
    猜你喜欢
    • 1970-01-01
    • 2011-12-08
    • 1970-01-01
    • 1970-01-01
    • 2011-03-30
    • 1970-01-01
    • 1970-01-01
    • 2021-04-14
    • 2017-07-12
    相关资源
    最近更新 更多