GIF, বা Graphics Interchange Format, তৈরি করেছিল অনলাইন সার্ভিস CompuServe, ১৯৮০-এর দশকের শেষ দিকে, যাতে ধীরগতির ডায়াল-আপ কানেকশনের মাধ্যমে ছবি পাঠানো যায় এবং এমন মেশিনে দেখা যায় যেগুলো প্রায় সবকিছুর ক্ষেত্রেই একে অপরের সঙ্গে অসহমত ছিল। এর দ্বিতীয় এবং শেষ সংস্করণে স্বচ্ছতা (transparency) এবং একাধিক ফ্রেম যোগ হয়, এবং এখনো সেই সংস্করণই ব্যবহৃত হচ্ছে। বহু দশক পরেও GIF বেঁচে আছে একটাই কারণে: যেখানে সাধারণ একটি ছবির প্রত্যাশা করা হয়, সেখানে ছোট, নীরব, লুপ হওয়া অ্যানিমেশন যোগ করার সব থেকে সহজ উপায় এটি।
একটি GIF কীভাবে তার ছবি সংরক্ষণ করে
একটি GIF লসলেস (lossless), কিন্তু বেশ সীমাবদ্ধ। এর কমপ্রেশন, LZW, পুনরাবৃত্ত পিক্সেলগুলোর সারি ছোট কোড দিয়ে প্রতিস্থাপন করে এবং ঠিক আগের ডেটাই ফেরত দেয়। সীমাবদ্ধতা হল রঙে: প্রতিটি ফ্রেম সর্বোচ্চ ২৫৬টি রঙ ব্যবহার করতে পারে, যা ফাইলে রাখা একটি প্যালেট থেকে বাছা হয়। একটি ফটোগ্রাফে এর চেয়ে অনেক বেশি শেড থাকে, তাই সেটিকে GIF হিসেবে সেভ করলে এনকোডারকে ২৫৬টি রঙ বেছে নিতে হয় এবং বাকিগুলো আনুমানিকভাবে মেলাতে হয়, সাধারণত ডিথারিংয়ের মাধ্যমে: দুটি রঙের বিন্দু ছড়িয়ে দিয়ে তৃতীয় রঙের ভান তৈরি করা। এই কারণেই ফটোগ্রাফিক GIF সাধারণত দাগ দাগে এবং ব্যান্ডের মতো দেখা যায়।
স্বচ্ছতা এখানে সব অথবা কিছুই নয়। প্যালেটের একটি এন্ট্রিকে স্বচ্ছ হিসেবে চিহ্নিত করা যায়, তাই কোনো পিক্সেল হয় পুরোপুরি স্বচ্ছ থাকবে, নয়তো পুরোপুরি অস্বচ্ছ। নরম, অর্ধস্বচ্ছ প্রান্ত বানানোর কোনো উপায় নেই, এই কারণেই GIF লোগোগুলো প্রায়ই অপ্রত্যাশিত ব্যাকগ্রাউন্ডে শক্ত, আঁটসাঁট বর্ডারসহ দেখা যায়।
অ্যানিমেশন মানে কেবল একের পর এক রাখা কয়েকটি ছবি, প্রতিটির নিজস্ব প্যালেট, সেকেন্ডের শতকরায় মাপা নিজস্ব বিলম্ব সময় এবং এর আগের ফ্রেমের সঙ্গে কী করা হবে তা নিয়ে একটি ডিসপোজাল নির্দেশনা থাকে। একটি ছোট অতিরিক্ত ব্লক ভিউয়ারকে জানায় কতবার লুপ হবে। এখানে কোনো সাউন্ড নেই।
একটি GIF কী মেটাডাটা বহন করে
এটা ছোট একটি অংশ, আর উত্তরটি সত্যিই অস্বাভাবিক: GIF প্রায় কোনো মেটাডেটাই বহন করে না। মেটাডেটা হলো বর্ণনামূলক তথ্য যা একটি ফাইল নিজের সম্পর্কে রাখে, আর GIF-এর জন্য এতে প্রায় কোনো জায়গাই রাখা হয়নি। ক্যামেরা সেটিংস, লেখক, তারিখ, শিরোনাম, এমনকি GPS কোঅর্ডিনেট রাখারও কোনো ফিল্ড নেই। EXIF বা IPTC, ছবি ফাইলের ভেতরে এই ধরনের তথ্য রাখার মানদণ্ডগুলো, কারোটাই GIF-এর জন্য কখনোই নির্ধারণ করা হয়নি।
একটি রিপোর্ট আপনাকে মূলত ইতিহাসের চেয়ে গঠন (স্ট্রাকচার) সম্পর্কিত তথ্যই দেখাতে পারে:
- ইমেজের ডাইমেনশন, কালার টেবিলের আকার এবং আসলে কতগুলো রঙ ব্যবহার করা হয়েছে।
- ফ্রেমের সংখ্যা, প্রতিটি ফ্রেমের বিলম্ব সময় ও ডিসপোজাল পদ্ধতি, এবং লুপ কাউন্ট।
- প্যালেটের কোন এন্ট্রি, যদি থাকে, স্বচ্ছ হিসেবে চিহ্নিত।
- ইমেজটি ইন্টারলেসড কি না, যা এক পুরোনো কৌশল; এর ফলে ফাইল পুরোপুরি লোড হওয়ার আগে একটি খসড়া সংস্করণ দেখা যেত।
- কমেন্ট ব্লক। GIF-এ ফ্রি-ফর্ম টেক্সট কমেন্ট দেওয়া যায়, আর কোনো কোনো সফটওয়্যার সেখানে নিজের নাম, কপিরাইট লাইন বা সোর্স অ্যাড্রেস লিখে রাখে। কোনো নাম ফাইলে থাকার এটি প্রায় একমাত্র সম্ভাব্য জায়গা।
- অ্যাপ্লিকেশন ব্লক। লুপিংয়ের জন্য ব্যবহৃত ব্লকের বাইরেও, Adobe এমন একটি ব্লক নির্ধারণ করেছে যা GIF-এর ভেতরে পুরো একটি XMP মেটাডেটা প্যাকেট ধারণ করতে পারে। এটি বিরল, তবে এই কারণেই কোনো রিপোর্ট একটি GIF-এ XMP দেখাতে পারে।
এটি উভয় দিকেই প্রভাব ফেলে। আপনার অবস্থান বা ক্যামেরার সিরিয়াল নম্বর ফাঁস হওয়ার সম্ভাবনা GIF-এ কম, কারণ সেগুলো রাখার জায়গাই নেই। তবে এটিকে গোপনীয়তা বলা যায় না: কোনো ছবি বা ভিডিও থেকে বানানো অ্যানিমেশন পিক্সেলগুলোতে যা আছে তা-ই দেখায়, আর যে কোনো কমেন্ট ব্লক কেউ না মুছে দিলে ফাইলেই থেকে যায়।
কখন GIF ব্যবহার করবেন
চ্যাট উইন্ডো, ফোরাম পোস্ট বা ইমেলে সাধারণ ছবির মতোই কাজ করতে হবে এমন ছোট, লুপ হওয়া অ্যানিমেশনের জন্য GIF ব্যবহার করুন। স্থির ছবির ক্ষেত্রে এখন আর GIF বেছে নেওয়ার ভালো কোনো কারণ নেই: একই ধরনের ফ্ল্যাট গ্রাফিক্সের জন্য PNG আকারে ছোট এবং পূর্ণ রঙ ধরে রাখে, আর ফটোগ্রাফের জন্য JPG অনেক ছোট।
অ্যানিমেশনের জন্য সৎ তুলনা হলো ভিডিওর সঙ্গে। একই কয়েক সেকেন্ডের একটি MP4 বা WebM ক্লিপ সাধারণত অনেক কম জায়গা নেয় এবং রঙ আরও মসৃণ থাকে। WebP এবং APNG-তেও পূর্ণ রঙ ও সঠিক স্বচ্ছতাসহ অ্যানিমেশন করা যায়। GIF-এর সুবিধা গুণগত মানে নয়, আকারেও নয়; সুবিধা হলো প্রায় সব জায়গাতেই, সবকিছুই ইতিমধ্যেই এটিকে সমর্থন করে।