আপলোডের পর আপনার ছবি কেন কাত হয়ে যায়
ফোনে ছবি সোজা দেখায়, আপলোড ফর্মে কাত হয়ে যায়? Exif orientation ফ্ল্যাগ কী করে, ঘোরানো পিক্সেল আর ট্যাগের ফারাক বোঝার উপায় এবং সমাধান জেনে নিন।
- exif orientation
- photo rotation
- product photography
- image upload
- jpeg
- webp
- marketplace listings
- file metadata

আপনি ফোনে একটা পণ্যের ছবি তোলেন, হাতে ধরা ফোনটা ঘোরান, শাটার বোতামে চাপ দেন। স্ক্রিনে ছবিটা সোজা দেখায়। কিন্তু মার্কেটপ্লেস আপলোড ফর্মে গিয়ে দেখা যায় সেটা কাত হয়ে শুয়ে আছে — একই ফাইল, শুধু এক-চতুর্থাংশ ঘোরা।
এটা আপনার ফোন খারাপ হয়ে যাওয়ার লক্ষণ নয়। ছবিটা ফাইলের ভেতরে হয়তো সত্যিই কাত হয়ে আছে, আর তোলার সময় থেকেই এমন আছে। আপনার ফোন যা-ই হোক সেটা আপনাকে সোজা করে দেখায়। কিন্তু আপলোড ফর্ম তা করেনি।
আপনার ফাইল এই দুই অবস্থার যেকোনো একটাতে আছে, আর কোনটা তা বোঝার জন্য মাত্র একটা পরীক্ষাই যথেষ্ট।
ক্যামেরা সেন্সর যেভাবে দেখে, ছবি ঠিক সেভাবেই সেভ করে
ইমেজ সেন্সর ফোনের সাথে আটকানো একটা নির্দিষ্ট আয়তক্ষেত্র; আপনি ঘুরলেও সেটা ঘোরে না। পোর্ট্রেট ছবি তুললেও সেটা তখনও ল্যান্ডস্কেপ ফ্রেমেই রেকর্ড করে, আর আপনার বিষয়বস্তু তার ভেতরে কাত হয়ে শুয়ে থাকে।

অনেক ক্যামেরা লক্ষ লক্ষ পিক্সেল নতুন করে লেখার ঝামেলায় না গিয়ে মেটাডেটাতে একটা ছোট সংখ্যা লিখে রাখে, যার অর্থ, "দেখানোর আগে এটাকে এক-চতুর্থাংশ ঘোরাও।" আবার কিছু ক্যামেরা সেভ করার সময়ই পিক্সেল ঘুরিয়ে নেয় এবং ফাইলটাকে ইতিমধ্যে সোজা বলে চিহ্নিত করে — এই কারণেই একই ছবিতে দুটো ফোন আলাদা আচরণ করে। JPEG-এ এই সংখ্যাটাই হলো Exif ট্যাগ 274, Orientation, আর এটা ঘোরানোর পাশাপাশি আয়নার প্রতিবিম্বের মতো উল্টে যাওয়া ফ্রেমও বোঝাতে পারে।
কিছু রিডার ফ্ল্যাগ মেনে চলে, কিছু উপেক্ষা করে
আধুনিক ব্রাউজারগুলো এটা ঠিকই পড়ে। CSS-এর image-orientation প্রপার্টির ডিফল্ট মান হলো from-image; MDN স্পষ্ট করে বলে, "ছবির ভেতরে থাকা EXIF তথ্য ব্যবহার করে ছবিটাকে যথাযথভাবে ঘোরানো হয়।" 2020 সালের এপ্রিল থেকে সব ব্রাউজারেই এটা কাজ করছে।
কিন্তু যা ব্রাউজার নয়, তা এখনও এই ট্যাগ উপেক্ষা করতে পারে। ওয়েব স্ট্যান্ডার্ডগুলো এখন এই ট্যাগ মেনে চলার দিকেই একমত হয়েছে, তবে অনেক সার্ভার-সাইড ডিকোডার, থাম্বনেইল জেনারেটর আর ইমেজ লাইব্রেরি এই মতৈক্যের আগেই লেখা হয়েছিল, আর সেগুলো এই ট্যাগের দিকে তাকায়ই না — আর তাদের তা করতে বাধ্যও করা হয় না।
তাই প্রশ্নটা কখনোই "আমার ছবি কি কাত" নয়, বরং "যা দিয়ে ছবিটা দেখানো হচ্ছে সেটা কি ফ্ল্যাগ পড়েছে"। আপনার গ্যালারি অ্যাপ পড়ে। মার্কেটপ্লেসের থাম্বনেইল জেনারেটর হয়তো পড়ে না।
গ্যালারিতে ঘোরালে হয়তো শুধু ফ্ল্যাগটাই বদলায়
রোটেট বোতামে চাপ দিলে ফল কী হবে তা নির্ভর করে অ্যাপের ওপর। দুটো একেবারে ভিন্ন জিনিস ঘটতে পারে।

