我正在尝试通过与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发送图像,或者对如何发现问题有任何想法?
在发送文件之前,您可以“ 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()
C字符串的零复制字符串操作
(来自enter link description here)
字节和字符串注意如果您使用的是Python> = 2.6,则要为Python3准备PyZMQ代码,应使用b'message'
语法以确保升级后所有字符串文字消息仍为字节。
从用户的角度来看,PyZMQ兼容性最麻烦的事实是,由于ØMQ使用C字符串,并且想要这样做而不复制,因此我们必须使用Py3k字节对象
您可以尝试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')