Pregunta

Quiero ser capaz de guardar una imagen como texto en un archivo XML y no consigo encontrar una manera eficiente de hacerlo!

Hasta ahora he intentado:

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

return QString(ImageAsByteArray.toBase64());

A pesar del hecho de que está funcionando, el resultado es un archivo que es enorme! He intentado añadir algunos QCompress de allí, pero sin mucho éxito ... En realidad, el QCompress no parece nada compresa ...

creo que lo estoy haciendo por el camino equivocado, pero es posible que alguien enlight mi camino por favor?

¿Fue útil?

Solución

¿Está cargando el archivo de imagen a QImage y luego conseguir los bytes desde que QImage? Si es así, entonces usted está en base64 codifican la imagen en bruto. En ese caso, lo que realmente no importa en absoluto cuánto se comprime el archivo de imagen original.

Debe leer el archivo de imagen original (png o jpg) como una secuencia binaria y codificación base64 esa corriente. Ejemplo:

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 de imagen Mi prueba es 1028558 bytes y encodedSize es 1371412 bytes, que es un 33% más que el OriginalSize (ver el comentario de Jérôme a su pregunta).

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top