لماذا JPEG الصور التي تم إنشاؤها مع النظام.الرسم أكبر من الأصلي الصور النقطية?

StackOverflow https://stackoverflow.com/questions/825487

سؤال

أواجه مشكلة غريبة - لدي حوالي 14.5 مليون دولار الصور النقطية ، التي من المفترض أن تكون غير مضغوط.أنا في حاجة لتحويل هذه الصور النقطية إلى JPG وتخزينها في قاعدة البيانات الخاصة بنا.

عند استخدام الفئات المنصوص عليها في .صافي النظام.الرسم مكتبة حفظ صورة نقطية مثل ImageFormat.Jpeg الناتجة عن JPEG مرتين حجم الصورة النقطية الأصلي.هنا هو رمز:

byte[] bitmapBytes = //get from the db
using(MemoryStream bitmapStream = new MemoryStream(bitmapBytes))
{
   using(Bitmap bitmap = (Bitmap)Bitmap.FromStream(bitmapStream))
   {
       bitmap.Save("jpg.jpg", ImageFormat.Jpeg);
   }
}

لقد بحثت من خلال عرافة من العديد من هذه الصور, و يبدو أن ضغط الإعداد "لا شيء".لذلك أنا على افتراض أنها غير مضغوط.بالإضافة إلى ذلك, عرافة على الملف الأصلي له "BMP" على رمز الملف الناتج لديه "JFIF" رمز كما كنت تتوقع.

الصور الأبيض والأسود ، أي الألوان.

أي أفكار لماذا هذا من شأنه أن يحدث ؟ تبحث عن المؤشرات في الاتجاه الصحيح...

التعديلات:

  • لقد حاولت استخدام بديل الزائد لإنقاذ التي تسمح لك لتحديد نوعية.لا فائدة رأيت.
  • يجب أيضا تحديد أن أنا عالقة مع JPEG إلى حد ما هنا.هذا هو النظام القديم وأجزاء أخرى من النظام نتوقع JPEG.

سمات الصورة:

  • نقطية الأبعاد:152x48
  • نقطية حجم الملف:1022 بايت
  • JPEG:نفس البعد
  • JPEG الحجم:2.2 kb
  • معلومات الصورة النقطية:فهرسة 1 طبقة (2 لون)
  • نقطية القرار:96.012 x 96.012 ppi
هل كانت مفيدة؟

المحلول

من المحتمل أن يرجع السبب في ذلك إلى أن صور jpeg التي تقوم بحفظها أصبحت الآن صورًا ملونة RGB بمعدل 24 بت، حيث تكون الصور النقطية عبارة عن صور بالأبيض والأسود بمعدل 1 بت لكل نقطة.

إذا كانت الصور النقطية بحجم 1 bpp، فمن المحتمل ألا يكون تنسيق jpeg هو التنسيق الأفضل لتحويلها إليه.

نصائح أخرى

الأسود والأبيض أو الرمادي?

من http://www.faqs.org/faqs/compression-faq/part2/section-6.html:

"JPEG يعمل على أي كامل اللون أو رمادي حجم الصور ؛ فإنه لا يعالج bilevel (أسود و أبيض) صور, على الأقل ليس على ما يرام.لا التعامل معها colormapped الصور سواء ؛ عليك قبل توسيع تلك في تفاصيلها كامل اللون في التمثيل.JPEG يعمل بشكل أفضل على "لهجة المستمر" الصور.الصور مع العديد من القفزات المفاجئة في قيم الألوان لا ضغط بشكل جيد."

تحتاج إلى تعيين سمة لبرنامج التشفير لإخباره بمستوى الضغط المطلوب استخدامه.

أنظر أيضا

سوف ترغب في التبديل إلى الاستخدام هذا الحمل الزائد من Bitmap.Save, ، حتى تتمكن من تحديد EncoderParameter.

فيما يتعلق بالسبب الذي يجعل ملفاتك أكبر حجمًا، فقد يكون السبب هو أن BMP الخاص بك قد تم تشغيله بطول مشفر، أو باستخدام صورة نقطية أصغر (وليس 24 بت).

مقارنة بين أحجام 2 اللون 61x64 الصورة:

  • فاكس-4 tiff:268 بايت
  • 2 لون bmp (على النحو الوارد أعلاه):550 بايت
  • 8 بت jpeg:1502 بايت
  • 32 بت jpeg (كما النظام.الرسم أن خلق):2015 بايت

لذا, إذا كان لديك لاستخدام jpeg, لتحويلها إلى 8 بت الأولى.يفعل ذلك في .صافي سوف يكون محرجا ولكن هناك نموذج التعليمة البرمجية المتوفرة على CodeProject وغيرها.

أردت فقط متابعة الحل الخاص بي.لقد تمكنت من جعل بقية النظام يدعم الرسومات بتنسيق PNG، لذا ما فعلته هو تحويل الصور النقطية إلى رسومات PNG، وجعلها 1 بت لكل بكسل بالأبيض والأسود.وهذا جعلها صغيرة وفعالة.

لذا كانت المشكلة هي أن ملفات JPG لا يمكنها معالجة الصور ذات الألوان القليلة بشكل جيد.

مجرد فكرة:أنت تقول أن جزءًا من نظامك يحتاج إلى أن تكون الملفات ملفات JPEG.هل هذا صحيح حقًا أم أنه يحتاج فقط إلى أن تحتوي الملفات على امتداد JPG؟إذا كان الأمر كذلك، فيمكنك - على الرغم من أنه قبيح - إعادة تسمية امتداد الملف فقط، نظرًا لأن ملفات BMP في حالتك أصغر.

على سبيل المثال، في Windows، يمكنك أخذ ملف BMP وتغيير امتداده إلى JPG، وعندما تفتحه، لا يهتم Windows ويعرضه بشكل صحيح.

يجب أن توضح لك مقالة قاعدة المعارف هذه كيفية القيام بذلك

http://support.microsoft.com/kb/324790

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