JPEG হল ওয়েবে ব্যবহৃত সবচেয়ে সাধারণ ধরনের ইমেজ, এবং সঙ্গত কারণে: কয়েক দশক ধরে, JPEG প্রায় সবসময়ই ফটোগ্রাফ এনকোড করার জন্য সঠিক পছন্দ। ব্যবহারের ক্ষেত্রে এই নামেই রয়েছে: JPEG এর অর্থ হল "জয়েন্ট ফটোগ্রাফিক এক্সপার্টস গ্রুপ", যে কমিটি 1992 সালে প্রথম স্ট্যান্ডার্ড জারি করার জন্য দায়ী। আপনি JPEG-এর জন্য ফাইল এক্সটেনশনটি .jpg বা .jpeg হিসাবে দেখতে পাবেন, যদিও আধুনিক ব্যবহারে পরেরটি বিরল।
যদিও লসলেস কম্প্রেশন প্যাসিভভাবে ইমেজ ডেটাকে যতটা সম্ভব সংকুচিত করে, JPEG-এর ক্ষতিকর কম্প্রেশন ইমেজ ডেটাতে ক্ষুদ্র, প্রায়ই অদৃশ্য পরিবর্তনের মাধ্যমে কম্প্রেশনকে আরও দক্ষ করার সুযোগ খোঁজে। JPEG ইমেজ ডেটাকে পিক্সেলের আট-বাই-আট ব্লক হিসাবে এনকোড করে এবং ব্লকগুলিকে বর্ণনা করে — তাদের ভিতরের পৃথক পিক্সেল নয় — অ্যালগরিদমিকভাবে৷
এটি কাগজে একটি একাডেমিক পার্থক্যের মতো শোনাতে পারে: "GIF পিক্সেলের তৈরি একটি গ্রিড ব্যবহার করে বনাম JPEG পিক্সেলের ছোট গ্রিড দিয়ে তৈরি একটি গ্রিড ব্যবহার করে।" বাস্তবে, পিক্সেলের পরিবর্তে ব্লকের এই ব্যবহার মানে JPEG ছবির জন্য অনেক বেশি সাধারণ ব্যবহারের ক্ষেত্রে উপযুক্ত: সূক্ষ্ম, স্তরযুক্ত গ্রেডিয়েন্ট যা একটি বাস্তব বিশ্বের ফটোগ্রাফ তৈরি করে।
GIF-শৈলী এনকোডিং ব্যবহার করে এমনকি একটি খুব সাধারণ একক-পিক্সেল গ্রেডিয়েন্ট বর্ণনা করা অত্যন্ত ভার্বোস হবে:
সারি এক, কলাম এক থেকে নয়টি হল #00CC00। সারি এক, কলাম দশ হল #00BB00। প্রথম সারি, এগারো কলাম হল #00AA00। প্রথম সারি, বারো কলাম হল #009900। প্রথম সারি, তের নম্বর কলাম হল #008800। প্রথম সারি, চৌদ্দ কলাম হল #007700। প্রথম সারি, পনেরো কলাম হল #006600। প্রথম সারি, ষোলটি কলাম হল #005500।
JPEG-শৈলী এনকোডিং ব্যবহার করে একটি গ্রেডিয়েন্ট বর্ণনা করা অনেক, অনেক বেশি দক্ষ:
ব্লক এক হল #00CC00। ব্লক দুই হল #00CC00 থেকে #005500 পর্যন্ত একটি গ্রেডিয়েন্ট।
যেখানে JPEG সত্যিই জ্বলজ্বল করে তা হল একটি চিত্রের "উচ্চ ফ্রিকোয়েন্সি" বিশদ বিবরণের মাত্রা, প্রায়শই অজ্ঞাতভাবে। ফলস্বরূপ, একটি JPEG হিসাবে একটি চিত্র সংরক্ষণ করার অর্থ সাধারণত সেই চিত্রের গুণমানকে এমনভাবে হ্রাস করা যা পরিমাপযোগ্য, কিন্তু অগত্যা দৃশ্যমান নয়৷ আপনি যেমন শিখেছেন , GIF-শৈলী প্যালেট কোয়ান্টাইজেশন একটি তুলনামূলকভাবে সহজ অপারেশন: একটি ছবিতে রঙের সংখ্যা হ্রাস করার ফলে ফাইলগুলি ছোট হয়, কিন্তু এমনভাবে যা মানুষের চোখে সহজে চিহ্নিত করা যায়।
অন্যদিকে, JPEG কীভাবে কোয়ান্টাইজেশন সঞ্চালিত হয় সে সম্পর্কে চতুর: JPEG-এর ক্ষতিকারক কম্প্রেশন একটি ইমেজ সোর্সকে এমনভাবে কোয়ান্টাইজ করার চেষ্টা করে যা আমাদের নিজস্ব সাইকো-ভিজ্যুয়াল সিস্টেমগুলি আমাদের চারপাশের বিশ্বকে কোয়ান্টাইজ করে। প্রকৃতপক্ষে, JPEG বিশদ বিবরণ ফেলে দেওয়ার চেষ্টা করে যা আমরা প্রথম স্থানে দেখতে পাইনি, তাই এটি আমাদের অতীতে অতিরিক্ত সংকোচন লুকিয়ে রাখতে পারে।
মানুষের সাইকো-ভিজ্যুয়াল সিস্টেম আপনি ক্রমাগত যে ছবিগুলি তুলছেন সেগুলিকে "সংকোচন" করতে অনেক বেশি কাজ করে৷ আমি যখন আমার ছোট্ট বাগানের বাইরে তাকাই, তখন আমি অবিলম্বে প্রচুর পরিমাণে তথ্য প্রক্রিয়া করতে পারি: উদাহরণস্বরূপ, স্বতন্ত্র উজ্জ্বল রঙের ফুল দাঁড়ানো আমি অবিলম্বে নিবন্ধন করি যে মাটি একটি ধূসর ধূসর, এবং পাতা ঝরে যাচ্ছে - আমার গাছপালা জল প্রয়োজন. আমি যা দেখতে পাচ্ছি , কিন্তু সম্পূর্ণভাবে প্রক্রিয়া করছি না, তা হল সঠিক আকৃতি, আকার, কোণ এবং সবুজ রঙের ছায়া যে কোনো আলাদা পাতার জন্য। আমি অবশ্যই সক্রিয়ভাবে সেই স্তরের বিশদটি সন্ধান করতে পারি, তবে এটি নিষ্ক্রিয়ভাবে গ্রহণ করা খুব বেশি তথ্য হবে এবং কোনও প্রকৃত উপকার হবে না। তাই আমার সাইকো-ভিজ্যুয়াল সিস্টেমটি তার নিজস্ব একটি সামান্য পরিমাপ করে, সেই তথ্যটি "পাতা ঝরে পড়ছে" তে পাতন করে।
কার্যত, JPEG একই ভাবে কাজ করে। JPEG-এর ক্ষতিকর সংকোচন একটি চিত্রের বিশদ স্তরকে এমনভাবে হ্রাস করে যা আমাদের স্বাভাবিকভাবে "ক্ষতিকর" সাইকো-ভিজ্যুয়াল সিস্টেমে নিবন্ধন নাও করতে পারে, যদি কারণের মধ্যে করা হয়-এবং শুধুমাত্র ক্ষতিহীন কম্প্রেশনের চেয়ে ব্যান্ডউইথ সঞ্চয়ের জন্য অনেক বেশি সুযোগ প্রবর্তন করে।
উদাহরণস্বরূপ, JPEG আমাদের প্রধান সাইকো-ভিজ্যুয়াল দুর্বলতার সুবিধা নেয়: আমাদের চোখ রঙের পার্থক্যের চেয়ে উজ্জ্বলতার পার্থক্যের প্রতি বেশি সংবেদনশীল। কোনো কম্প্রেশন প্রয়োগ করার আগে, JPEG ইমেজটিকে আলাদা ফ্রিকোয়েন্সি-"স্তর"-এ বিভক্ত করার জন্য "ডিসক্রিট কোসাইন ট্রান্সফরমেশন" নামক একটি প্রক্রিয়া ব্যবহার করে- কথা বলার পদ্ধতিতে- উজ্জ্বলতা (উজ্জ্বলতা) এবং ক্রোমিন্যান্স (রঙ), বা "লুমা" এবং প্রতিনিধিত্ব করে। "ক্রোমা।"
লুমা স্তরটি ন্যূনতমভাবে সংকুচিত হয়, শুধুমাত্র ছোট বিশদগুলি বাতিল করে যা সম্ভবত মানুষের চোখে লক্ষণীয় নয়।
ক্রোমা স্তরগুলি উল্লেখযোগ্যভাবে হ্রাস পেয়েছে। জিআইএফ-এর মতো ক্রোমা স্তরগুলির প্যালেটের পরিমাপ করার পরিবর্তে, JPEG "সাবস্যাম্পলিং" নামক একটি প্রক্রিয়া সম্পাদন করতে পারে যেখানে একটি ক্রোমা স্তর কম রেজোলিউশনে সংরক্ষণ করা হয়। লুমা স্তরের উপরে নিম্ন রেজোলিউশনের ক্রোমা স্তরগুলিকে কার্যকরভাবে প্রসারিত করে পুনরায় সংযুক্ত করা হলে, পার্থক্যটি প্রায়শই অবোধ্য হয়। যদি আমরা মূল চিত্রের উত্স এবং আমাদের JPEG পাশাপাশি তুলনা করি তবে রঙের মধ্যে সামান্য পার্থক্য লক্ষণীয় হতে পারে, তবে কেবল তখনই যখন আমরা জানি ঠিক কী সন্ধান করতে হবে।
যে বলে, JPEG নিখুঁত নয়. JPEG আমাদের অতীত কম্প্রেশন লুকিয়ে রাখা সম্পর্কে যতটা কৌশলী, খুব বেশি দূরে নিয়ে গেলে এটি স্পষ্টভাবে স্পষ্ট হয়ে উঠতে পারে। প্রকৃতপক্ষে, আপনি যদি ওয়েবে অনেক সময় ব্যয় করে থাকেন-বিশেষ করে অতীতের দিনগুলিতে-আপনি হয়ত লক্ষ্য করেছেন যে JPEG কম্প্রেশনের ফলাফলটি অনেক দূরে নেওয়া হয়েছে:
চিত্রের ডেটা খুব আক্রমনাত্মকভাবে সংকুচিত করার অর্থ হল আমাদের সাইকো-ভিজ্যুয়াল সিস্টেমগুলি স্বাভাবিকভাবেই উপেক্ষা করার চেয়ে বিশদ স্তরটি আরও হ্রাস পেয়েছে, তাই বিভ্রম ভেঙে গেছে। এটা স্পষ্ট হয়ে ওঠে যে বিস্তারিত অনুপস্থিত. কারণ JPEG ব্লকের পরিপ্রেক্ষিতে কাজ করে, সেই ব্লকগুলির মধ্যে সীমগুলি দেখাতে শুরু করতে পারে।
প্রগতিশীল JPEG
প্রগতিশীল JPEG (PJPEG) কার্যকরভাবে একটি JPEG রেন্ডার করার প্রক্রিয়াকে পুনরায় সাজায়। স্থানান্তর অগ্রগতির সাথে সাথে "বেসলাইন" JPEG গুলি উপরে থেকে নীচে রেন্ডার করা হয়, যখন প্রগতিশীল JPEG পূর্ণ আকারের "স্ক্যান"-এর একটি সেটে রেন্ডারিংকে ভেঙে দেয় - একইভাবে উপরে থেকে নীচে করা হয় - প্রতিটি স্ক্যানের সাথে ছবির গুণমান বৃদ্ধি পায়। সম্পূর্ণ চিত্রটি অবিলম্বে প্রদর্শিত হয়, যদিও ঝাপসা, এবং স্থানান্তর অব্যাহত থাকার সাথে সাথে এটি আরও পরিষ্কার হয়।
এটি কাগজে একটি কঠোরভাবে প্রযুক্তিগত পার্থক্য বলে মনে হচ্ছে, তবে একটি বিশাল উপলব্ধিগত সুবিধা রয়েছে: খালি স্থানের পরিবর্তে অবিলম্বে চিত্রটির একটি পূর্ণ-আকারের সংস্করণ সরবরাহ করে, পিজেপিইজি শেষ ব্যবহারকারীর কাছে বেসলাইন জেপিইজির চেয়ে দ্রুত অনুভব করতে পারে। উপরন্তু, ক্ষুদ্রতম চিত্রগুলি ব্যতীত, PJPEG হিসাবে একটি চিত্রকে এনকোড করার অর্থ প্রায় সর্বদা একটি বেসলাইন JPEG-এর তুলনায় একটি ছোট ফাইলের আকার - খুব বেশি নয়, তবে প্রতিটি বাইট সাহায্য করে।
তবে একটি ছোট ট্রেড-অফ আছে: ক্লায়েন্টের দিক থেকে PJPEG ডিকোড করা আরও জটিল, যার অর্থ রেন্ডারিং-এর সময় ব্রাউজার-এবং একটি ডিভাইসের হার্ডওয়্যারের উপর একটু বেশি চাপ দেওয়া। এই রেন্ডারিং ওভারহেড সঠিক পরিভাষায় পরিমাপ করা কঠিন, তবে এটি খুবই গৌণ এবং গুরুতরভাবে কম ক্ষমতাসম্পন্ন ডিভাইসগুলি ছাড়া এটি লক্ষণীয় হওয়ার সম্ভাবনা কম। এটি একটি ট্রেড-অফ তৈরির যোগ্য এবং, সকলকে বলা হয়েছে, প্রগতিশীল একটি বুদ্ধিমান ডিফল্ট পদ্ধতি যখনই JPEG হিসাবে একটি চিত্রকে এনকোড করা হয়।
JPEG ব্যবহার করে
আপনি এই সমস্ত তথ্য দ্বারা একটু অভিভূত বোধ হতে পারে. আপনার প্রতিদিনের কাজের জন্য ভাল খবর আছে, যদিও: JPEG কম্প্রেশনের আরও প্রযুক্তিগত বৈশিষ্ট্যগুলিকে বিমূর্ত করা হয়েছে, পরিবর্তে একটি একক "গুণমান" সেটিং হিসাবে প্রকাশ করা হয়েছে: 0 থেকে 100 পর্যন্ত একটি পূর্ণসংখ্যা। 0 সবচেয়ে ছোট সম্ভাব্য ফাইলের আকার প্রদান করে, এবং আপনি আশা করতে পারেন, সবচেয়ে খারাপ সম্ভাব্য চাক্ষুষ গুণমান. আপনি 0 থেকে 100 পর্যন্ত অগ্রগতির সাথে সাথে গুণমান এবং ফাইলের আকার উভয়ই বৃদ্ধি পায়। এই সেটিংটি অবশ্যই বিষয়ভিত্তিক—প্রতিটি টুল একইভাবে "75" এর মানকে ব্যাখ্যা করবে না এবং ইমেজের বিষয়বস্তু অনুসারে উপলব্ধিগত গুণমান সবসময় পরিবর্তিত হয়।
এই কম্প্রেশন সেটিং কিভাবে কাজ করে তা বোঝার জন্য, আসুন ইমেজ ফাইল অপ্টিমাইজ করার জন্য একটি সাধারণ ওয়েব-ভিত্তিক টুল ব্যবহার করি: Squosh ।
স্কুশ —ক্রোম টিম দ্বারা রক্ষণাবেক্ষণ করা—চিত্র আউটপুট এনকোডিং এবং কনফিগার করার বিভিন্ন পদ্ধতির মধ্যে একটি পাশাপাশি তুলনা প্রদান করে, একটি 0-100 গ্লোবাল "গুণমান" স্লাইডার থেকে শুরু করে বিশদটি সূক্ষ্ম-টিউন করার ক্ষমতা পর্যন্ত কনফিগারেশন বিকল্পগুলির সাথে ক্রোমিন্যান্স বনাম লুমিন্যান্স রিস্যাম্পলিং। "গুণমান" সংখ্যা যত কম হবে, কম্প্রেশন তত বেশি হবে এবং ফলস্বরূপ ফাইলটি তত ছোট হবে।
এখানে, "গুণমান" 60 সেট করার সাথে, ফাইলের আকার 79% কমে গেছে। এই লেবেলের প্রভাব দ্বারা প্রতারিত হবেন না: বেশিরভাগ স্কেলে গুণমানের পার্থক্য মানুষের চোখে অদৃশ্য হবে, এমনকি পাশাপাশি তুলনা করার সময়ও।
আপনার সোর্স ইমেজটিকে একটি প্রগতিশীল JPEG তে রূপান্তর করতে, "উন্নত বিকল্প" এর অধীনে "প্রগতিশীল রেন্ডারিং" লেবেলযুক্ত বাক্সে টিক দিন। এই কনফিগারেশন বিকল্পগুলির মধ্যে কয়েকটি অবশ্যই গড় ওয়েব প্রজেক্টের প্রয়োজনের চেয়ে গভীরতর ডাইভ, তবে বাস্তব জগতে ব্যবহারের ক্ষেত্রে আপনি JPEG এনকোডিং প্রভাব ফাইলের আকার এবং গুণমান সম্পর্কে যে জিনিসগুলি শিখেছেন তা সম্পর্কে তারা আপনাকে আরও ঘনিষ্ঠভাবে দেখতে দিতে পারে।
আমরা এখন JPEG-কে অভ্যন্তরীণভাবে কতটা জটিল বলে জানি তা সত্ত্বেও ব্যবহারিক দিক থেকে এর খুব বেশি কিছু নেই। Squoosh হল অপ্টিমাইজ করা JPEG সংরক্ষণের অগণিত পদ্ধতির মধ্যে একটি, যার সবকটিই কম্প্রেশন স্তর নির্ধারণের জন্য একই পদ্ধতি ব্যবহার করে: 0 এবং 100 এর মধ্যে একটি একক পূর্ণসংখ্যা।
আপনার চিত্রগুলির জন্য কম্প্রেশনের আদর্শ স্তর নির্ধারণ করা একটি সূক্ষ্ম খেলা, এই কারণে যে JPEG এনকোডিংয়ের সমস্ত জটিলতা একটি একক পূর্ণসংখ্যাতে পাতিত হচ্ছে, বিশেষ করে যখন একটি চিত্রের বিষয়বস্তুর উপর অনেক বেশি নির্ভর করে। ব্লিঙ্কিং বা শ্বাস নেওয়ার বিষয়ে চিন্তা করার মতো, JPEG কম্প্রেশন সেটিংস বিবেচনা করলে আমরা কীভাবে সেগুলি বুঝতে পারি তা পরিবর্তন করে।
এখন বাইরে ফিরে তাকালে, এই সব লেখার পরে, আমার সাইকো-ভিজ্যুয়াল প্রক্রিয়াকরণ আরও ম্যানুয়াল হয়ে উঠেছে- এখন আমি পৃথক পাতার দিকে তাকাচ্ছি, যদিও ছবি নিজেই - তাই বলতে গেলে - পরিবর্তিত হয়নি। এটি JPEG কম্প্রেশন কনফিগার করাকে একটু ভরাট করে তোলে: আপনি ঠিক কী ধরণের ভিজ্যুয়াল ত্রুটিগুলি সন্ধান করতে হবে তা জানেন৷ প্রথম স্থানে ইমেজ কম্প্রেশন সম্পর্কে চিন্তা করে, আপনি পৃথক পাতার উপর ফোকাস করছেন—আমরা সামান্য অস্পষ্টতা এবং মাঝে মাঝে সংকোচনের আর্টিফ্যাক্টকে চিহ্নিত করতে চাই। আপনার JPEG কম্প্রেশন সেটিংস সূক্ষ্ম-টিউন করার সময় আপনি যত বেশি আর্টিফ্যাক্টের সন্ধান করবেন ততই আপনার সেগুলি খুঁজে পাওয়ার সম্ভাবনা বেশি, যখন একজন ব্যবহারকারী সম্ভবত তা খুঁজে পাবেন না। এমনকি যদি সেই ব্যবহারকারী জানতেন যে ঠিক কী সন্ধান করতে হবে, তারা তাদের মনে JPEG কম্প্রেশন সহ একটি পৃষ্ঠা দেখার সম্ভাবনা নেই।
সেই কারণে, আর্টিফ্যাক্টগুলি খুঁজছেন এমন একটি চিত্রকে উন্নত করার প্রবৃত্তি এড়িয়ে চলুন—অথবা আমাদের চিত্রগুলির অংশগুলিকে খুব কাছ থেকে দেখুন যেখানে আপনি জানেন যে শিল্পকর্মগুলি প্রথমে প্রদর্শিত হবে৷ ব্যবহারকারীদের জন্য, ক্ষীণ নিদর্শনগুলি ক্ষুদ্র বিবরণের সাথে মিশ্রিত হয় যা তাদের ক্ষতিকারক সাইকো-ভিজ্যুয়াল সিস্টেমগুলি সাধারণত চকচকে হয়। আসলে, এমনকি JPEG যে কৌশলগুলি চালানোর চেষ্টা করে সেগুলি বোঝার পরেও, আপনি ওয়েব ব্রাউজ করার সময় সেই একই শিল্পকর্মগুলি লক্ষ্য করবেন না যদি না আপনি সেগুলি খুঁজতে যান৷ সেই কারণে, JPEG কম্প্রেশনকে আপনি যেটা লক্ষণীয় হতে পারে বলে মনে করেন তার থেকে একটু কম ধাক্কা দেওয়া প্রায় সবসময়ই নিরাপদ বাজি—বিশেষ করে যখন সেই চিত্রটি সরাসরি স্টাইলিং বা আশেপাশের দ্বারা সেট করা সীমাবদ্ধতার কারণে তার অন্তর্নিহিত আকারের চেয়ে ছোট প্রদর্শিত হবে। বিন্যাস