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