একটি FLIF ফাইল কি?
FLIF (ফ্রি লসলেস ইমেজ ফরম্যাট) হল একটি লসলেস ইমেজ ফরম্যাট যা এর ফাইলগুলির জন্য .flif এক্সটেনশন ব্যবহার করে। FLIF কম্প্রেশন অনুপাতের ক্ষেত্রে PNG, লসলেস WebP, লসলেস BPG, এবং ক্ষতিহীন JPEG 2000-কে ছাড়িয়ে যাওয়ার দাবি করে৷ FLIF প্রগতিশীল ইন্টারলেসিং ব্যবহার করে, যার কারণে ছবির যেকোনো আংশিক ডাউনলোড সম্পূর্ণ ছবির জন্য ক্ষতিকর এনকোডিং হিসাবে ব্যবহার করা যেতে পারে।
সংক্ষিপ্ত ইতিহাস
FLIF was announced in September 2015, and the alpha version was released in October 2015. 2016 সালের সেপ্টেম্বরে, FLIF এর প্রথম স্থিতিশীল সংস্করণ প্রকাশিত হয়েছিল।
FLIF ডিজাইন
FLIF কম্প্রেশনের জন্য CABAC (প্রসঙ্গ-অভিযোজিত বাইনারি গাণিতিক কোডিং), MANIAC (মেটা-অ্যাডাপ্টিভ নিয়ার-জিরো ইন্টিজার অ্যারিথমেটিক কোডিং) এর একটি রূপ ব্যবহার করে। MANIAC হল একটি এনট্রপি কোডিং অ্যালগরিদম যা জন Sneyers এবং Pieter Wuille দ্বারা তৈরি করা হয়েছে। MANIAC-তে, প্রসঙ্গগুলি হল সিদ্ধান্ত গাছের নোড যা এনকোডিং সময়ে গতিশীলভাবে শেখা হয়। এটি প্রসঙ্গ মডেলটিকে আরও ইমেজ-নির্দিষ্ট করে তোলে এবং একটি ভাল সংকোচনের ফলে। FLIF এর নিম্নলিখিত বৈশিষ্ট্য রয়েছে:
- ক্ষতিহীন কম্প্রেশন সমর্থন করে
- এনকোডার প্রিপ্রসেসিংয়ের সাথে ক্ষতিকর কম্প্রেশন সমর্থন করে
- গ্রেস্কেল, আরজিবি এবং আরজিবিএ সমর্থন করে
- চ্যানেল প্রতি 1 থেকে 16 বিটের রঙের গভীরতা সমর্থন করে
- ইন্টারলেসড এবং নন-ইন্টারলেসড ফাইলগুলিকে সমর্থন করে
- আংশিকভাবে ডাউনলোড করা ফাইলগুলির প্রগতিশীল ডিকোডিং সমর্থন করে
- অ্যানিমেশন সমর্থন করে
- এমবেডেড আইসিসি কালার প্রোফাইল, এক্সিফ এবং এক্সএমপি মেটাডেটা সমর্থন করে
- ক্যামেরার কাঁচা ফাইল (RGGB) সংকুচিত করার জন্য সীমিত সমর্থন রয়েছে
FLIF ফাইল ফরম্যাট
একটি FLIF ফাইলের নিম্নলিখিত চারটি অংশ রয়েছে:
প্রধান শিরোনাম
প্রধান হেডারে প্রস্থ, উচ্চতা, রঙের গভীরতা, ফ্রেমের সংখ্যা সহ প্রধান মেটাডেটা রয়েছে।
প্রকার | মান | বর্ণনা |
---|---|---|
4 বাইট | FLIF | ম্যাজিক |
4 বিট | 3 = ni এখনও; 4 = আমি এখনও; 5 = ni anim; 6 = i anim | Interlacing, animation |
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 কালার প্রোফাইল, ইত্যাদি যা ডিফ্লেট কম্প্রেশন ব্যবহার করে এনকোড করা হয়। এই খণ্ডগুলিকে PNG খণ্ডগুলির অনুরূপভাবে সংজ্ঞায়িত করা হয় এবং পার্থক্য হল যে চকের আকার পরিবর্তনশীল সংখ্যার বাইটের সাথে এনকোড করা হয়৷ খণ্ডের নাম 4টি অক্ষর (4 বাইট) বা 32-এর নিচে একটি মান হতে পারে যা একটি অ-ঐচ্ছিক খণ্ড নির্দেশ করে।
নীচে ঐচ্ছিক চকগুলির একটি উদাহরণ:
খণ্ডের নাম | বিবরণ | |
---|---|---|
iCCP | ICC কালার প্রোফাইল | Rw ICC কালার প্রোফাইল ডেটা |
eXif | Exif মেটাডেটা | Exif\0\0 শিরোনামের পরে একটি TIFF হেডার এবং EXIF ডেটা |
eXmp | XMP মেটাডেটা | XMP কোনো প্যাডিং ছাড়াই শুধুমাত্র-পঠনযোগ্য এক্সপ্যাকেটের মধ্যে থাকে |
নামকরণ কনভেনশন
- প্রথম অক্ষর: বড় হাতের অক্ষরটি সমালোচনামূলক এবং ছোট হাতের অ-গুরুত্বপূর্ণ অংশগুলির জন্য ব্যবহৃত হয়।
- দ্বিতীয় অক্ষর: বড় হাতের অক্ষরটি সর্বজনীন এবং ছোট হাতের অক্ষরটি ব্যক্তিগত অংশের জন্য ব্যবহৃত হয়
- তৃতীয় অক্ষর: বড় হাতের অক্ষর ব্যবহার করা হয় চকগুলির জন্য যা সঠিকভাবে চিত্রটি প্রদর্শনের জন্য প্রয়োজন এবং ছোট হাতের অক্ষরগুলি চিত্রটি প্রদর্শনের জন্য গুরুত্বপূর্ণ নয়।
- চতুর্থ অক্ষর: বড় হাতের অক্ষর চকগুলির জন্য ব্যবহৃত হয় যা নিরাপদে অন্ধভাবে কপি করা যায়। ছোট হাতের চকগুলি ইমেজ ডেটার উপর নির্ভর করে।
দ্বিতীয় শিরোনাম
এতে পিক্সেলের প্রকৃত এনকোডিং সংক্রান্ত তথ্য রয়েছে।
প্রকার | বিবরণ | শর্ত | ডিফল্ট মান |
---|---|---|---|
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: পুনরাবৃত্তি(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 |
? | Bitchance | has_custom_bitchance | |
পরিবর্তনশীল | রূপান্তর (নীচে দেখুন) | ||
uni_int(1) = 0 | ইন্ডিকেটর বিট: ট্রান্সফর্মেশনের সাথে সম্পন্ন | ||
uni_int(0,2) | অদৃশ্য পিক্সেল ভবিষ্যদ্বাণী | alpha_zero && interlaced && alpha range এর মধ্যে শূন্য রয়েছে |
চ্যানেল
চ্যানেল নম্বর | বিবরণ |
---|---|
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 গাছগুলির এনকোডিং অবিলম্বে পিক্সেলগুলির এনকোডিং দ্বারা অনুসরণ করা শুরু হয়।