একটি PNG ফাইল কি?
একটি PNG (পোর্টেবল নেটওয়ার্ক গ্রাফিক্স) ফাইল হল একটি রাস্টার ইমেজ ফাইল ফরম্যাট যা ক্ষতিহীন কম্প্রেশন ব্যবহার করে। এই ফাইল ফরম্যাটটি গ্রাফিক্স ইন্টারচেঞ্জ ফরম্যাট (GIF) এর প্রতিস্থাপন হিসাবে তৈরি করা হয়েছে এবং এর কোনো কপিরাইট সীমাবদ্ধতা নেই। যাইহোক, PNG ফাইল ফরম্যাট অ্যানিমেশন সমর্থন করে না। PNG ফাইল ফরম্যাট লসলেস ইমেজ কম্প্রেশন সমর্থন করে যা এটির ব্যবহারকারীদের মধ্যে জনপ্রিয় করে তোলে। সময়ের সাথে সাথে, PNG একটি বহুল ব্যবহৃত ইমেজ ফাইল ফরম্যাট হিসাবে বিকশিত হয়েছে।
PNG ফাইল ফরম্যাটের সংক্ষিপ্ত ইতিহাস
The main reason behind the creation of PNG file format was the patented compression algorithm, Lempel-Ziv-Welch, used in the GIF file format. This along with other GIF limitations created a need for replacement of GIF file format. The first proposal and name for PNG file format came in January 1995. PNG ফাইল ফরম্যাটের সাথে সম্পর্কিত মূল ঘটনাগুলি নীচে তালিকাভুক্ত করা হয়েছে:
অক্টোবর 1996: পিএনজি স্পেসিফিকেশন সংস্করণ 1.0 প্রকাশ করা হয়েছিল এবং পরে RFC 2083 হিসাবে প্রকাশিত হয়েছিল। এটি 1996 সালের অক্টোবরে W3C সুপারিশে পরিণত হয়েছিল।
ডিসেম্বর 1998: সংস্করণ 1.1, কিছু ছোট পরিবর্তন এবং তিনটি নতুন খণ্ড সংযোজন সহ, প্রকাশিত হয়েছিল।
আগস্ট 1999: সংস্করণ 1.2, একটি অতিরিক্ত অংশ যোগ করে, প্রকাশিত হয়েছিল।
নভেম্বর 2003: PNG একটি আন্তর্জাতিক মান হয়ে ওঠে (ISO/IEC 15948:2003)। PNG-এর এই সংস্করণটি সংস্করণ 1.2 থেকে সামান্যই আলাদা এবং কোনো নতুন অংশ যোগ করে না।
মার্চ 2004: ISO/IEC 15948:2004
GIF এবং PNG এর কার্যকরী তুলনা
PNG ফাইল ফরম্যাটটি সহজ এবং বহনযোগ্য, আইনগতভাবে ভারমুক্ত, বিনিময়যোগ্য, নমনীয় এবং শক্তিশালী হওয়ার জন্য ডিজাইন করা হয়েছিল। নিম্নলিখিত সারণীতে GIF বৈশিষ্ট্যগুলি তালিকাভুক্ত করা হয়েছে যা নতুন বৈশিষ্ট্যগুলি ছাড়াও PNG ফাইল বিন্যাস দ্বারা উত্তরাধিকারসূত্রে প্রাপ্ত।
বৈশিষ্ট্য | GIF | PNG |
---|---|---|
256টি পর্যন্ত রঙের সূচী-রঙের ছবি | হ্যাঁ | হ্যাঁ |
স্ট্রিমিং এর জন্য সমর্থন | হ্যাঁ | হ্যাঁ |
স্বচ্ছতা | হ্যাঁ | হ্যাঁ |
আনুষঙ্গিক তথ্য | হ্যাঁ | হ্যাঁ |
হার্ডওয়্যার এবং প্ল্যাটফর্মের স্বাধীনতা | হ্যাঁ | হ্যাঁ |
কার্যকর | হ্যাঁ | হ্যাঁ |
প্রতি পিক্সেল 48 বিট পর্যন্ত ট্রুকালার ছবি | না | হ্যাঁ |
পিক্সেল প্রতি 16 বিট পর্যন্ত গ্রেস্কেল ছবি | না | হ্যাঁ |
সম্পূর্ণ আলফা চ্যানেল (সাধারণ স্বচ্ছতা মাস্ক) | না | হ্যাঁ |
ইমেজ গামা তথ্য | না | হ্যাঁ |
নির্ভরযোগ্যতা | না | হ্যাঁ |
দ্রুত প্রাথমিক উপস্থাপনা | না | হ্যাঁ |
পিএনজি ফাইল স্ট্রাকচার
প্রায় সব অপারেটিং সিস্টেমে PNG ফাইল খোলার জন্য সমর্থন আছে। উদাহরণস্বরূপ, মাইক্রোসফ্ট উইন্ডোজ ভিউয়ারের পিএনজি ফাইলগুলি খোলার ক্ষমতা রয়েছে কারণ ইনস্টলেশনের অংশ হিসাবে ওএস ডিফল্টভাবে উপলব্ধ সমর্থন রয়েছে। একটি পিএনজি ফাইলে একটি পিএনজি স্বাক্ষর
থাকে এবং এর পরে একটি সিরিজ //খণ্ড// থাকে।
PNG ফাইল হেডার
একটি PNG ফাইলের প্রথম আট বাইটে সর্বদা নিম্নলিখিত (দশমিক) মান থাকে:
{{{137 80 78 71 13 10 26 10 }}}
এই স্বাক্ষরটি নির্দেশ করে যে ফাইলের অবশিষ্টাংশে একটি একক PNG চিত্র রয়েছে, যার মধ্যে একটি IHDR খণ্ড দিয়ে শুরু এবং একটি IEND খণ্ড দিয়ে শেষ হওয়া খণ্ডগুলির একটি সিরিজ রয়েছে৷
খন্ড
প্রতিটি খণ্ড চারটি অংশ নিয়ে গঠিত:
দৈর্ঘ্য: একটি 4-বাইটের স্বাক্ষরবিহীন পূর্ণসংখ্যা যা খণ্ডের ডেটা ক্ষেত্রে বাইটের সংখ্যা দেয়। দৈর্ঘ্য শুধুমাত্র ডেটা ক্ষেত্র গণনা করে, নিজে নয়, খণ্ড টাইপ কোড বা CRC। শূন্য একটি বৈধ দৈর্ঘ্য। যদিও এনকোডার এবং ডিকোডার দৈর্ঘ্যটিকে স্বাক্ষরবিহীন হিসাবে বিবেচনা করা উচিত, এর মান 231 বাইটের বেশি হওয়া উচিত নয়।
Chunk Type: A 4-byte chunk type code. For convenience in description and in examining PNG files, type codes are restricted to consist of uppercase and lowercase ASCII letters (A-Z and a-z, or 65-90 and 97-122 decimal). However, encoders and decoders must treat the codes as fixed binary values, not character strings. For example, it would not be correct to represent the type code IDAT by the EBCDIC equivalents of those letters. Additional naming conventions for chunk types are discussed in the next section.
চাঙ্ক ডেটা: খণ্ডের প্রকারের জন্য উপযুক্ত ডেটা বাইট, যদি থাকে। এই ক্ষেত্রটি শূন্য দৈর্ঘ্যের হতে পারে।
CRC: একটি 4-বাইটের CRC (সাইক্লিক রিডানডেন্সি চেক) খণ্ডের পূর্ববর্তী বাইটের উপর গণনা করা হয়, যার মধ্যে খণ্ড টাইপ কোড এবং খণ্ড ডেটা ক্ষেত্র রয়েছে, কিন্তু দৈর্ঘ্য ক্ষেত্র অন্তর্ভুক্ত নয়। CRC সর্বদা উপস্থিত থাকে, এমনকি কোনো ডেটা নেই এমন খণ্ডগুলির জন্যও।
খণ্ড ডেটার দৈর্ঘ্য সর্বোচ্চ পর্যন্ত যেকোনো সংখ্যক বাইট হতে পারে; অতএব, বাস্তবায়নকারীরা অনুমান করতে পারে না যে খণ্ডগুলি বাইটের চেয়ে বড় কোনো সীমারেখায় সারিবদ্ধ।
খণ্ডগুলি যে কোনও ক্রমে উপস্থিত হতে পারে, প্রতিটি খণ্ডের প্রকারের উপর বিধিনিষেধ সাপেক্ষে। (একটি উল্লেখযোগ্য বিধিনিষেধ হল যে IHDR প্রথমে উপস্থিত হতে হবে এবং IEND অবশ্যই সর্বশেষে উপস্থিত হতে হবে; এইভাবে IEND খণ্ডটি ফাইলের শেষ-মার্কার হিসাবে কাজ করে।) একই ধরণের একাধিক খণ্ড প্রদর্শিত হতে পারে, তবে শুধুমাত্র সেই ধরণের জন্য বিশেষভাবে অনুমতি দেওয়া হলে।
খণ্ড প্রকার
খণ্ডের ধরনগুলিকে গুরুত্বপূর্ণ এবং অনুষঙ্গিক খণ্ডে শ্রেণীবদ্ধ করা হয়েছে, যা চাঙ্ক টাইপের জন্য নির্ধারিত 4-বাইটের কেস-সংবেদনশীল ASCII মানের উপর ভিত্তি করে। সমস্ত বাস্তবায়নকে অবশ্যই মানক সমালোচনামূলক অংশগুলি বুঝতে এবং সফলভাবে রেন্ডার করতে হবে। একটি বৈধ PNG ছবিতে অবশ্যই একটি IHDR খণ্ড, এক বা একাধিক IDAT খণ্ড এবং একটি IEND খণ্ড থাকতে হবে৷
সঙ্কোচন
PNG কম্প্রেশন পদ্ধতি 0 (বর্তমানে PNG-এর জন্য সংজ্ঞায়িত একমাত্র কম্প্রেশন পদ্ধতি) সর্বাধিক 32768 বাইটের স্লাইডিং উইন্ডো সহ ডিফ্লেট/ইনফ্লেট কম্প্রেশন নির্দিষ্ট করে। ডিফ্লেট কম্প্রেশন হল একটি LZ77 ডেরিভেটিভ যা জিপ, জিজিপ, পিকেজিপ এবং সম্পর্কিত প্রোগ্রামগুলিতে ব্যবহৃত হয়। এর পেটেন্ট-মুক্ত অবস্থাকে সমর্থন করে ব্যাপক গবেষণা করা হয়েছে। zlib ডেটাস্ট্রিমের মধ্যে সংকুচিত ডেটা ব্লকের একটি সিরিজ হিসাবে সংরক্ষণ করা হয়, যার প্রত্যেকটি কাঁচা (অসংকুচিত) ডেটা উপস্থাপন করতে পারে, LZ77-সংকুচিত ডেটা নির্দিষ্ট হাফম্যান কোডগুলির সাথে এনকোড করা, বা কাস্টম হাফম্যান কোডগুলির সাথে এনকোড করা LZ77-সংকুচিত ডেটা। চূড়ান্ত ব্লকের একটি মার্কার বিট এটিকে শেষ ব্লক হিসাবে চিহ্নিত করে, যা ডিকোডারকে সংকুচিত ডেটাস্ট্রিমের শেষ চিনতে দেয়।
প্রি-কম্প্রেশন ফিল্টারিং
সর্বোত্তম কম্প্রেশনের জন্য ইমেজ ডেটা প্রস্তুত করতে প্রাক-কম্প্রেশন ফিল্টার প্রয়োগ করা হয়। PNG ফিল্টার পদ্ধতি পাঁচটি মৌলিক ফিল্টার প্রকারকে নিম্নরূপ সংজ্ঞায়িত করে:
ফিল্টারের ধরন | নাম | অনুমানিত মান |
---|---|---|
0 | কোনোটি নয় | |
1 | সাব | প্রতিটি বাইটের মধ্যে পার্থক্য এবং পূর্ববর্তী পিক্সেলের সংশ্লিষ্ট বাইটের মান প্রেরণ করে |
2 | উপর | |
3 | গড় | |
4 | Paeth | The Paeth() ফিল্টার তিনটি প্রতিবেশী পিক্সেলের (বাম, উপরে, উপরের বাম) একটি সাধারণ রৈখিক ফাংশন গণনা করে, তারপর কম্পিউটেড মানের নিকটতম প্রতিবেশী পিক্সেলকে ভবিষ্যদ্বাণী হিসাবে বেছে নেয়। |
ফিল্টারিং অ্যালগরিদমগুলি বাইটে
প্রয়োগ করা হয়, পিক্সেলে নয়, ছবির বিট গভীরতা বা রঙের ধরন নির্বিশেষে। ফিল্টারিং অ্যালগরিদমগুলি একটি স্ক্যানলাইন দ্বারা গঠিত বাইট অনুক্রমের উপর কাজ করে। যদি চিত্রটিতে একটি আলফা চ্যানেল থাকে, তবে আলফা ডেটা চিত্র ডেটার মতোই ফিল্টার করা হয়।
যখন ইমেজ ইন্টারলেস করা হয়, ইন্টারলেস প্যাটার্নের প্রতিটি পাস ফিল্টারিং উদ্দেশ্যে একটি স্বাধীন ইমেজ হিসাবে বিবেচিত হয়। ফিল্টারগুলি আসলে একটি পাসের সময় প্রেরণ করা পিক্সেল দ্বারা গঠিত বাইট ক্রমগুলির উপর কাজ করে এবং আগের স্ক্যানলাইন হল পূর্বে একই পাসে প্রেরণ করা, সম্পূর্ণ চিত্রের সংলগ্ন একটি নয়। মনে রাখবেন যে কোনো একটি পাসে প্রেরিত সাবইমেজটি সর্বদা আয়তক্ষেত্রাকার হয়, তবে সম্পূর্ণ চিত্রের চেয়ে ছোট প্রস্থ এবং/অথবা উচ্চতা। যখন এই সাবইমেজটি খালি থাকে তখন ফিল্টারিং প্রয়োগ করা হয় না।