【问题标题】:Recieving and converting Base64 string to jpg image [duplicate]接收Base64字符串并将其转换为jpg图像[重复]
【发布时间】:2020-11-19 09:54:10
【问题描述】:

我在我的 c++ 服务器上以 json 值发送以 Base64 编码的图像,并尝试将其解码并作为 .jpg 文件保存在磁盘上。而且我在解码时遇到问题,它保存在磁盘上但没有打开,输入和输出文件的大小略有不同(40.8 kb 与 41.1 kb)。 我尝试了 3 种不同的解码代码,这是最后一种:

typedef unsigned char uchar;
static const std::string b = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";//=
std::string PictureManager::base64_decode(const std::string& in) {
    std::string out;

    std::vector<int> T(256, -1);
    for (int i = 0; i < 64; i++) T[b[i]] = i;

    int val = 0, valb = -8;
    for (uchar c : in) {
        if (T[c] == -1) break;
        val = (val << 6) + T[c];
        valb += 6;
        if (valb >= 0) {
            out.push_back(char((val >> valb) & 0xFF));
            valb -= 8;
        }
    }
    return out;
}

这是我的保存功能:

  bool PictureManager::SavePicture(std::string DecodedString)
{
    std::ofstream Picture;
    Picture.open("PicturePatch.jpg");
    if (!Picture.is_open())
    {
        std::cout << "Error in opening file!" << std::endl;
        return false;
    }
    /*for(std::vector<BYTE>::iterator it = DecodedString.begin(); it != DecodedString.end(); it++)
    {
        Picture << *it;
    
    }*/
    
    Picture << DecodedString;

    return true;
}

请帮忙

【问题讨论】:

  • 您忘记将文件作为二进制文件打开。另见write方法的使用:Writing binary data to fstream in c++
  • 您将图片文件作为文本打开,而不是二进制。这可能是问题所在,您提供了对我有用的解码方法,而问题可能在于编码或图像读取(也作为文本而不是二进制?)。
  • @Botje 我只是使用二进制模式和这个“std::ios::app | std::ios::binary”,它可以工作,非常感谢你的伙伴!再来一次!)
  • 只是二进制标志,我认为您不想附加到现有文件。
  • @SHR 是的,正是我需要的,以二进制模式打开,谢谢!

标签: c++ c encoding base64


【解决方案1】:

检查:

读取文件然后写入并检查:两者是否相同?

您可以使用以下方式比较文件:fc /b f1.jpg f2.jpg

然后检查编码和解码。然后使用memcmp 确保两者相同。

【讨论】:

    猜你喜欢
    • 2015-12-09
    • 1970-01-01
    • 2018-09-07
    • 2014-07-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多