Я пытаюсь отправить png изображение, снятое ffmpeg throw RabbitMQ.Когда я отправил только png в теле RabbitMQ, все было в порядке.
Но теперь мне нужно добавить некоторую информацию в сообщение.Я думал, что отправить png как json легко, но объект png является байтовым объектом, и его необходимо преобразовать в строку, потому что, если я не преобразую его в строку, исключение выброса json.dumps "не сериализуемо в 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)