libjpeg-turbo ، برنامج ترميز لتشفير وفك تشفير صور JPEG

libjpeg- توربو

كان libjpeg-turbo قائمًا في الأصل على libjpeg / SIMD ، وهو مشتق MMX معجل من libjpeg v6b

في نظام Linux ، عندما يتعلق الأمر ببرامج الترميز ، فإن معظم المستخدمين لا يقلقون بشأنها عادةً ، حيث يتم عادةً حل هذه المشكلة بالفعل في العديد من التوزيعات من خلال تضمينها في الهدف افتراضيًا ، بالإضافة إلى عرض التطبيقات أو تحريرها ، فهي تساهم أيضًا في الحبوب. من الرمل بما في ذلك بعض الإضافات.

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

وهذا هو المكان الذي يأتي فيه برنامج الترميز الذي سنتحدث عنه اليوم وهذا هو أن تنسيق صورة JPEG هو أحد أكثر الأشكال شيوعًا ، لكن هذا لا يعني أنه الأفضل ، نظرًا لوجود تنسيقات أخرى تقدم العديد من المزايا على هذا.

libjpeg-turbo هو حل لبعض أوجه القصور في JPEG مقابل التنسيقات الأخرى كما هو مذكور في مستودع GitHub الخاص بهم:

libjpeg-turbo هو برنامج ترميز صورة JPEG يستخدم تعليمات SIMD لتسريع ضغط JPEG القياسي وإلغاء الضغط على أنظمة x86 و x86-64 و Arm و PowerPC و MIPS ، بالإضافة إلى ضغط JPEG التدريجي على x86 و x86-64 والذراع. في مثل هذه الأنظمة ، يكون libjpeg-turbo بشكل عام أسرع 2-6 مرات من libjpeg ، وكل شيء آخر متساوٍ. في الأنواع الأخرى من الأنظمة ، لا يزال بإمكان libjpeg-turbo أن يتفوق على libjpeg بمقدار كبير ، بفضل إجراءات ترميز Huffman المحسّنة للغاية. في كثير من الحالات ، يتنافس أداء libjpeg-turbo مع برامج ترميز JPEG عالية السرعة.

ينفذ libjpeg-turbo كلاً من واجهة برمجة تطبيقات libjpeg التقليدية وواجهة برمجة تطبيقات TurboJPEG API الأقل قوة ولكن الأبسط. يتميز libjpeg-turbo أيضًا بامتدادات مساحة اللون التي تسمح له بضغط / فك الضغط إلى 32 بت ومخازن بكسل كبيرة (RGBX ، XBGR ، إلخ) ، بالإضافة إلى واجهة Java كاملة الميزات.

libjpeg- توربو هي شوكة متوافقة مع API / ABI لمكتبة libjpeg الكلاسيكية، هدفه توفير أسرع سرعة تشفير وفك. بالإضافة إلى واجهة برمجة تطبيقات libjpeg القياسية ، توفر المكتبة واجهة برمجة تطبيقات TurboJPEG الخاصة بها وعددًا من الإضافات مع نماذج تجسيد الألوان التي تسمح بضغط الصور أو فك تشفيرها من مخازن بكسل 32 بت (RGBX ، XBGR).

في الأبنية الأخرى ، فإن التسريع ليس بنفس الأهمية ، ولكن نظرًا لاستخدام وظائف ترميز Huffman المحسّنة ، لا تزال المكتبة أسرع بشكل ملحوظ من libjpeg ويقترب من حيث الأداء من برامج ترميز JPEG عالية الجودة.

ومن الجدير بالذكر أنه في الآونة الأخيرةحصلت ibjpeg-turbo على فرعها الجديد 3.0 وأهم الابتكارات التي تبرز من هذا الإصدار الجديدنذكر ما يلي:

  • دعم إضافي لاختزال الألوان 4: 1: 1 ، مما يسمح لك بتحويل ، قص ، وتدوير 4: 1: 1 صور JPEG ذات عينات فرعية دون فقدان الجودة ، وكذلك فك الضغط وتحويلها إلى نموذج ألوان YUV.
  • حساب سريع بشكل كبير لجداول هوفمان المثلى. بالنسبة للصور الصغيرة (256 × 256) ، أتاح التغيير تقليل وقت الضغط حتى مرتين.
  • تمت إضافة القدرة على تطبيق ترميز إنتروبيا حسابي لصور JPEG مع تمثيل ألوان 12 بت لكل قناة.
  • تم إعادة تصميم TurboJPEG API بشكل كبير لإزالة القيود الحالية وزيادة القابلية للتوسعة. على سبيل المثال ، جميع وظائف C الآن مسبوقة بـ "tj3".
  • تم تحويل العديد من العلامات والأوضاع من وسيطات الوظيفة إلى معلمات API العامة.
  • دعم للصور ذات 12 و 16 بت من الألوان لكل قناة في أوضاع ضياع وخسارة.
  • تمت إضافة وضع ملف JPEG بدون فقدان ، والذي يتوفر للصور ذات 8 و 12 و 16 بت من الألوان لكل قناة. تمت إضافة وظيفة جديدة jpeg_enable_lossless () وخيار سطر الأوامر "-lossless".
  • تمت إزالة الحقول والمنشئات والأساليب المهملة في واجهة برمجة تطبيقات Java TurboJPEG.

أخيرًا ، تجدر الإشارة إلى أنه في المستقبل ، يعتزم مؤلف libjpeg-turbo تقييد العمل في المشروع على إصدار التحديثات مع إصلاحات الأخطاء فقط. لن يبدأ تطوير الإصدار الجديد 3.1 حتى يتم الحصول على تمويل للمشروع.

إلى مهتم بالكود يجب أن تعلم أنه يتم توزيعه بموجب ثلاثة تراخيص من نوع BSD IJG ، تم تعديلها بواسطة BSD و zlib ، ويتم تقديم الثنائيات المعدة لنظام التشغيل Linux و macOS و Windows. يمكنك التحقق من التفاصيل ، وكذلك الحصول على الثنائيات من الرابط التالي.