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