Как разобрать и сохранить ответ Multipart/related type=image/jpeg? (Ответ Dicom Wado)

Я делаю запрос Get на сервер Dicom, который возвращает Multipart/Related Type=image/jpeg. Я попытался использовать функцию aiohttp libararies Multipart для синтаксического анализа, но она не сработала. Сохраненный файл поврежден.

Вот мой код.

    import asyncio
    import aiohttp
    '''
    async def fetch(url,session,header):
        async with session.get(url,headers=header) as response:
             await response

    async def multiHit(urls,header):
        tasks = []
        async with aiohttp.ClientSession() as session:
            for i,url in enumerate(urls):
                tasks.append(fetch(url,session,header))
            result = await asyncio.gather(*tasks)
            return result

    loop = asyncio.get_event_loop()
    res = loop.run_until_complete(multiHit(["FRAME URL"],{"Accept":"multipart/related;type=image/jpeg"}))
    print(res)
    '''

    async def xyz(loop):
        async with aiohttp.ClientSession(loop=loop).get(url="FRAME URL",headers={"Accept":"multipart/related;type=image/jpeg"}) as response:
             reader = aiohttp.MultipartReader.from_response(response)
             while True:
                 part = await reader.next()
                 if part is None:
                     break
                 filedata = await part.read(decode=False)
                 import base64
                 with open('m.jpeg','wb') as outFile:
                     outFile.write(part.decode(filedata))
        return 1

    loop = asyncio.get_event_loop()
    res = loop.run_until_complete(xyz(loop))

Как разобрать ответ Multipart/related и сохранить изображения?

1 ответ

Решение

Я понял, что правильно разбираю ответ, состоящий из нескольких частей, но мне пришлось использовать другую библиотеку (имя библиотеки: imagecodecs, имя метода: jpegsof3_decode), чтобы распаковать отдельные части в изображения. Это дает большой массив изображения. Вот обновленный код

reader = aiohttp.MultipartReader.from_response(response)
while True:
     part = await reader.next()
     if part is None:
              break
     data = await part.read()
     imageDecompressed = jpegsof3_decode(data)

Далее массив numpy можно преобразовать в изображение с помощью cv2 libray

success, encoded_image = cv2.imencode('.png',imageDecompressed)

Таким образом можно получить байтовую версию преобразованного изображения.

imageInBytes = encoded_image.tobytes()
Другие вопросы по тегам