項目中跟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庫如下: