我试图使用Qt 5.7用C编写的应用程序++,基本上它应该是一个WebSocket的服务器,使用qwebsocket为此,能够发送图像阐述与OpenCV的一个HTML客户端。我正在试图做的是编码图像用base64,传输和客户端把编码字符串中的图像标签的src。 只是为了测试,我可以正确地发送/接收短信,所以WebSocket的建筑工作,但我有一些问题的图像。这是我的代码片段:发送OpenCV的垫图像的WebSocket向HTML客户
服务器
cv::Mat imgIn;
imgIn = cv::imread("/home/me/color.png",CV_LOAD_IMAGE_COLOR);
QByteArray Img((char*)(imgIn.data),imgIn.total()*imgIn.elemSize());
QByteArray Img64 = Img.toBase64();
pClient->sendBinaryMessage(Img64);
客户
<img id="ItemPreview" src="" style="border:5px solid black" />
....
websocket.binaryType = "arraybuffer";
websocket.onmessage = function (evt) {
console.log("Message received :", evt.data);
document.getElementById("ItemPreview").src = "data:image/png;base64," + evt.data;
};
我想大多数的问题都在服务器,因为基地64序列我从图像中得到的是从一个我可以从网上转换图像/ BASE64得到不同。 在客户端我收到此错误在控制台,并没有什么表明:
数据:图像/ PNG; BASE64,[对象ArrayBuffer]:1 GET 数据:图像/ PNG; BASE64,[对象ArrayBuffer] net :: ERR_INVALID_URL
任何提示?
SOLUTION
感谢的建议,我可以提供的工作代码:
服务器
imgIn = cv::imread("/home/me/color.png", CV_LOAD_IMAGE_UNCHANGED);
std::vector<uchar> buffer;
cv::imencode(".png",imgIn,buffer);
std::string s = base64_encode(buffer.data(),buffer.size());
pClient->sendTextMessage(QString::fromStdString(s));
客户
删除这一行:
websocket.binaryType = "arraybuffer";
在服务器中的base64编码使用该代码来完成:
为什么'websocket.binaryType =“arraybuffer”;',如果你只是想要一个base64字符串? –