Вопрос

Я хочу иметь возможность сохранить изображение в виде текста в файле XML, и я не могу найти эффективный способ сделать это!

Пока я пытался:

QByteArray ImageAsByteArray;
QBuffer ImageBuffer(&ImageAsByteArray);
ImageBuffer.open(QIODevice::WriteOnly);
rImage.save(&ImageBuffer, "PNG"); 

return QString(ImageAsByteArray.toBase64());

Несмотря на то, что он работает, результатом является огромный файл! Я пытался добавить там немного QCompres, но без большого успеха ... на самом деле QCompress, похоже, ничего не сжимает ...

Я думаю, что делаю это неправильно, но может ли кто -нибудь просветить мой путь?

Это было полезно?

Решение

Вы загружаете файл изображения в Qimage, а затем получаете байты из этого Qimage? Если да, то вы кодируете необработанное изображение BASE64. В этом случае действительно не имеет значения, насколько сжат исходный файл изображения.

Вы должны прочитать исходный файл изображения (PNG или JPG) как двоичный поток, а Base64 кодирует этот поток. Пример:

QFile* file = new QFile("Image001.jpg");
file->open(QIODevice::ReadOnly);
QByteArray image = file->readAll();
int originalSize = image.length();

QString encoded = QString(image.toBase64());
int encodedSize = encoded.size();

Мое тестовое изображение originalSize 1028558 байтов и encodedSize составляет 1371412 байтов, что на 33% больше, чем оригинал (см. Комментарий Жерома к вашему вопросу).

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top