项目中跟Java对接的时候需要传输图片,经过Base64编码后传输的。
但是实际调试的时候发现Java那边始终无法正常解析出图片。
冷静想想之后,发现问题在于使用OpenCV读取图片,编码的是Mat::data,图片的纯数据,并非包含完整图片格式头的数据。
需要进行如下操作:
Mat faceMat = imread(signlogList[i].snapshot_url); vector<uchar> buff;//buffer for coding vector<int> param = vector<int>(2); param[0]=CV_IMWRITE_JPEG_QUALITY; param[1]=95;//default(95) 0-100 //指定图片格式,编码,写进内存,此处是jpg的 imencode(".jpg",faceMat,buff,param); //上述的buff包含了完整的图片格式 //将数据拷贝至自定义内存 char* imgData = new char[buff.size()]; memset(imgData, 0, buff.size()); for (int ii=0;ii < buff.size();ii++) { imgData[ii] = buff[ii]; } //再进行Base64编码 std::string imgBase64=""; CBase64::Encode((uchar*)imgData, buff.size(),imgBase64);
CBase64库如下: