Question

Je veux être en mesure d'enregistrer une image sous forme de texte dans un fichier xml et je ne parviens pas à trouver un moyen efficace de le faire!

Jusqu'à présent, j'essayé:

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

return QString(ImageAsByteArray.toBase64());

En dépit du fait qu'il travaille, le résultat est un fichier qui est énorme! J'ai essayé d'ajouter un peu qCompress là-dedans, mais sans beaucoup de succès ... En fait, le qCompress ne semble pas quoi que ce soit ... compress

Je pense que je suis en train de faire le mal, mais quelqu'un pourrait illuminera mon chemin s'il vous plaît?

Était-ce utile?

La solution

Vous chargez le fichier image à QImage puis obtenir les octets de cette QImage? Si oui, alors vous êtes base64 codant pour l'image brute. Dans ce cas, il n'a pas d'importance du tout combien le fichier image d'origine est compressé.

Vous devriez lire le fichier d'image d'origine (jpg ou png) en tant que flux binaire et encode base64 de cours d'eau. Exemple:

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();

Le originalSize de l'image Mon test est 1028558 octets et encodedSize est 1371412 octets, ce qui est 33% de plus que le OriginalSize (voir le commentaire de Jérôme à votre question).

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top