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