ما هو ملف FLIF؟
FLIF (Free Lossless Image Format) هو تنسيق صورة غير ضياع يستخدم امتداد .flif لملفاته. تدعي FLIF أنها تتفوق في الأداء على PNG ، و [WebP] بدون خسارة (/ar/image/webp/) ، و BPG بدون فقدان ، و JPEG 2000 بدون فقدان من حيث نسبة الضغط. يستخدم FLIF التداخل التدريجي ، والذي من خلاله يمكن استخدام أي تنزيل جزئي للصورة كتشفير ضياع للصورة بأكملها.
نبذة تاريخية
تم الإعلان عن FLIF في سبتمبر 2015 ، وتم إصدار النسخة ألفا في أكتوبر 2015. في سبتمبر 2016 ، تم إصدار أول نسخة مستقرة من FLIF.
تصميم FLIF
يستخدم FLIF متغيرًا من CABAC (الترميز الحسابي الثنائي المتكيف مع السياق) و MANIAC (الترميز الحسابي الصحيح المتكيف بالقرب من الصفر) للضغط. MANIAC هي خوارزمية ترميز إنتروبيا طورها جون سنيرز وبيتر وويل. في MANIAC ، السياقات عبارة عن عُقد لأشجار القرار التي يتم تعلمها في وقت الترميز ديناميكيًا. هذا يجعل نموذج السياق أكثر تحديدًا للصورة وينتج عنه ضغط أفضل. يحتوي FLIF على الميزات التالية:
- يدعم الضغط بدون فقدان البيانات
- يدعم الضغط مع الفقد مع المعالجة المسبقة لجهاز التشفير
- يدعم تدرج الرمادي و RGB و RGBA
- يدعم عمق الألوان من 1 إلى 16 بت لكل قناة
- يدعم الملفات المتداخلة وغير المتشابكة
- يدعم فك التشفير التدريجي للملفات التي تم تنزيلها جزئيًا
- يدعم الرسوم المتحركة
- يدعم ملفات تعريف ألوان ICC المضمنة وبيانات تعريف Exif و XMP
- لديه دعم محدود لضغط ملفات خام الكاميرا (RGGB)
تنسيق ملف FLIF
يتكون ملف FLIF من الأجزاء الأربعة التالية:
رأس رئيسي
يحتوي العنوان الرئيسي على البيانات الوصفية الرئيسية بما في ذلك العرض والارتفاع وعمق اللون وعدد الإطارات.
النوع | القيمة | الوصف |
---|---|---|
4 بايت | “FLIF” | ماجيك |
4 بت | 3 = ني لا يزال ؛ 4 = ما زلت ؛ 5 = ني أنيم ؛ 6 = أنا أنيم | تداخل ، رسوم متحركة |
4 بت | 1 = تدرج الرمادي ؛ 3 = RGB ؛ 4 = RGBA | عدد القنوات (nb_channels) |
1 بايت | ‘0’، ‘1’، ‘2’ (‘0’ = مخصص) | بايت لكل قناة (Bpc) |
varint | width-1 | Width |
varint | height-1 | الارتفاع |
varint | nb_frames-2 (فقط في حالة الرسوم المتحركة) | عدد الإطارات (nb_frames) |
قطع البيانات الوصفية
يحتوي هذا الجزء على بيانات وصفية غير بكسلية مثل Exif / XMP ، وملف تعريف ألوان ICC ، وما إلى ذلك ، والتي تم ترميزها باستخدام ضغط DEFLATE. يتم تعريف هذه الأجزاء بشكل مشابه لمقاطع PNG مع الاختلاف هو أن حجم ظرف الظرف مشفر بعدد متغير من البايتات. يمكن أن تتكون أسماء المقاطع من 4 أحرف (4 بايت) أو قيمة أقل من 32 تشير إلى مقطع غير اختياري.
فيما يلي مثال على خراطيش اختيارية:
اسم القطعة | الوصف | المحتوى (بعد DEFLATE-decompression) |
---|---|---|
iCCP | ملف تعريف ألوان ICC | بيانات ملف تعريف ألوان ICC الخام |
eXif | بيانات تعريف Exif | رأس “Exif \ 0 \ 0” متبوعًا برأس TIFF وبيانات EXIF |
eXmp | بيانات تعريف XMP | XMP مضمنة في xpacket للقراءة فقط بدون حشوة |
اصطلاح التسمية
- ** الحرف الأول **: تستخدم الأحرف الكبيرة للحروف الحرجة والصغيرة للأجزاء غير الحرجة.
- ** الحرف الثاني **: تستخدم الأحرف الكبيرة للإشارة إلى الأحرف العامة والصغيرة للأجزاء الخاصة
- ** الحرف الثالث **: تستخدم الأحرف الكبيرة للظبطات اللازمة لعرض الصورة بشكل صحيح والحروف الصغيرة ليست مهمة لعرض الصورة.
- ** الحرف الرابع **: تستخدم الأحرف الكبيرة للظبطات التي يمكن نسخها بشكل أعمى بأمان. تعتمد الأحرف الصغيرة على بيانات الصورة.
العنوان الثاني
يحتوي هذا على المعلومات المتعلقة بالتشفير الفعلي لوحدات البكسل.
النوع | الوصف | الشرط | القيمة الافتراضية |
---|---|---|---|
1 بايت | NUL بايت (0x00) ، اسم مقطع لدفق بت FLIF16 | ||
uni_int (1،16) | بت لكل بكسل من القنوات | Bpc == ‘0’: كرر (nb_channels) | 8 إذا كانت Bpc == ‘1’ ، 16 إذا Bpc == ‘2’ |
uni_int (0،1) | العلم: alpha_zero | nb_channels> 3 | 0 |
uni_int (0،100) | عدد الحلقات | nb_frames> 1 | |
uni_int (0،60_000) | تأخير الإطار بالمللي ثانية | nb_frames> 1: تكرار (nb_frames) | |
uni_int (0،1) | العلم: has_custom_cutoff_and_alpha | ||
uni_int (1،128) | قطع | has_custom_cutoff_and_alpha | 2 |
uni_int (2،128) | ألفا المقسوم | has_custom_cutoff_and_alpha | 19 |
uni_int (0،1) | العلم: has_custom_bitchance | has_custom_cutoff_and_alpha | 0 |
؟ | Bitchance | has_custom_bitchance | |
متغير | التحويلات (انظر أدناه) | ||
uni_int (1) = 0 | بت المؤشر: تم باستخدام عمليات التحويل | ||
uni_int (0،2) | متنبئ بكسل غير مرئي | يتضمن نطاق alpha_zero && المتداخلة && alpha صفر |
** القنوات **
رقم القناة | الوصف |
---|---|
0 | أحمر أو رمادي |
1 | أخضر |
2 | أزرق |
3 | ألفا |
** التحولات **
النوع | الوصف |
---|---|
uni_int (1) = 1 | بت المؤشر: لم ينته بعد |
uni_int (0،13) | معرف التحويل |
متغير | بيانات التحويل (تعتمد على التحويل) |
يستخدم التحويل لتعديل بيانات البكسل لضغط أفضل ولتتبع قيم البكسل التي تحدث بالفعل.
بيانات البكسل
يحتوي هذا الجزء على بيانات البكسل الفعلية المشفرة باستخدام ترميز الكون. يمكن تشفير وحدات البكسل باستخدام تشفير متشابك أو غير متشابك.
الطريقة المتداخلة
في هذه الطريقة ، يتم تحديد مستويات التكبير. يتم استخدام Zoomlevel 0 للصورة الكاملة ، ويتم استخدام مستوى التكبير / التصغير 1 لجميع الصفوف ذات الأرقام الزوجية ، ويتم استخدام مستوى التكبير / التصغير 2 لجميع الأعمدة ذات الأرقام الزوجية من مستوى التكبير / التصغير 1. وبعبارة أخرى ، كل مستوى تكبير / تصغير 2k هو نسخة مصغرة من الصورة بمقياس 1: 2 ^ k. يتم ترميز Zoomlevels من الأعلى إلى الأدنى.
طريقة غير متشابكة
في هذه الطريقة ، يبدأ تشفير أشجار MANIAC فورًا متبوعًا بتشفير وحدات البكسل.