Я пытаюсь отправить png-изображение, захваченное ffmpeg, бросить RabbitMQ. Когда я отправил только png в теле RabbitMQ, все было в порядке.
Но теперь мне нужно добавить информацию в сообщение. Я думал, что отправить png как json легко, но объект png - это байтовый объект, и его необходимо преобразовать в строку, потому что, если я не конвертирую его в строку, json.dumps throw exception «не сериализуемый JSON».
Я попытался преобразовать байт в str после того, как эта отправка была успешной, но когда я оживаю, я не могу сохранить его как файл png, который он сохраняет как текстовый файл. Но мне нужно сохранить его как файл png.
Отправитель
data['img']=str(image)
data['camera_id']=0
channel.basic_publish(exchange='',
routing_key='hello',
body=json.dumps(data))
Ресивер
def callback(ch, method, properties, body):
data= json.loads(body.decode("utf-8"))
print(data['camera_id'])
f = open("pypeg.png",'wb')
f.write(data['img'].encode())
f.close()
Возможно, вы теперь знаете, как отправить просто изображение в теле RabbitMQ и отправить свойства другим способом. Или как кодировать / кодировать изображение png для правильного преобразования в json и сохранения в файл.
Я пробовал использовать base64.encode (), но json.dumps отправляет такое же исключение, поэтому я использую decode ('utf-8')
data['img']=base64.b64encode(image).decode('utf-8')
поэтому я редактировал приемник
b1 = data['img'].encode('utf-8')
b2= base64.b64decode(b1)
f.write(b2)
а на str после этого? Дата bc base64 не может быть полем json
@JamesJithin Я пробую data ['img'] = str (base64.b64encode (image)), но результат тот же. Я думаю, что основная проблема в декодировании всего сообщения как utf-8, но я не знаю, как пропустить и загрузить объект json
Кодируйте изображение с помощью base64.