gpt4 book ai didi

c++ - Qt 将 base64 转换为 QImage 返回 null

转载 作者:搜寻专家 更新时间:2023-10-31 01:31:34 25 4
gpt4 key购买 nike

我有问题。我必须将 base64 转换为 QImage,但之后该图像始终为空。这是代码:

void convertAll(QString path)
{
QDir *dir = new QDir(path);
QDirIterator *iter = new QDirIterator(*dir);
QVector<QFile*> files;

QTextStream cout(stdout);

cout << "Finding files...\n";
cout.flush();

while (iter->hasNext())
{
iter->next();
if (iter->fileInfo().completeSuffix() == "txt")
files.push_back(new QFile(iter->filePath()));
}

delete iter;

cout << "Converting files to images...\n";
cout.flush();

foreach (QFile *file, files)
{
QString filename = QFileInfo(*file).fileName();
filename.remove(".txt");

file->open(QIODevice::ReadOnly);
QTextStream stream(file);

cout << "Reading file...\n";
cout.flush();

QByteArray base64Data = stream.readAll().toUtf8();
cout << "Reading is completed!\n";
cout.flush();
file->close();


QImage *image = new QImage();
cout << "Converting...\n";
cout.flush();


image->loadFromData(QByteArray::fromBase64(base64Data), "GIF");
if (!image->isNull())
{
cout << "Converting is completed! Saving...\n";
cout.flush();
}
else
{
cout << "Error converting to image!\n\n";
cout.flush();
delete image;
delete file;
continue;
}

if (image->save("/home/prosperis/ProgramFiles/Content/" + filename + ".bmp", "BMP"))
{
cout << "Saved successful!\nFile " << filename << ".bmp has been made!\n\n";
cout.flush();
}
else
{
cout << "Error saving the file!\n\n";
cout.flush();
}


delete image;
delete file;
}

delete dir;
}

结果截图:

Result

Base64 示例:

data:image/gif;base64,iVBORw0KGgoAAAANSUhEUgAAACgAAAAoCAYAAACM/rhtAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAADxSURBVFhH7ZSxDYMwEEW9RdqU9MhFOho6WrwAE0SsESGlyABpvEU2yB5ZItLFnG1kkJEgipUjuSdZWG78+HdnwTAMAR73J7gtXTYjOSd61Wc6PxCTJCXYM5X8muDldJi9OJQkKdjj+5KsoGcTgrHhSc5PJei2iVA1qNvRrBoyIYbLiAjmUBi5Sjc0BbPOJKdL2LVG0HzdMbJEMG16WNoGpBQUBW1pC2VLikl2OR3BqRAtQSzteCBigkv4vKAsoQpK65HaTHK7JyA4vHnxtVYy4ZCEjAdmDSyIYF/a99CdLCaxoE0u7MF3UmQYhmGYv0SIF0Zn9rmd3QoAAAAAAElFTkSuQmCC

如果我删除 data:image/gif;base64,

它也不起作用

最佳答案

我用这个简单的例子试了一下,它在我的机器上运行。

QByteArray txt = "iVBORw0KGgoAAAANSUhEUgAAACgAAAAoCAYAAACM/rhtAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAADxSURBVFhH7ZSxDYMwEEW9RdqU9MhFOho6WrwAE0SsESGlyABpvEU2yB5ZItLFnG1kkJEgipUjuSdZWG78+HdnwTAMAR73J7gtXTYjOSd61Wc6PxCTJCXYM5X8muDldJi9OJQkKdjj+5KsoGcTgrHhSc5PJei2iVA1qNvRrBoyIYbLiAjmUBi5Sjc0BbPOJKdL2LVG0HzdMbJEMG16WNoGpBQUBW1pC2VLikl2OR3BqRAtQSzteCBigkv4vKAsoQpK65HaTHK7JyA4vHnxtVYy4ZCEjAdmDSyIYF/a99CdLCaxoE0u7MF3UmQYhmGYv0SIF0Zn9rmd3QoAAAAAAElFTkSuQmCC";

QPixmap image;
image.loadFromData(QByteArray::fromBase64(txt));
ui->label->setPixmap(image);

关于c++ - Qt 将 base64 转换为 QImage 返回 null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45583539/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com