فایل FLIF چیست؟
FLIF (Free Lossless Image Format) یک فرمت تصویر بدون اتلاف است که از پسوند .flif برای فایل های خود استفاده می کند. FLIF ادعا می کند که از نظر نسبت فشرده سازی عملکرد بهتری از PNG، WebP بدون اتلاف، BPG بدون اتلاف و JPEG 2000 بدون تلفات دارد. FLIF از interlacing پیشرونده استفاده می کند، به همین دلیل هر بارگیری جزئی تصویر می تواند به عنوان یک رمزگذاری با اتلاف برای کل تصویر استفاده شود.
تاریخچه مختصر
FLIF was announced in September 2015, and the alpha version was released in October 2015. در سپتامبر 2016، اولین نسخه پایدار FLIF منتشر شد.
طراحی FLIF
FLIF از یک نوع CABAC (کدگذاری محاسباتی باینری سازگار با زمینه)، MANIAC (کدگذاری حسابی عدد صحیح متا تطبیقی نزدیک به صفر) برای فشرده سازی استفاده می کند. MANIAC یک الگوریتم کدگذاری آنتروپی است که توسط Jon Sneyers و Pieter Wuille توسعه یافته است. در Maniac، زمینهها گرههایی از درختهای تصمیم هستند که در زمان کدگذاری به صورت پویا یاد میگیرند. این باعث میشود مدل زمینه برای تصویر خاصتر شود و منجر به فشردهسازی بهتری شود. FLIF دارای ویژگی های زیر است:
- از فشرده سازی بدون اتلاف پشتیبانی می کند
- از فشرده سازی با اتلاف با پیش پردازش رمزگذار پشتیبانی می کند
- پشتیبانی از مقیاس خاکستری، RGB و RGBA
- پشتیبانی از عمق رنگ 1 تا 16 بیت در هر کانال
- پشتیبانی از فایل های interlaced و non-interlaced
- پشتیبانی از رمزگشایی پیشرونده فایل های نیمه بارگیری شده
- پشتیبانی از انیمیشن ها
- از پروفایل های رنگی تعبیه شده ICC، Exif و فراداده XMP پشتیبانی می کند
- دارای پشتیبانی محدود برای فشرده سازی فایل های خام دوربین (RGGB)
فرمت فایل FLIF
یک فایل FLIF دارای چهار بخش زیر است:
سربرگ اصلی
هدر اصلی شامل ابرداده های اصلی شامل عرض، ارتفاع، عمق رنگ، تعداد فریم ها می باشد.
نوع | مقدار | توضیحات |
---|---|---|
4 بایت | FLIF | Magic |
4 بیت | 3 = نی هنوز; 4 = من هنوز 5 = ni anim; 6 = i anim | درهم، انیمیشن |
4 بیت | 1 = مقیاس خاکستری; 3 = RGB؛ 4 = RGBA | تعداد کانال (nb_channels) |
1 بایت | ‘0’,‘1’,‘2’ (‘0’=سفارشی) | بایت در هر کانال (Bpc) |
varint | width-1 | width |
varint | ارتفاع-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) | تأخیر فریم در ms | nb_frames > 1: repeat(nb_frames) | |
uni_int(0,1) | پرچم: has_custom_cutoff_and_alpha | ||
uni_int(1,128) | cutoff | has_custom_cutoff_and_alpha | 2 |
uni_int(2,128) | قسمدهنده آلفا | دارای_برش_سفارشی_و_آلفا | 19 |
uni_int(0,1) | پرچم: has_custom_bitchance | has_custom_cutoff_and_alpha | 0 |
؟ | عزیز | عزیز_سفارشی دارد | |
متغیر | تحولات (به زیر مراجعه کنید) | ||
uni_int(1) = 0 | بیت شاخص: با تبدیلات انجام می شود | ||
uni_int(0,2) | پیشبینیکننده پیکسل نامرئی | آلفا_صفر && درهم آمیخته && محدوده آلفا شامل صفر است |
کانال
شماره کانال | توضیحات |
---|---|
0 | قرمز یا خاکستری |
1 | سبز |
2 | آبی |
3 | آلفا |
تحولات
نوع | توضیحات |
---|---|
uni_int(1) = 1 | بیت شاخص: هنوز انجام نشده است |
uni_int(0,13) | شناسه تبدیل |
متغیر | داده های تبدیل (بستگی به تبدیل دارد) |
تبدیل برای تغییر داده های پیکسل برای فشرده سازی بهتر و پیگیری مقادیر واقعی پیکسل استفاده می شود.
داده پیکسل
این بخش حاوی داده های پیکسل واقعی است که با استفاده از کدگذاری آنتروپی MANIAC کدگذاری شده است. پیکسل ها ممکن است با استفاده از رمزگذاری در هم آمیخته یا غیردرهم رمزگذاری شوند.
روش در هم تنیده
In this method, zoomlevels are defined. Zoomlevel 0 is used for the full image, zoomlevel 1 is used for all even-numbered rows, zoomlevel 2 is used for all even-numbered columns of zoomlevel 1. به عبارت دیگر، هر زوم 2k با شماره زوج، یک نسخه پاییننمونهشده از تصویر، در مقیاس 1:2^k است. سطوح زوم از بالاترین به پایین ترین کدگذاری می شوند.
روش غیر درهم
در این روش، رمزگذاری درختان MANIAC بلافاصله و سپس رمزگذاری پیکسل ها آغاز می شود.