Domanda

Voglio essere in grado di salvare un'immagine come testo in un file xml e non riesco a trovare un modo efficace per farlo!

Finora ho provato:

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

return QString(ImageAsByteArray.toBase64());

Nonostante il fatto che sta funzionando, il risultato è un file che è enorme! Ho provato ad aggiungere un po 'di QCompress in là, ma senza molto successo ... In realtà il QCompress non sembra comprimere nulla ...

Penso che sto facendo nel modo sbagliato, ma qualcuno potrebbe illuminare il mio percorso per favore?

È stato utile?

Soluzione

viene caricata il file immagine da QImage e quindi ottenere i byte da quel QImage? Se sì, allora siete codifica Base64 l'immagine raw. In questo caso in realtà non importa affatto quanto viene compresso il file di immagine originale.

Si consiglia di leggere il file di immagine originale (png o jpg) come un flusso binario e codifica Base64 tale flusso. Esempio:

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 La mia immagine di prova è 1028558 byte, e encodedSize è 1371412 byte, che è 33% in più rispetto al originalSize (vedi il commento di Jérôme alla tua domanda).

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top