Я работаю над функцией, которая позволяет пользователям загружать изображения в веб-приложение 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?