最近我遇到这样一个问题,图片数据的保存问题,字符串形式的原编码图片数据(JPG),例如数据是这样的:
QString picData="FFD8FFDB0043000503040404030504040406050506070C08070707070F0B0B
090C1210131312101111141......(一张图片那么多数据我不可能放这里吧,中间这段就省略了)7A
33E9484F7A0051F5A07E1499345007FFFD9";
众所周知,JPG的图片数据以FFD8开头、FFD9结尾,这个时候的数据是QT的字符串形式,要想变成一张图片,首先想到的就是编码格式问题吧,好家伙我上网一顿搜索啊,结果大多数都是转Base64就可,结果并不是,其他的就是二进制流写入.jpg文件,我一想对啊,图片都不是二进制的数据吗,我就直接给写进去了,结果可想而知,稀烂
解决方法:两个字符长度表示一个字节的十六进制数,先转成char类型的数据,在写入到文件,这里用数组也行,都一样:
QFile fd("./image_file/Cache/testpic.jpg");
fd.open(QIODevice::ReadWrite|QIODevice::Truncate);
for(int i=0;i<picData.length();i+=2){
char groupmove=picData.mid(i,2).toUInt(nullptr,16);
QDataStream stream(&fd);
stream.writeRawData(&groupmove,1);//二进制数据流写,二个参数长度
}
fd.close();
然后我用UltraCompare打开一看,成了,图片就不展示了,看看最后的成果就行