Как сохранить строку base64 как изображение png в Qt? - PullRequest
6 голосов
/ 02 августа 2011

Я хочу написать функцию, которая сохраняет входную строку base64 как изображение в формате png в локальном формате. Как я могу сделать это в Qt?

Ответы [ 3 ]

5 голосов
/ 02 августа 2011

Это простая программа, которую я написал некоторое время назад для тестирования png и base64. Он принимает png, закодированный в base64 от стандартного ввода, показывает его и затем сохраняет его по указанному пути (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();
}
1 голос
/ 02 августа 2011

Вы можете прочитать FAQ и спросить о конкретной проблеме ...

Процесс выглядит примерно так: Base64 (QString) -> QByteArray -> QImage -> сохранить в файл

Конечно, вам нужно учитывать плагины и возможности экспорта для записи png, и знать, как ваш файл base64 представляет изображение ... И уметь это делатьскорее всего обратный процесс.

0 голосов
/ 06 июня 2018

Если строка представляет собой изображение в кодировке base64, она содержит информацию заголовка.Сначала вы должны удалить информацию заголовка из данных изображения, затем преобразовать QString в QByteArray, создать QImage с использованием статического метода QString :: fromData () и, наконец, сохранить 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());
...