ZeroMQ pyzmq通过TCP发送jpeg图像

问题描述 投票:5回答:3

我正在尝试通过与pyzmq的ZeroMQ连接发送jpeg图像文件,但是输出是输入大小的3倍,并且不再是有效的jpeg。我加载图像并发送...

f = open("test1.jpg",'rb')
strng = f.read()
socket.send(strng)
f.close()

我收到并保存为...

message = socket.recv()
f = open("test2.jpg", 'w')
f.write(str(message))
f.close()

我是zmq的新手,我找不到发送图像的任何信息。是否有人通过ZeroMQ发送图像,或者对如何发现问题有任何想法?

image jpeg zeromq pyzmq
3个回答
7
投票

在发送文件之前,您可以“ base64”对其进行编码,并在接收时对其进行解码。

发送:

import base64
f = open("test1.jpg",'rb')
bytes = bytearray(f.read())
strng = base64.b64encode(bytes)
socket.send(strng)
f.close()

接收中:

import base64
message = socket.recv()
f = open("test2.jpg", 'wb')
ba = bytearray(base64.b64decode(message))
f.write(ba)
f.close()

0
投票

C字符串的零复制字符串操作

(来自enter link description here

字节和字符串注意如果您使用的是Python> = 2.6,则要为Python3准备PyZMQ代码,应使用b'message'语法以确保升级后所有字符串文字消息仍为字节。

从用户的角度来看,PyZMQ兼容性最麻烦的事实是,由于ØMQ使用C字符串,并且想要这样做而不复制,因此我们必须使用Py3k字节对象


0
投票

您可以尝试imagezmq。它是专门为使用PyZMQ消息传递来传输图像而构建的。

发件人>>

import socket
import imagezmq

sender = imagezmq.ImageSender(connect_to='tcp://receiver_name:5555')

sender_name = socket.gethostname() # send your hostname with each image

image = open("test1.jpg",'rb')
sender.send_image(sender_name, image)

接收器

import imagezmq

image_hub = imagezmq.ImageHub()

sender_name, image = image_hub.recv_image()
image_hub.send_reply(b'OK')
© www.soinside.com 2019 - 2024. All rights reserved.