- অ্যাপটা শুধু orientation মান বদলে দেয়, পিক্সেল ডেটা অক্ষত থাকে। মুহূর্তেই হয়, কোনো মান নষ্ট হয় না, আর যা ফ্ল্যাগ উপেক্ষা করে তার কাছে অদৃশ্য থাকে: ফাইলের ভেতরে আপনার ছবি তখনও কাত হয়েই আছে।
- অ্যাপটা রি-এনকোড করে: পিক্সেল ডিকোড করে, সেগুলো ঘোরায়, তারপর ফ্ল্যাগ রিসেট করে একটা নতুন ফাইল লেখে। ঘোরানোটা তখন পাকাপাকিভাবে বসে যায় আর সব জায়গাতেই টিকে থাকে। PNG বা লসলেস WebP-র ক্ষেত্রে এতে কোনো ক্ষতি হয় না; JPEG-এর ক্ষেত্রে সাধারণত একবার রি-এনকোডের মান কিছুটা কমে, যা একবার খরচ করার মতো, বারবার নয়।
অ্যাপ কোন পথ বেছে নেবে তা বোতাম দেখে বোঝার উপায় নেই, আর একই অ্যাপের বিভিন্ন সংস্করণেও এটা বদলে গেছে। কোনো কিছু ধরে না নিয়ে ফলাফলটা যাচাই করুন।
আরও খারাপ হলো এমন একটা টুল যা পিক্সেল ঘোরায় কিন্তু পুরোনো মেটাডেটা অপরিবর্তিত রেখে দেয়: ফ্ল্যাগ তখনও বলে "ঘোরাও", অথচ পিক্সেল আগে থেকেই ঘোরানো, ফলে যেসব রিডার ফ্ল্যাগ মেনে চলে সেগুলো ছবিটাকে দুইবার ঘুরিয়ে ফেলে।
আপনার ফাইল কোন অবস্থায় আছে তা বোঝার উপায়
আরও মনোযোগ দিয়ে তাকালেই এর সমাধান হবে না, শুধু প্রিভিউ নয় এমন কিছু যাচাই করলেই তবে বোঝা যাবে।

