سؤال

أريد أن أكون قادرًا على حفظ صورة كنص في ملف XML ولا يمكنني إدارة طريقة فعالة للقيام بذلك!

حاولت حتى الآن:

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

return QString(ImageAsByteArray.toBase64());

على الرغم من حقيقة أنها تعمل ، فإن النتيجة هي ملف ضخم! حاولت إضافة بعض QCompress هناك ولكن دون نجاح كبير ... في الواقع لا يبدو أن QCompress يضغط أي شيء ...

أعتقد أنني أفعل ذلك بطريقة خاطئة ، لكن هل يمكن لشخص ما أن ينقل طريقي من فضلك؟

هل كانت مفيدة؟

المحلول

هل تقوم بتحميل ملف الصورة إلى Qimage ثم الحصول على البايتات من هذا Qimage؟ إذا كانت الإجابة بنعم ، فأنت base64 ترميز الصورة الخام. في هذه الحالة ، لا يهم على الإطلاق مدى ضغط ملف الصورة الأصلي.

يجب عليك قراءة ملف الصورة الأصلي (PNG أو JPG) كدفق ثنائي وترميز BASE64 هذا الدفق. مثال:

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 هو 1028558 بايت ، و encodedSize هو 1371412 بايت ، وهو أكثر بنسبة 33 ٪ من الأصل (انظر تعليق Jérôme على سؤالك).

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top