【问题标题】:How do I save base64 string as png image in Qt?如何在 Qt 中将 base64 字符串保存为 png 图像?
【发布时间】:2011-10-18 06:05:33
【问题描述】:

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

【问题讨论】:

    标签: c++ qt png base64


    【解决方案1】:

    这是我前段时间编写的用于测试 png 和 base64 的简单程序。 它从标准输入接受以base64编码的png,显示它并将其保存到指定的路径(如果没有指定,则为output.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();
    }
    

    【讨论】:

      【解决方案2】:

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

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

      当然,你需要考虑插件和导出容量来编写 png,并知道你的 base64 文件如何表示图像......并且很可能能够进行相反的过程。

      【讨论】:

      【解决方案3】:

      如果字符串是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());
      

      【讨论】:

        猜你喜欢
        • 2014-06-11
        • 2020-03-22
        • 2011-09-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多