【发布时间】:2012-06-20 19:54:01
【问题描述】:
我目前正在开发一个显示由 C++ 服务器发送的图像的 WebSocket 应用程序。 我在那里看到了几个主题,但我似乎无法摆脱 Firefox 中的这个错误:
图像损坏或截断:data:image/png;base64,[some data]
这是我用来显示我的 blob 的 Javascript 代码:
socket.onmessage = function(msg) {
var blob = msg.data;
var reader = new FileReader();
reader.onloadend = function() {
var string = reader.result;
var buffer = Base64.encode(string);
var data = "data:image/png;base64,"+buffer;
var image = document.getElementById('image');
image.src = data;
};
reader.readAsBinaryString(blob);
}
我正在使用我在此主题上找到的红点图像:https://stackoverflow.com/a/4478878/1464608 Base64 类来自这里:https://stackoverflow.com/a/246813/1464608
但我得到的 base64 结果不匹配,并且 Firefox 检索到图像已损坏的错误。
我知道这不是很多信息,但我不知道去哪里看:/ 任何帮助都非常受欢迎!
【问题讨论】:
-
也许您可以尝试在其他地方解码您的编码图像,以确保您的编码/解码方法是正确的。
-
尝试比较
Base64.encode(string)和btoa(string)的结果。大多数 base64 库的操作与btoa对于高值字节的操作略有不同;也许这是你的问题? -
我已经尝试过 btoa() 并且确实给出了不同的结果,但仍然无法正常工作。
-
我刚刚找到了那个链接:stackoverflow.com/a/10469264/1464608,说明 websockets 不能发送图像或二进制数据以外的任何东西。所以我在 C++ 中将我的二进制数据转换为 base64,而不是使用这个:adp-gmbh.ch/cpp/common/base64.html 这样我的图像在 Firefox 中正确显示。但是,图像大小要大 30%!使用 WebSockets 直接发送 PNG 图像真的不可能吗?顺便说一句,图像不是二进制数据吗? (对不起,如果这是一个愚蠢的问题:o))
标签: javascript html websocket blob filereader