Преобразование изображения в текст - PullRequest
1 голос
/ 14 сентября 2010

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

Пока я пробовал:

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

return QString(ImageAsByteArray.toBase64());

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

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

1 Ответ

6 голосов
/ 14 сентября 2010

Вы загружаете файл изображения в 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% больше, чем у исходного размера (см. Комментарий Жерома к вашему вопросу).

...