簡體   English   中英

Qt將base64轉換為QImage返回null

[英]Qt Converting base64 to QImage returns null

我有問題。 我必須將base64轉換為QImage,但是之后該圖像始終為null。 這是代碼:

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;
}

屏幕截圖,顯示結果:

結果

Base64示例:

數據:圖像/ 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);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM