Как я могу угадать тип MIME изображения, кросс-платформенным образом, без каких-либо внешних библиотек?

5
iTayb 1 Фев 2013 в 15:03

3 ответа

Лучший ответ

Если вы заранее знаете, что вам нужно обрабатывать только ограниченное число форматов файлов, вы можете использовать imghdr. .Что функция.

9
pafcu 1 Фев 2013 в 12:28

Я проверил формат популярных типов изображений в Википедии и попытался сделать подпись:

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'
2
iTayb 1 Фев 2013 в 11:03

Если вы можете полагаться на расширение файла, вы можете использовать mimetypes.guess_type функция. Обратите внимание, что вы можете получить разные результаты на разных платформах, но я бы все равно назвал это кроссплатформенным.

1
pafcu 1 Фев 2013 в 11:19