C++ base64字符串Qt中的图像加载错误

C++ base64字符串Qt中的图像加载错误,c++,image,qt,base64,qimage,C++,Image,Qt,Base64,Qimage,这是我的密码。当base64字符串以“iV”开头时,工作正常。但在另一种情况下(例如,当它以“/9j/”开头时),cover返回NULL。有什么问题吗?好吧,有多种口味的咖啡。您确定要输入的Base64与预期兼容吗?也许,您必须处理第二个参数(the)。通常,Base64编码数据只意味着二进制已被转换为仅由可打印ASCII字符组成的数据(用于在仅允许文本的情况下嵌入二进制数据)。通过兼容解码,可以(无损)从Base64编码文本中恢复二进制数据。但是,您确定Base64编码的文本都包含图像吗?很难

这是我的密码。当base64字符串以“iV”开头时,工作正常。但在另一种情况下(例如,当它以“/9j/”开头时),cover返回NULL。有什么问题吗?

好吧,有多种口味的咖啡。您确定要输入的Base64与预期兼容吗?也许,您必须处理第二个参数(the)。通常,Base64编码数据只意味着二进制已被转换为仅由可打印ASCII字符组成的数据(用于在仅允许文本的情况下嵌入二进制数据)。通过兼容解码,可以(无损)从Base64编码文本中恢复二进制数据。但是,您确定Base64编码的文本都包含图像吗?很难在Base64编码的文本上看到它包含的内容。(很难从二进制数据本身推断出来。)尽管如此,大多数图像格式都是从一个神奇的代码开始的(总是一样的)。。。。因此,我猜想以“iV”开头的字符串可能是一种图像(文件)格式,而以“/9j/”开头的字符串可能是另一种格式。即使从内存加载图像,也需要相应的Qt图像加载程序插件。因此,后者可能无法加载。要解决这个问题,只需解码文本并转储二进制数据。然后你就可以猜出你用的是什么格式了。(顺便说一句,我忽略了一个事实,即你的事件没有提到封面的类型,假设它可能是
QImage
)@Scheff我检查了base64数据,它给了我正确的图像。但是当我在qimage中加载它时,它会返回null。请看我的另一个想法:即使你从内存中加载图像,你仍然需要相应的Qt图像加载程序插件。尝试直接加载无法正确解码的图像。-如果您发现这不是可疑问题,那么最后一步(我将检查)是
QByteArray::fromBase64(text.c_str())
是否总是解码整个二进制数据。并不是说它会在接近尾声时中止,而你会错过它,因为你得到了一些东西。这应该很容易通过比较(至少)orig的大小来实现。使用您在
QByteArray
中获得的图像。
string text = "Some base64 string";
QByteArray bytes = QByteArray::fromBase64(text.c_str());
cover.loadFromData(bytes);