imghdr.what () не работает с буфером BytesIO - PullRequest
0 голосов
/ 23 мая 2019

Я работаю над функцией, которая позволяет пользователям загружать изображения в веб-приложение Python-Flask. Загруженное изображение преобразуется в буфер BytesIO и никогда не сохраняется на диск. Я хочу использовать imghdr.what(), чтобы определить тип изображения (png, jpg и т. Д.) И посмотреть, разрешено ли пользователям загружать этот формат. Если формат не разрешен, загрузка будет отклонена.

Следуя документации imghdr.what () , я написал следующий код,

    image_data.seek(0)
    image_type = imghdr.what(None, h=image_data.read())
    image_data.seek(0)

К сожалению, когда я вызываю это с png-изображением, возвращается None для image_type. Я попробовал следующие варианты с тем же изображением.

    image_data.seek(0)
    image_type = imghdr.what('', h=image_data.read())
    image_data.seek(0)

Опять же, вышеприведенное вернуло None для image_type.

    image_data.seek(0)
    image_type = imghdr.what(None, h=image_data)
    image_data.seek(0)

Вышеприведенное возвращает ошибку, TypeError: '_io.BytesIO' object is not subscriptable

    image_data.seek(0)
    image_type = imghdr.what('', h=image_data.read)
    image_data.seek(0)

Выше выдает ту же ошибку, TypeError: '_io.BytesIO' object is not subscriptable

Вот код из conftest.py, где я создаю макет png изображения,

@pytest.fixture
def test_image_BytesIO():
    test_dir = os.path.dirname(os.path.realpath(__file__))
    local_path = os.path.join(test_dir, 'images/204Cat.png')
    img_bytes = Pimage.open(local_path).tobytes()
    return BytesIO(img_bytes)

Я уже посмотрел на эти ресурсы:
Примеры использования imghdr.what ()
Определите тип изображения в Python, используя imghdr
Определение типа изображения с помощью Python imghdr

TLDR : Как заставить imghdr.what() работать с изображением в формате BytesIO?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...