একটি JPEG ফাইল কি?
একটি JPEG হল এক ধরনের চিত্র বিন্যাস যা ক্ষতিকর কম্প্রেশন পদ্ধতি ব্যবহার করে সংরক্ষণ করা হয়। আউটপুট ইমেজ, কম্প্রেশনের ফলে, স্টোরেজ সাইজ এবং ছবির মানের মধ্যে একটি ট্রেড-অফ। ব্যবহারকারীরা পছন্দসই মানের স্তর অর্জনের জন্য কম্প্রেশন স্তর সামঞ্জস্য করতে পারে এবং একই সময়ে স্টোরেজ আকার হ্রাস করতে পারে। 10:1 কম্প্রেশন ইমেজ প্রয়োগ করা হলে ইমেজ কোয়ালিটি তুচ্ছভাবে প্রভাবিত হয়। কম্প্রেশন মান যত বেশি হবে, ছবির মানের অবনতি তত বেশি হবে।
ফাইল ফরম্যাট স্পেসিফিকেশন
JPEG ইমেজ ফাইল ফরম্যাটটি জয়েন্ট ফটোগ্রাফিক এক্সপার্টস গ্রুপ দ্বারা প্রমিত করা হয়েছিল এবং তাই, নাম JPEG। বিন্যাসটি ওয়েবে ফটোগ্রাফিক ছবি সংরক্ষণ এবং প্রেরণের পছন্দ হয়েছে। প্রায় সব অপারেটিং সিস্টেমে এখন এমন দর্শক রয়েছে যা JPEG চিত্রগুলির ভিজ্যুয়ালাইজেশন সমর্থন করে, যেগুলি প্রায়শই JPG এক্সটেনশনের সাথেও সংরক্ষণ করা হয়। এমনকি ওয়েব ব্রাউজারগুলি JPEG চিত্রগুলির ভিজ্যুয়ালাইজেশন সমর্থন করে। JPEG ফাইল ফরম্যাট স্পেসিফিকেশনে যাওয়ার আগে, JPEG তৈরির সাথে জড়িত পদক্ষেপগুলির সামগ্রিক প্রক্রিয়া উল্লেখ করা দরকার।
JPEG কম্প্রেশন ধাপ
ট্রান্সফরমেশন: রঙিন ছবিগুলি RGB থেকে একটি লুমিন্যান্স/ক্রোমিন্যান্স ইমেজে রূপান্তরিত হয় (চোখ লোমিন্যান্সের প্রতি সংবেদনশীল, ক্রোমিন্যান্স নয়, যাতে ক্রোমিন্যান্স অংশটি অনেক ডেটা হারাতে পারে এবং এইভাবে অত্যন্ত সংকুচিত হতে পারে।
ডাউন স্যাম্পলিং: ডাউন স্যাম্পলিং রঙিন উপাদানের জন্য করা হয় এবং আলোক উপাদানের জন্য নয়। ডাউন স্যাম্পলিং হয় 2:1 অনুভূমিকভাবে এবং 1:1 উল্লম্বভাবে (2h 1 V) অনুপাতে করা হয়। এইভাবে ইমেজ আকারে হ্রাস পায় যেহেতু ‘y’ উপাদানটি স্পর্শ করা হয় না, ছবির মানের কোন লক্ষণীয় ক্ষতি হয় না।
দলগুলিতে সংগঠিত করা: প্রতিটি রঙের উপাদানের পিক্সেলগুলিকে 8×2 পিক্সেলের গোষ্ঠীতে সংগঠিত করা হয় যাকে ডেটা ইউনিট বলা হয় যদি সারি বা কলামের সংখ্যা 8-এর একাধিক না হয়, নীচের সারি এবং ডানদিকের কলামগুলি অনুলিপি করা হয়।
ডিসক্রিট কোসাইন ট্রান্সফরমেশন: ডিসক্রিট কোসাইন ট্রান্সফরমেশন (ডিসিটি) তারপর প্রতিটি ডেটা ইউনিটে রূপান্তরিত উপাদানগুলির 8×8 মানচিত্র তৈরি করতে প্রয়োগ করা হয়। কম্পিউটার গাণিতিকের সীমিত নির্ভুলতার কারণে ডিসিটি-তে কিছু তথ্যের ক্ষতি হয়। এর মানে হল যে ম্যাপ ছাড়া ছবির মানের কিছু ক্ষতি হবে কিন্তু এটি সাধারণত ছোট।
পরিমাণকরণ: ডেটা ইউনিটের 64টি রূপান্তরিত উপাদানগুলির প্রতিটিকে একটি পৃথক সংখ্যা দ্বারা ভাগ করা হয় যার নাম ‘কোয়ান্টাইজেশন কোফিসিয়েন্ট (QC)’ এবং তারপরে একটি পূর্ণসংখ্যায় পরিণত হয়। এখানেই তথ্য অপূরণীয়ভাবে হারিয়ে যায়, বড় QC বেশি ক্ষতি করে। সাধারণভাবে, বেশিরভাগ JPEG ইমপ্লিমেন্ট JPEG স্ট্যান্ডার্ড দ্বারা সুপারিশকৃত QC টেবিল ব্যবহারের অনুমতি দেয়।
এনকোডিং: প্রতিটি ডেটা ইউনিটের 64টি পরিমাপকৃত রূপান্তরিত সহগ (যা এখন পূর্ণসংখ্যা) RLE এবং হাফম্যান কোডিংয়ের সংমিশ্রণ ব্যবহার করে এনকোড করা হয়েছে।
হেডার যোগ করা: শেষ ধাপে হেডার এবং ব্যবহৃত সমস্ত JPEG প্যারামিটার যোগ করা হয় এবং ফলাফল আউটপুট করা হয়।
JPEG ডিকোডার কম্প্রেস করা থেকে আসল ইমেজ তৈরি করতে বিপরীত ধাপগুলো ব্যবহার করে।
ফাইল স্ট্রাকচার
একটি JPEG চিত্রকে সেগমেন্টের একটি ক্রম হিসাবে উপস্থাপন করা হয় যেখানে প্রতিটি সেগমেন্ট একটি মার্কার দিয়ে শুরু হয়। প্রতিটি মার্কার 0xFF বাইট দিয়ে শুরু হয় এবং মার্কারের ধরনকে প্রতিনিধিত্ব করার জন্য মার্কার পতাকা দ্বারা অনুসরণ করে। মার্কার দ্বারা অনুসরণ করা পেলোড মার্কারের ধরন অনুসারে আলাদা। সাধারণ JPEG মার্কার প্রকারগুলি নীচে তালিকাভুক্ত করা হয়েছে:
ছোট নাম | বাইটস | পেলোড | নাম | মন্তব্য |
---|---|---|---|---|
SOI | 0xFF, 0xD8 | কোনও নয় | চিত্রের শুরু | |
S0F0 | 0xFF, 0xC0 | ভেরিয়েবল সাইজ | ফ্রেমের শুরু | |
S0F2 | 0xFF, 0xC2 | ভেরিয়েবল সাইজ | ফ্রেমের জন্য শুরু করুন | |
DHT | 0xFF, 0xC4 | ভেরিয়েবল সাইজ | হাফম্যান টেবিল সংজ্ঞায়িত করুন | |
DQT | 0xFF, 0xDB | ভেরিয়েবল সাইজ | কোয়ান্টাইজেশন টেবিল(গুলি) সংজ্ঞায়িত করুন | |
DRI | 0xFF, 0xDD | 4 বাইট | পুনঃসূচনা ব্যবধান সংজ্ঞায়িত করুন | |
SOS | 0xFF, 0xDA | ভেরিয়েবল সাইজ | স্ক্যানের শুরু | |
RSTn | 0xFF, 0xD//n//(//n//#0..7) | কিছুই নয় | পুনরায় শুরু করুন | |
APPn | 0xFF, 0xE//n// | ভেরিয়েবল সাইজ | অ্যাপ্লিকেশন নির্দিষ্ট | |
COM | 0xFF, 0xFE | ভেরিয়েবল সাইজ | মন্তব্য | |
EOI | 0xFF, 0xD9 | কোনও নয় | চিত্রের শেষ |
এনট্রপি-কোডেড ডেটার মধ্যে, যেকোনো 0xFF বাইটের পরে, পরবর্তী বাইটের আগে এনকোডার দ্বারা একটি 0x00 বাইট ঢোকানো হয়, যাতে এমন একটি মার্কার দেখা না যায় যেখানে কোনোটিই উদ্দেশ্য নয়, ফ্রেমিং ত্রুটি প্রতিরোধ করে। ডিকোডারদের অবশ্যই এই 0x00 বাইটটি এড়িয়ে যেতে হবে। byte stuffing নামের এই কৌশলটি (JPEG স্পেসিফিকেশন বিভাগ F.1.2.3 দেখুন), শুধুমাত্র এনট্রপি-কোডেড ডেটাতে প্রয়োগ করা হয়, মার্কার পেলোড ডেটাতে নয়। তবে মনে রাখবেন যে এনট্রপি-কোডেড ডেটার নিজস্ব কয়েকটি চিহ্নিতকারী রয়েছে; বিশেষ করে রিসেট মার্কারগুলি (0xD0 থেকে 0xD7), যেগুলি সমান্তরাল ডিকোডিংয়ের অনুমতি দেওয়ার জন্য এনট্রপি-কোডেড ডেটার স্বাধীন অংশগুলিকে বিচ্ছিন্ন করতে ব্যবহৃত হয় এবং এনকোডারগুলি নিয়মিত বিরতিতে এই রিসেট মার্কারগুলি সন্নিবেশ করতে বিনামূল্যে (যদিও সমস্ত এনকোডার এটি করে না)।