ইমেজের ফাইল সাইজ কীভাবে কমাবেন
আপলোড ফর্ম 2 MB-এর নিচে চাইছে, আর আমার ছবিটা 8 MB। আসলে কী বদলাব?
তিনটি লিভার, আর তার একটাই সবচেয়ে বড়
প্রতিটি ইমেজ কম্প্রেসার আসলে তিনটি লিভারের কোনো না কোনো সমন্বয় টানে: ইমেজে কত পিক্সেল আছে, এনকোডারকে কতটা ডিটেইল ফেলে দেওয়ার অনুমতি দেওয়া হয়েছে, আর সে কোন ফরম্যাটে লেখে। মানুষ সবার আগে কোয়ালিটি স্লাইডারে হাত দেয়, কারণ প্রতিটি টুল ওটাই সবার আগে দেখায়। শুরু করার জায়গা হিসেবে ওটা সাধারণত ভুল।
সবচেয়ে বড় ভূমিকা ডাইমেনশনের, কারণ ফাইল সাইজ মোটামুটি পিক্সেল সংখ্যার সঙ্গে বাড়ে আর পিক্সেল সংখ্যা বাড়ে দৈর্ঘ্যের বর্গের সঙ্গে। প্রস্থ আর উচ্চতা দুটোই অর্ধেক করলে পিক্সেল থাকে এক-চতুর্থাংশ। কোয়ালিটি স্লাইডার দিয়ে এতটা নিষ্পত্তিমূলক কিছু করা যায় না, আর দেখতে কেমন লাগছে তার হিসেবে এত কম দামে অন্য কিছুও মেলে না — শর্ত একটাই, ফলাফলটা যে বাক্সে দেখানো হবে তার চেয়ে বড় থাকতে হবে।
আপনার আসলে কত পিক্সেল দরকার, হিসাব করুন
আধুনিক ফোনের ক্যামেরা প্রায় 4000 পিক্সেল চওড়া ইমেজ তোলে। ল্যাপটপে ফুল-স্ক্রিন ছবি দেখানো হয় মোটামুটি 1500 থেকে 2000 পিক্সেল চওড়ায়, আর কোনো আর্টিকেলের ভেতরের ছবি প্রায়ই দেখানো হয় 800-তে। যে বাক্স 800 দেখায় সেখানে 4000 পিক্সেল পাঠানো মানে, ডাউনলোড হয়ে যাওয়ার পর পাঠকের সফটওয়্যার পিক্সেলের প্রায় 96 শতাংশ ফেলে দেয়।
| দীর্ঘতম বাহু | আনুমানিক পিক্সেল | 4000 px মূল ছবির কত অংশ |
|---|---|---|
| 4000 px | 10.7 মিলিয়ন | 100% |
| 2560 px | 4.4 মিলিয়ন | 41% |
| 1920 px | 2.5 মিলিয়ন | 23% |
| 1280 px | 1.1 মিলিয়ন | 10% |
| 800 px | 0.4 মিলিয়ন | 4% |
এই শতাংশগুলো পাটিগণিত, কোনো নির্দিষ্ট ফাইলের মাপজোক নয় — কম্প্রেস করা ফাইল তার পিক্সেল সংখ্যার সঙ্গে হুবহু সমানুপাতে ছোট হয় না। তবু সবার আগে এগুলোই দেখা উচিত, কারণ এগুলো বলে দেয় ডিটেইল ফেলে দেওয়া শুরু করার আগে রিসাইজ এনকোডারকে কতটা জায়গা দিচ্ছে।
কোয়ালিটি স্লাইডার আসলে কী করছে
JPEG এনকোডারে কোয়ালিটির সংখ্যাটা প্রতিটি 8×8 ব্লকের ফ্রিকোয়েন্সি সহগের উপর প্রয়োগ করা ভাজকের একটা টেবিলকে ছোট-বড় করে। কোয়ালিটি কম মানে ভাগ আরও মোটা দাগের, তাতে আরও বেশি সহগ শূন্যে গিয়ে ঠেকে, আর তাতে বিট লাগে কম। এর দৃশ্যমান খরচ প্রথমে দেখা যায় কড়া প্রান্তের চারপাশে আর সমতল গ্রেডিয়েন্টে: লেখার পাশে রিঙিং, আর আকাশে ব্যান্ডিং।
এই স্কেল রৈখিক নয়, আর এক ফরম্যাটের সঙ্গে আরেক ফরম্যাটের তুলনাও চলে না। JPEG এনকোডারের কোয়ালিটি 80, WebP এনকোডারের 80 আর AVIF এনকোডারের 80 — তিনটি সম্পর্কহীন সংখ্যা, যাদের কেবল পাল্লাটাই এক। ফলাফল বিচার করুন পুরো সাইজে দেখে, সংখ্যাটার উপর ভরসা করে নয়।
টার্গেট সাইজ কেন একটা খোঁজ, সেটিং নয়
কোনো এনকোডার “একে 500 KB বানাও” কথাটা নির্দেশ হিসেবে নেয় না। সে নেয় একটা কোয়ালিটি সেটিং, আর ওই নির্দিষ্ট ইমেজে ওই সেটিং যত সাইজ দেয় সেটাই বানায়। তাই যে টুল আপনাকে টার্গেট সাইজ দেওয়ার সুযোগ দেয়, সে আসলে একটা খোঁজ চালায়: এনকোড করো, মেপে দেখো, কোয়ালিটি বদলাও, আবার এনকোড করো, আর থামো যখন ফলাফল বাজেটের নিচে নামে বা কোয়ালিটির তলানিতে পৌঁছে যায়।
এ কারণেই টার্গেট সব সময় সর্বোচ্চ-চেষ্টা মাত্র। ডিটেইলে ভরা, নয়েজি, হাই-রেজোলিউশন ছবি হয়তো মানুষ মেনে নেবে এমন কোনো কোয়ালিটিতেই আঁটসাঁট বাজেটে আঁটবে না, আর সৎ আচরণ হলো তলানিতে গিয়ে থেমে যাওয়া এবং কোথায় থামল তা জানানো — ছবিটা নষ্ট হয়ে যাওয়া পর্যন্ত চালিয়ে যাওয়া নয়। FileSlimmer-এর টার্গেট-সাইজ টুল আগে ডাইমেনশন কমায়, তারপর দুই সীমার মধ্যে কোয়ালিটি সংকুচিত করে, আর শেষে যে সেটিংয়ে থেমেছে সেটা জানিয়ে দেয়।
কীভাবে একটা ছবি 1 MB-এর চেয়ে ছোট করবেন
শুরু করুন ফোনের ছবিটাকে গন্তব্যের যতটুকু দরকার তার সর্বোচ্চ ডাইমেনশনে রিসাইজ করে। ইমেল, ফর্ম আর সাধারণ ওয়েব পেজের জন্য সেটা প্রায়ই ক্যামেরার মূল ছবির চেয়ে অনেক কম। তারপর উঁচু কিন্তু সর্বোচ্চ নয় এমন কোয়ালিটিতে নতুন করে একটা JPEG বা WebP এনকোড করুন, ফলাফল মেপে দেখুন, আর ফাইল তখনও 1 MB-এর উপরে থাকলে তবেই ধীরে ধীরে কোয়ালিটি কমান।
ফলাফল 1 MB-এর নিচে নামবে কি না, তা একা কোয়ালিটি ঠিক করে না, কারণ ডিটেইলে ভরা ইমেজের সরল ইমেজের চেয়ে বেশি ডেটা লাগে। প্রথম চেষ্টায় সীমা না মিললে কোয়ালিটি জোর করে কমানোর আগে ডাইমেনশন কমান। প্রতিটি পিক্সেল ধরে রেখে তীব্র ব্লক বা রিঙিং আর্টিফ্যাক্ট যোগ করার চেয়ে এভাবেই সাধারণত ছবিটা বেশি স্বাভাবিক দেখায়।
যেসব কাজে লাভ নেই
- ফাইলটা ZIP-এ ভরা। কম্প্রেস করা ইমেজ ফরম্যাটে সাধারণ কাজের কম্প্রেসারের খুঁজে পাওয়ার মতো প্রায় কোনো পুনরাবৃত্তি বাকি থাকে না; আর্কাইভের সাইজ সাধারণত মূল সাইজের এত কাছাকাছি যে পার্থক্যটা রাউন্ডিং এররের সমান।
- এক্সটেনশন বদলে দেওয়া। বাইট বদলায় না, আর যে সফটওয়্যার ফাইলের আসল সিগনেচার পড়ে সে কেবল বিভ্রান্ত হয়।
- একই কোয়ালিটিতে JPEG আবার সেভ করা। এটা দ্বিতীয় দফা লসি পাস: ফাইল কাজে লাগার মতো ছোট হয় না, আর ছবিটা সামান্য খারাপ হয়।
- শুধু সাইজ কমানোই যদি লক্ষ্য হয়, তাহলে ছবি থেকে মেটাডেটা মুছে ফেলা। কয়েক মেগাবাইট পিক্সেলের বিপরীতে কয়েক কিলোবাইট EXIF নিছকই নয়েজ। প্রাইভেসির কারণে মুছুন — সেই কারণগুলো সত্যিকারের — সাইজের জন্য নয়।
যে কর্মপ্রবাহে সাধারণত কাজ হয়
- ইমেজটা সর্বোচ্চ যত বড় আকারে কখনও দেখানো হবে সেটা ঠিক করুন, আর দীর্ঘতম বাহুটা সেই মাপে রিসাইজ করুন।
- কনটেন্টের সঙ্গে মানানসই ফরম্যাট বাছুন: ছবির জন্য লসি ফরম্যাট, স্ক্রিনশট আর সমতল গ্রাফিকের জন্য লসলেস।
- উঁচু কিন্তু সর্বোচ্চ নয় এমন কোয়ালিটি থেকে শুরু করে ধাপে ধাপে নামুন যতক্ষণ না ক্ষতিটা চোখে পড়ে, তারপর এক ধাপ উপরে উঠে আসুন।
- ফলাফল পুরো সাইজে দেখে নিন, যে ধরনের স্ক্রিনের জন্য এটা বানানো সেই স্ক্রিনেই।
- তবু বেশি বড় হলে প্রথম ধাপে ফিরে যান। কোয়ালিটির চেয়ে ডাইমেনশনেই প্রায় সব সময় বেশি জায়গা থাকে।
এটা কোথায় গিয়ে আর কাজ করে না
কিছু ইমেজ এসবের কোনোটাতেই বাগ মানে না। সূক্ষ্ম লেখায় ভরা স্ক্যান করা ডকুমেন্টের পিক্সেল পড়ার যোগ্য থাকা দরকার, তাই রিসাইজ করলেই সঙ্গে সঙ্গে ক্ষতি হয়, আর কোয়ালিটি কমালে ঠিক সেই আর্টিফ্যাক্টগুলোই তৈরি হয় যেগুলো লেখা পড়া কঠিন করে দেয়। স্প্রেডশিটের স্ক্রিনশটেও একই সমস্যা। এদের ক্ষেত্রে সঠিক উত্তর প্রায়ই কম কিলোবাইট নয়, বরং অন্য একটা ফরম্যাট — লসলেস, বা PDF।
আর কোনো পোর্টাল যদি আপনার ফাইল নিতে না চায়, দেখে নিন সীমাটা ফাইল সাইজের উপর না পিক্সেল ডাইমেনশনের উপর। এ দুটো আলাদা সীমা, আর একটায় পাস করা ফাইল অন্যটায় আটকে যেতে পারে।
এই কাজের টুল
সূত্র
- ITU-T T.81 — quantisation and the JPEG quality scale
- MDN — Image file type and format guide
- MDN — Responsive images and choosing a display width