繁体   English   中英

将 base64 图像字符串解码为 Unity 中的图像

[英]Decoding base64 image string to an image in Unity

我正在使用以下代码对来自 python 端的图像进行编码,

context = zmq.Context()
socket = context.socket(zmq.PUB)
socket.bind("tcp://*:5558")

frame = cv2.imread("input.jpg")
encoded, buffer = cv2.imencode('.jpg', frame)
encoded_string = base64.b64encode(buffer)
socket.send_string("output", zmq.SNDMORE)
socket.send_pyobj(encoded_string)

最终,我在 Unity 端使用以下代码对其进行解密。

void Start()
{
    AsyncIO.ForceDotNet.Force();
    NetMQConfig.ManualTerminationTakeOver();
    NetMQConfig.ContextCreate(false);
    string topic = "output";
    subSocket = new SubscriberSocket();
    
    var timeout = new System.TimeSpan(0, 0, 1); //1sec
    string subport;
    
    subSocket.Options.ReceiveHighWatermark = 1000;
    subSocket.Connect("tcp://localhost:5558");
    subSocket.Subscribe(topic);
    bool is_connected =  subSocket.TryReceiveFrameString(timeout, out subport);
    
    Debug.Log(is_connected);

    myTexture = new Texture2D(640, 480, TextureFormat.ARGB32, false);
    
    
}

// Update is called once per frame
void Update()
{
        
    string base64string = subSocket.ReceiveFrameString();
    Debug.Log(base64string.Length);
   
    
    if (base64string.Length > 100)
    {
        byte[] imgBytes = Convert. FromBase64String(base64string);

        
        myTexture.LoadRawTextureData(imgBytes);
        myTexture.Apply();

        rawImg.texture = myTexture;
    }
}

不幸的是,它会引发以下错误,

FormatException:输入不是有效的 Base-64 字符串,因为它包含非 base 64 字符、两个以上的填充字符或填充字符中的非法字符。

我错过了什么?

如果您可以尝试通过通道发送一个非常小的图像(编码、传输、接收)并记录打印另一端收到的内容,那将会更有帮助。

我的怀疑

  • 不知何故,您没有转换为 base-64
  • 您最终发送了太多字节或不必要的字节(空终止字符?)
  • 以在末尾添加 CR 或 LF 的方式接收图像内容(例如 'HTTP Response' 正文)

需要更多信息才能提供更好的答案...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM