পিএনজি ফর্ম্যাটের প্রাথমিক অনুপ্রেরণা ছিল জিআইএফের জন্য একটি প্রতিস্থাপন তৈরি করা যা কেবল নিখরচায় ছিল না তবে মূলত সমস্ত ক্ষেত্রে এটির চেয়েও উন্নতি ছিল। ফলস্বরূপ, পিএনজি সংকোচন সম্পূর্ণ লস লেস - এটি যে, জিআইএফ এবং টিআইএফএফ-এর বেশিরভাগ ফর্মের মতোই মূল চিত্রের ডেটা পুনরায় তৈরি করা যেতে পারে bit
পিএনজি একটি ২-পর্যায়ের সংক্ষেপণ প্রক্রিয়া ব্যবহার করে:
- প্রাক-সংক্ষেপণ: ফিল্টারিং (পূর্বাভাস)
- সংক্ষিপ্তসার: ডিফল্ট ( উইকিপিডিয়া দেখুন )
প্রাকম্প্রেশন পদক্ষেপকে ফিল্টারিং বলা হয়, যা চিত্রের ডেটাগুলিকে বিপরীতমুখী রূপান্তর করার একটি পদ্ধতি যাতে মূল কম্প্রেশন ইঞ্জিন আরও দক্ষতার সাথে কাজ করতে পারে।
একটি সাধারণ উদাহরণ হিসাবে, 1 থেকে 255 পর্যন্ত অভিন্নভাবে বাইটের ক্রম বাড়িয়ে বিবেচনা করুন:
1, 2, 3, 4, 5, .... 255
যেহেতু ক্রমটিতে কোনও পুনরাবৃত্তি নেই, এটি খুব খারাপভাবে সংকুচিত হয় বা একেবারেই নয়। তবে অনুক্রমের একটি তুচ্ছ পরিবর্তন - যথা, প্রথম বাইট একা রেখে তবে পরবর্তী এবং প্রতিটি বাইটকে এর এবং পূর্বসূরীর মধ্যে পার্থক্যের পরিবর্তে - ক্রমটিকে অত্যন্ত সংকোচযোগ্য সেটে রূপান্তরিত করে:
1, 1, 1, 1, 1, .... 1
উপরের রূপান্তরটি ক্ষতিহীন, যেহেতু কোনও বাইট বাদ দেওয়া হয়নি এবং এটি সম্পূর্ণরূপে বিপরীত। এই সিরিজের সঙ্কুচিত আকারটি অনেক হ্রাস পাবে তবে মূল সিরিজটি এখনও পুরোপুরি পুনর্গঠিত হতে পারে।
প্রকৃত চিত্র-ডেটা খুব কমই নিখুঁত, তবে ফিল্টারিং গ্রেস্কেল এবং ট্রাইকোলার চিত্রগুলিতে সংকোচনের উন্নতি করে এবং এটি কিছু প্যালেট চিত্রগুলিতেও সহায়তা করতে পারে। পিএনজি পাঁচ ধরণের ফিল্টার সমর্থন করে এবং একটি এনকোডার চিত্রের প্রতিটি সারি পিক্সেলের জন্য আলাদা ফিল্টার ব্যবহার করতে পারে:
অ্যালগরিদম বাইটে কাজ করে তবে বৃহত পিক্সেলের জন্য (যেমন, 24-বিট আরজিবি বা -৪-বিট আরজিবিএ) কেবলমাত্র বাইটগুলির সাথে তুলনা করা হয়, যার অর্থ পিক্সেল-বর্ণগুলির লাল উপাদানগুলি সবুজ এবং নীল পিক্সেল উপাদানগুলি থেকে পৃথকভাবে পরিচালনা করা হয়।
প্রতিটি সারির জন্য সেরা ফিল্টার চয়ন করতে, কোনও এনকোডারকে সমস্ত সম্ভাব্য সংমিশ্রণ পরীক্ষা করতে হবে। এটি পরিষ্কারভাবে অসম্ভব, কারণ একটি 20-সারির চিত্রের জন্য 95 ট্রিলিয়ন সংমিশ্রণেরও পরীক্ষা প্রয়োজন, যেখানে "টেস্টিং" পুরো চিত্রটি ফিল্টারিং এবং সংকোচনের সাথে জড়িত।
সংকোচনের স্তরগুলি সাধারণত 0 (কোনওটি নয়) এবং 9 (সেরা) এর মধ্যে সংখ্যা হিসাবে সংজ্ঞায়িত হয়। এগুলি গতি এবং আকারের মধ্যে ট্রেড অফগুলিকে বোঝায় এবং সারি-ফিল্টারগুলির কতগুলি সংমিশ্রণ চেষ্টা করতে হবে তা সম্পর্কিত। এই সংকোচনের স্তর সম্পর্কিত কোনও মান নেই, তাই প্রতিটি চিত্র-সম্পাদকের নিজস্ব অ্যালগরিদম থাকতে পারে যে চিত্র-আকারের অনুকূলকরণের সময় কতগুলি ফিল্টার চেষ্টা করতে হবে।
সংকোচনের মাত্রা 0 এর অর্থ হ'ল ফিল্টারগুলি মোটেই ব্যবহৃত হয় না, যা দ্রুত তবে অপচয়যোগ্য। উচ্চ স্তরের অর্থ হ'ল চিত্র-সারিগুলিতে আরও বেশি সংখ্যক সংমিশ্রণের চেষ্টা করা হয় এবং কেবল সেরাগুলি ধরে রাখা হয়।
আমি অনুমান করব যে সর্বোত্তম সংকোচনের সবচেয়ে সহজ পদ্ধতির হ'ল প্রতিটি ফিল্টারের সাথে প্রতিটি সারিটি ক্রমান্বয়ে পরীক্ষা-সংকুচিত করা, সবচেয়ে ছোট ফলাফল সংরক্ষণ করা এবং পরবর্তী সারির জন্য পুনরাবৃত্তি করা। এটি পুরো চিত্রটি পাঁচবার ফিল্টারিং ও সংকোচনের সমান, যা অনেক সময় সংক্রমণ ও ডিকোড হওয়া কোনও চিত্রের জন্য যুক্তিসঙ্গত বাণিজ্য বন্ধ হতে পারে। লোয়ার সংকোচনের মানগুলি সরঞ্জাম বিকাশকারীর বিবেচনার ভিত্তিতে কম করবে।
ফিল্টারগুলি ছাড়াও, সংক্ষেপণের স্তরটি zlib সংকোচনের স্তরকেও প্রভাবিত করতে পারে যা 0 (কোনও ডিফল্ট নয়) এবং 9 (সর্বাধিক ডিফল্ট) এর মধ্যে একটি সংখ্যা। নির্দিষ্ট 0-9 স্তরগুলি কীভাবে ফিল্টারগুলির ব্যবহারকে প্রভাবিত করে, যা পিএনজির মূল অপ্টিমাইজেশান বৈশিষ্ট্য, এটি এখনও সরঞ্জামটির বিকাশকারীের উপর নির্ভরশীল।
উপসংহারটি হল যে পিএনজির একটি সংকোচন প্যারামিটার রয়েছে যা ফাইল-আকারকে খুব উল্লেখযোগ্যভাবে হ্রাস করতে পারে, এমনকি একটি পিক্সেল এমনকি ক্ষতি ছাড়াই।
সূত্র:
উইকিপিডিয়া পোর্টেবল নেটওয়ার্ক গ্রাফিক্স
ডকুমেন্টেশন libpng অধ্যায় 9 - সংক্ষেপণ এবং ফিল্টারিং