- আকৃতির সাথে সংখ্যা মিলিয়ে দেখুন। পোর্ট্রেট মনে হওয়া কোনো ছবি যদি ফাইলের প্রোপার্টিজে উচ্চতার চেয়ে চওড়া বলে দেখায়, তাহলে বুঝবেন পিক্সেল আসলে ল্যান্ডস্কেপ আর একটা ফ্ল্যাগ কাজ করছে। কিছু ভিউয়ার এই সংখ্যাগুলোও ঠিক করে দেয়, তাই মিল না-থাকাটাই মিলের চেয়ে বেশি প্রমাণ দেয়।
- ফ্ল্যাগটা সরাসরি পড়ুন। ব্রাউজার, ডেস্কটপ ভিউয়ার আর ফাইল-ম্যানেজারের থাম্বনেইল — এখন প্রায় সবাই এই ট্যাগ মেনে চলে, তাই এগুলোর মধ্যে মিল থাকাটা কিছুই প্রমাণ করে না। মূল ফাইলে নয়, একটা কপিতে কাজ করুন, আর একটা Exif ভিউয়ারে খুলে সরাসরি
Orientationমান পড়ুন।1(যা প্রায়ই "Normal" হিসেবে দেখানো হয়) ছাড়া অন্য যেকোনো মান — তার মানে একটা ফ্ল্যাগ কাজ করছে এবং পিক্সেল সোজা নেই।
ফাইল নিয়ে অন্য কিছু করার আগেই orientation ঠিক করে নিন
remover.bg 25 MB পর্যন্ত PNG, JPEG আর WebP ফাইল গ্রহণ করে এবং ব্যাকগ্রাউন্ড সরিয়ে একটা নতুন ফাইল ফিরিয়ে দেয়। এটা একটা ব্যাকগ্রাউন্ড রিমুভার, ফটো এডিটর নয়: ঘোরানোর কাজটা আপনার ফোনের ফটো এডিটর বা ডিজাইন টুলে, আপলোড করার আগেই, সেরে ফেলা উচিত।
এই ক্রমটা গুরুত্বপূর্ণ, কারণ আপনি আসলে একটা নতুন ফাইল তৈরি করছেন। PNG আর WebP কনটেইনার — দুটোতেই Exif রাখার জায়গা আছে — Google-এর WebP স্পেক অনুযায়ী মেটাডেটা "'EXIF' বা 'XMP ' চাংক-এ" রাখা যায় — কিন্তু আপনি যে এডিটরে ঘুরিয়েছেন সেটা এক্সপোর্টের সময় তাতে মেটাডেটা লিখবে কি না, সেটা আপনার নয়, ওই এডিটরের সিদ্ধান্ত। ঘোরানোটা পিক্সেলেই পাকাপাকি করে দিলে হারানোর মতো আর কোনো ফ্ল্যাগ থাকে না। এই ফরম্যাট নিয়ে বিস্তারিত জানতে আমাদের সরাসরি WebP এক্সপোর্ট করা নিয়ে লেখা নোট দেখুন।
একটা কার্যকর ক্রম:
- গ্যালারিতে রোটেট বোতাম চাপার বদলে, একটা এডিটরে ঘুরিয়ে একটা কপি এক্সপোর্ট করুন।
- সেই এক্সপোর্ট করা কপিতে
Orientationমান যাচাই করুন। - ব্যাকগ্রাউন্ড সরানোর জন্য সেটা আপলোড করুন।
- কাটআউটটা কোনো সলিড রঙের ওপর বা আপনার নিজের ছবির ওপর বসান, আর এটা যদি কোনো সারফেসের ওপর রাখতে হয় তাহলে একটা ড্রপ শ্যাডো যোগ করুন।
যেসব টিম HTTP API দিয়ে বড় আকারে ব্যাচ ব্যাকগ্রাউন্ড রিমুভাল চালায়, তাদের প্রথমেই পাইপলাইনে orientation নরমালাইজ করে নেওয়া উচিত: একটা কাত সোর্স মানে একটা কাত কাটআউট, আর তা হাজার বার পুনরাবৃত্তি হয়। আমাদের Amazon ইমেজ গাইড-এ orientation ব্যাকগ্রাউন্ড সংক্রান্ত নিয়মের বাইরের বিষয়, তবে বাকি সব ঠিক থাকলেও একটা কাত লিস্টিং অযত্নের ছাপ ফেলে।
যে অভ্যাসটা গড়ে তোলা দরকার
প্রিভিউ নয়, ফাইলকে বিশ্বাস করুন। এক্সপোর্ট করে ঘোরান এবং কপিতে একবার Orientation মান পড়ে নিন; তাহলে ছবিটা ব্রাউজার, থাম্বনেইল জেনারেটর আর প্রিন্টারের কিউ — সব জায়গাতেই সোজা থাকবে।


