Convertir une image en texte
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?
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).