Django- как преобразовать <класс 'django.core.files.uploadedfile.InMemoryUploadedFile'> в изображение?

У меня есть форма, которая загружает изображение в мое представление; тип загруженного изображения:

<class 'django.core.files.uploadedfile.InMemoryUploadedFile'>

Однако я хочу обработать изображение; поэтому мне это нужно в формате PIL или CV2.

Как мне это сделать ?

🤔 А знаете ли вы, что...
Python обладает обширной документацией и активным сообществом разработчиков.


54
1

Ответ:

Решено

Django File фактически реализует все необходимые PIL.Image.open() методы типичного файлового объекта. InMemoryUploadedFile — это Джанго File.

Вы можете повторно открыть File в правильном mode, а затем передать его PIL.Image.open(). Этого должно быть достаточно: [1]

someFile: InMemoryUploadedFile = # •••Already has a value•••
someFile = someFile.open("b+")
with PIL.Image.open(someFile) as img:
    # •••Do something•••

[1] The solution doesn’t copy the underlying bytes of the file object but simply passes a handle of it from one routine to another. BEWARE OF DATA RACES.