对JSON传递图片Base64编码的一点总结

项目中跟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库如下:

与Web交互可用的图片Base64编码

原文地址:https://www.cnblogs.com/zhehan54/p/9366803.html