【问题标题】:Correct way to handle mime types in a downloader在下载器中处理 mime 类型的正确方法
【发布时间】:2017-03-27 13:48:30
【问题描述】:

我在 python 中使用 requests 库通过 http 下载图像文件。我在 python 中使用 BytesIO 将接收到的内容转换为原始字节,然后使用 Pillow() 将此原始内容保存为 jpeg 文件。

from PIL import Image
from io import BytesIO

rsp = requests.get(imageurl)
content_type_received = rsp.headers['Content-Type'] # mime type
binarycontent = BytesIO(rsp.content)
if content_type_received.startswith('image'): # image/jpeg, image/png etc
    i = Image.open(binarycontent)
    outfilename = os.path.join(outfolder,'myimg'+'.jpg')
    with open(outfilename, 'wb') as f:
        f.write(rsp.content)
    rsp.close()

在上面的代码中,无论 mime 类型如何,我都强制转换为 jpg。这对我来说似乎并不好。在 python 或 Pillow 库中是否有处理 mime 子类型 image/png、image/gif 等的标准方法?

【问题讨论】:

    标签: python python-3.x python-requests pillow bytesio


    【解决方案1】:

    不完全确定您正在尝试做什么,但此库 Python Magic 将允许您检查文件头以解释 MIME 类型。

    编辑: 如果您信任内容类型(通常不应该),请继续使用它命名文件。如果您不使用 Python 魔法来询问图像类型然后使用它。您保存的文件没有被“转换”,它是发送的任何格式。

    【讨论】:

    • 我正在尝试保存通过 python 请求收到的图像,可能是 png、jpeg 等。我认为它不应该以这种方式突然转换为 jpeg。
    • 这个答案也可能有帮助stackoverflow.com/questions/13137817/…
    • 如果您不打算对图像对象做任何事情,则不需要使用 Pillow。只需检查 rsp.raw 的前 1024 个字节:real_mime_type = magic.from_buffer(rsp.raw.read(1024), mime=True) 并决定如何处理 rsp.content(丢弃或保存)。
    猜你喜欢
    • 2013-11-09
    • 2014-09-01
    • 1970-01-01
    • 2013-02-20
    • 1970-01-01
    • 2012-04-19
    • 2012-09-10
    • 2016-03-19
    • 2014-11-10
    相关资源
    最近更新 更多