Отправить png как поле json

Я пытаюсь отправить 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)

Кодируйте изображение с помощью base64.

Klaus D. 17.12.2018 20:20

а на str после этого? Дата bc base64 не может быть полем json

SkiF 17.12.2018 20:21
stackoverflow.com/questions/3715493/…
James Jithin 17.12.2018 20:21

@JamesJithin Я пробую data ['img'] = str (base64.b64encode (image)), но результат тот же. Я думаю, что основная проблема в декодировании всего сообщения как utf-8, но я не знаю, как пропустить и загрузить объект json

SkiF 17.12.2018 20:32
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
0
4
872
0

Другие вопросы по теме