ZeroMQ pyzmq通过tcp发送jpeg图像

时间:2014-07-16 22:06:47

标签: image jpeg zeromq pyzmq

我试图通过与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发送图像,或者对如何找到问题有任何想法?

3 个答案:

答案 0 :(得分:5)

在发送文件之前,您可以对其进行“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()

答案 1 :(得分:2)

您可以尝试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')

答案 2 :(得分:0)

对C字符串进行零拷贝字符串操作

(来自enter link description here

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

从用户的角度来看PyZMQ兼容性最麻烦的部分是,由于ØMQ使用C字符串,并且希望不复制,我们必须使用Py3k字节对象