如何在Qt中将base64字符串保存为png图像?

时间:2011-08-02 12:58:34

标签: c++ qt png base64

我想编写将输入base64字符串作为png图像保存到本地的函数。我怎么能在Qt中做到这一点?

3 个答案:

答案 0 :(得分:5)

这是我之前写的一个简单的程序,用于测试png和base64。 它接受来自标准输入的base64编码的png,显示它并将其保存到指定的路径(如果没有指定任何内容,则输出.png)。 如果base64字符串不是png,这将不起作用。

#include <QtCore>
#include <QApplication>

#include <QImage>
#include <QByteArray>
#include <QTextStream>
#include <QDebug>
#include <QLabel>

int main(int argc, char *argv[]) {
    QString filename = "output.png";
    if (argc > 1) {
        filename = argv[1];
    }
    QApplication a(argc, argv);
    QTextStream stream(stdin);
    qDebug() << "reading";
    //stream.readAll();
    qDebug() << "read complete";
    QByteArray base64Data = stream.readAll().toAscii();
    QImage image;
    qDebug() << base64Data;
    image.loadFromData(QByteArray::fromBase64(base64Data), "PNG");
    QLabel label(0);
    label.setPixmap(QPixmap::fromImage(image));
    label.show();
    qDebug() << "writing";
    image.save(filename, "PNG");
    qDebug() << "write complete";
    return a.exec();
}

答案 1 :(得分:1)

您可以阅读常见问题解答并询问具体问题......

流程类似于: Base64(QString) - &gt; QByteArray - &gt; QImage - &gt; save to file

当然,您需要考虑插件和导出容量来编写png,并知道您的base64文件如何表示图像......并且最有可能完成相反的过程。

答案 2 :(得分:0)

如果字符串是base64编码的图像,则它包含标题信息。您应首先从图像数据中删除标题信息,然后将QString转换为QByteArray,使用静态方法QString :: fromData()构造QImage,最后保存QImage。

QString inputData;
QStringList stringList = inputData.split(',');
QString imageExtension = stringList.at(0).split(';').at(0).split('/').at(1);
QByteArray imageData = stringList.at(1).toUtf8();

imageData = QByteArray::fromBase64(imageData);

QImage img = QImage::fromData(imageData);

if(!img.isNull())
    img.save(confFilesPath + "images/ticketLogo", imageExtension.toUtf8());