Python 如何猜测图像mime类型?

Python 如何猜测图像mime类型?,python,image,cross-platform,mime,Python,Image,Cross Platform,Mime,我如何才能在没有任何外部库的情况下,以跨平台的方式猜测图像的mime类型?我在wikipedia上检查了流行图像类型的格式,并尝试制作签名: def guess_image_mime_type(f): ''' Function guesses an image mime type. Supported filetypes are JPG, BMP, PNG. ''' with open(f, 'rb') as f: data = f.rea

我如何才能在没有任何外部库的情况下,以跨平台的方式猜测图像的mime类型?

我在wikipedia上检查了流行图像类型的格式,并尝试制作签名:

def guess_image_mime_type(f):
    '''
    Function guesses an image mime type.
    Supported filetypes are JPG, BMP, PNG.
    '''
    with open(f, 'rb') as f:
        data = f.read(11)
    if data[:4] == '\xff\xd8\xff\xe0' and data[6:] == 'JFIF\0':
        return 'image/jpeg'
    elif data[1:4] == "PNG":
        return 'image/png'
    elif data[:2] == "BM":
        return 'image/x-ms-bmp'
    else:
        return 'image/unknown-type'

如果可以依赖文件扩展名,则可以使用该函数。请注意,您可能会在不同的平台上得到不同的结果,但我仍然称之为跨平台。

如果您事先知道只需要处理有限数量的文件格式,则可以使用该功能。

正如您所说,如果您可以依赖文件扩展名,则该功能非常有用。我最近使用了一些web服务,它们向您发送没有文件名的原始图像数据,因此在这种情况下是无用的。为什么不要求使用外部库?因为当您的情况很简单时,如果一个小代码段可以完成这项工作,那么就不需要加载繁重的全负荷库。外部库可以完全按照您在自己的代码中完成的方式来完成这项工作。通过使用轻量级的外部库,您可以避免编写代码和潜在的bug。我甚至可以想象基于C库的东西(比如libmagic)比用普通Python编写的东西更快、更轻。你不必手动查找签名,你可以通过解析Had来重新实现libmagic的一部分,在二进制字符串比较之前添加“b”,使它工作起来,而不知道
imghdr
。太棒了。