Frage

Ich möchte ein Bild als Text in einer XML-Datei speichern können, und ich kann es nicht schaffen eine effiziente Art und Weise zu finden, es zu tun!

Bisher habe ich versucht:

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

return QString(ImageAsByteArray.toBase64());

Trotz der Tatsache, dass es funktioniert, ist das Ergebnis eine Datei, die sehr groß ist! Ich habe versucht, einige QCompress dort Zugabe, aber ohne viel Erfolg ... Tatsächlich ist die QCompress nicht zu komprimieren alles scheint ...

Ich glaube, ich es falsch mache, aber könnte jemand Enlight mein Weg bitte?

War es hilfreich?

Lösung

laden Sie die Bilddatei QImage und dann bekommen die Bytes aus diesem QImage? Wenn ja, dann sind Sie base64 das RAW-Bild codiert. In diesem Fall wirklich funktioniert es keine Rolle, wie viel die Original-Bilddatei komprimiert wird.

Sie sollten die Original-Bilddatei (png oder jpg) als binärer Strom und base64 kodieren, dass der Strom lesen. Beispiel:

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

Mein Testbildes des originalSize ist 1028558 Bytes und encodedSize ist 1371412 Bytes, die 33% mehr als die Originalsize ist (Jérôme Kommentar zu Ihrer Frage).

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top