সাধারণ ছবির প্রতিটি পিক্সেল তিনটি সংখ্যায় বর্ণনা করা হয়: তাতে কতটা লাল, সবুজ আর নীল আছে। পিক্সেলটি কোন রঙের তা বলার জন্য এটুকু যথেষ্ট, কিন্তু তার ভেতর দিয়ে দেখা যায় কি না তা নয়। আলফা চ্যানেল প্রতিটি পিক্সেলের চতুর্থ একটি সংখ্যা যা ঠিক এই কাজটি করে: এটি অস্বচ্ছতা রাখে, পুরো ট্রান্সপারেন্ট থেকে পুরো অস্বচ্ছ পর্যন্ত।
মানুষ যখন "ট্রান্সপারেন্ট ব্যাকগ্রাউন্ডের PNG" বলেন, তখন বোঝান আলফা চ্যানেলসহ এমন একটি ছবি যার ব্যাকগ্রাউন্ডের পিক্সেলের আলফা শূন্য। এই গাইড ব্যাখ্যা করে সংখ্যাটি কীভাবে কাজ করে, সফটওয়্যার এটি কোন দুই উপায়ে রাখে, কিনারা কেন ভুল হয়, আর একটি ফাইলে আসলে কী আছে তা কীভাবে যাচাই করবেন।
RGBA: প্রতি পিক্সেলে চারটি চ্যানেল
MDN আলফা চ্যানেলের সংজ্ঞা সহজভাবে দেয়: রং তৈরি হয় চ্যানেল দিয়ে (লাল, সবুজ আর নীল), আর এমন রং বোঝাতে "যার ভেতর দিয়ে কিছুটা ব্যাকগ্রাউন্ড দেখা যায়", একটি চতুর্থ চ্যানেল যোগ করা হয়। চারটিই থাকা ছবিকে বলে RGBA।
মানটি কয়েকভাবে লেখা যায়, আর সবগুলোর অর্থ এক:
| লেখার ধরন | পুরো ট্রান্সপারেন্ট | অর্ধেক ট্রান্সপারেন্ট | পুরো অস্বচ্ছ |
|---|---|---|---|
| 8-বিট পূর্ণসংখ্যা (বেশিরভাগ ইমেজ ফাইল) | 0 | 128 | 255 |
| 16-বিট পূর্ণসংখ্যা (16-বিট PNG) | 0 | 32768 | 65535 |
| ভগ্নাংশ (কম্পোজিটিংয়ের গণিত, CSS) | 0 | 0.5 | 1 |
| শতাংশ (CSS) | 0% | 50% | 100% |
Hex সাফিক্স (CSS #rrggbbaa) | 00 | 80 | ff |
PNG স্পেসিফিকেশন বিষয়টি নিখুঁতভাবে বলে: আলফা মান শূন্য মানে পুরো ট্রান্সপারেন্সি, বিট ডেপথের সর্বোচ্চ মান মানে পুরো অস্বচ্ছতা, আর মাঝের মানগুলো আংশিক ট্রান্সপারেন্ট পিক্সেল "যা একটি ব্যাকগ্রাউন্ড ছবির ওপর কম্পোজিট করা যায়"।
এই মাঝের মানগুলোই আসল বিষয়। ভালো কাটআউট মানে শুধু "সাবজেক্ট অস্বচ্ছ, ব্যাকগ্রাউন্ড ট্রান্সপারেন্ট" নয়। কিনারার পিক্সেলগুলো, বিশেষ করে চুল, লোম, কাপড়, কাচ আর মোশন ব্লারে, আংশিক ট্রান্সপারেন্ট থাকে, আর এতেই নতুন ব্যাকগ্রাউন্ডে সাবজেক্ট কাঁচি দিয়ে কাটা না দেখিয়ে স্বাভাবিক দেখায়।
ট্রান্সপারেন্ট পিক্সেল কীভাবে আঁকা হয়
কোনো অ্যাপ যখন আপনার ছবি অন্য কিছুর ওপর বসায়, তখন প্রতিটি পিক্সেলকে পেছনের জিনিসের সঙ্গে মেশায়। W3C Compositing and Blending স্পেসিফিকেশন মূল সূত্রটি দেয়:
result = Cs x as + Cb x ab x (1 - as)
Cs, as = color and alpha of your image (the source)
Cb, ab = color and alpha of what is behind it (the backdrop)অস্বচ্ছ ব্যাকড্রপের সাধারণ ক্ষেত্রে এটি একটি ওজনযুক্ত গড়ে দাঁড়ায়। আলফা 0.3-এর একটি পিক্সেল নিজের রঙের 30% দেয় আর ব্যাকগ্রাউন্ডের 70% দেখা যেতে দেয়।
Straight বনাম premultiplied আলফা
আংশিক ট্রান্সপারেন্ট পিক্সেলের রং রাখার দুটি উপায় আছে, আর এ দুটি গুলিয়ে ফেলা গাঢ় বা উজ্জ্বল ফ্রিঞ্জের একটি পুরনো কারণ।
Straight আলফা (unassociated বা non-premultiplied নামেও পরিচিত) রং এমনভাবে রাখে যেন পিক্সেলটি পুরো অস্বচ্ছ, আর অস্বচ্ছতা আলাদা রাখে। অর্ধেক ট্রান্সপারেন্ট খাঁটি লাল পিক্সেল রাখা হয় red 255, green 0, blue 0, alpha 128 হিসেবে।
Premultiplied আলফা (associated নামেও পরিচিত) রংকে আগেই আলফা দিয়ে গুণ করে রাখে। একই পিক্সেল রাখা হয় red 128, green 0, blue 0, alpha 128 হিসেবে। PNG স্পেসিফিকেশনের ভাষায়, এমন ছবি "আগেই একটি কালো ব্যাকগ্রাউন্ডের ওপর কম্পোজিট করা"।
কোন ফাইল কোনটি ব্যবহার করে তা ফরম্যাট আর সফটওয়্যারের ওপর নির্ভর করে:
- PNG সবসময় straight আলফা ব্যবহার করে। স্পেসিফিকেশন স্পষ্টভাবে এটা বলে, আর উল্লেখ করে যে এতে এডিটর সহজে ছবির ট্রান্সপারেন্সি বদলাতে পারে।
- গ্রাফিক্স পাইপলাইন, গেম ইঞ্জিন আর ভিডিও কম্পোজিটিং টুল প্রায়ই ভেতরে premultiplied আলফায় কাজ করে, কারণ ব্লেন্ডিংয়ের গণিত সহজ আর ফিল্টারিং ভালো কাজ করে।
সমস্যা শুরু হয় যখন একটি প্রোগ্রাম premultiplied মান লেখে আর অন্যটি সেগুলো straight হিসেবে পড়ে। কিনারার রং বেশি গাঢ় হয়ে আসে, ফলে পাতলা কালো আউটলাইন তৈরি হয়। উল্টোটা হলে কিনারা বেশি উজ্জ্বল হয়। একটি টুলের প্রতিটি কাটআউটে একই রকম গাঢ় কিনারা দেখলে প্রথমে premultiplication-এর অমিল সন্দেহ করুন।
কাটআউটে কেন হ্যালো আসে
হ্যালো হলো সাবজেক্টের চারপাশে চোখে পড়ার মতো একটি কিনারা যা সাবজেক্টের অংশ নয়। চারটি সাধারণ কারণ আছে, আর প্রতিটির নিজস্ব সমাধান আছে।
1. পুরনো ব্যাকগ্রাউন্ড কিনারার পিক্সেলে মিশে আছে
ক্যামেরা কখনো পরিষ্কার সীমারেখা ধরে না। সবুজ ঝোপের সামনে একগুচ্ছ চুল এমন পিক্সেল তৈরি করে যা আংশিক চুল আর আংশিক ঝোপ। কাটআউট যদি ওই পিক্সেলের আসল রং রেখে শুধু আধা-ট্রান্সপারেন্ট করে, তাহলে সবুজ মিশে থাকে। সাদায় বসালে সাবজেক্টের চারপাশে হালকা সবুজ আভা দেখা যায়।
সমাধান হলো কালার ডিকনটামিনেশন: প্রতিটি কিনারার পিক্সেলের আসল ফোরগ্রাউন্ড রং অনুমান করে সেটি লেখা। Photoshop-এ “Select and Mask” ওয়ার্কস্পেসে এটির নাম “Decontaminate Colors”, আর ওপেন-সোর্স rembg লাইব্রেরির decontaminate অপশন একই কাজ করে। এটি কিনারার রং বদলায়, মাস্কের আকার কখনো নয়।
2. মাস্ক খুব শক্ত
মাস্কে যদি শুধু পুরো অস্বচ্ছ আর পুরো ট্রান্সপারেন্ট পিক্সেল থাকে, কিনারা খাঁজকাটা দেখায়, আর আসল ছবির যেকোনো অ্যান্টিএলিয়াসিং সাবজেক্টের চারপাশে এক পিক্সেলের ব্যাকগ্রাউন্ড রঙের রেখা রেখে যায়। চুলের মতো নরম সাবজেক্টে সত্যিকারের মাঝের মানসহ নরম মাস্ক লাগে।
3. ট্রান্সপারেন্ট পিক্সেলে লুকানো রং
Straight-আলফা ফাইলে আলফা শূন্যের পিক্সেলেরও লাল, সবুজ আর নীল মান থাকে। আপনি দেখতে পান না, কিন্তু রিসাইজ বা ব্লার করলে পাশাপাশি পিক্সেল মেশে, আর ওই লুকানো রং সাদা বা কালো হলে দৃশ্যমান কিনারায় চুঁইয়ে আসে। ভালো ইমেজ লাইব্রেরি রিসাইজের আগে premultiply করে আর পরে ফিরিয়ে এনে এটা এড়ায়।
4. ছবিটি একটি রঙের ওপর ফ্ল্যাটেন করা হয়েছিল
GIF আর প্যালেট PNG প্রায়ই শুধু চালু-বা-বন্ধ ট্রান্সপারেন্সি সাপোর্ট করে, তাই টুলগুলো সেভের আগে কিনারাকে একটি ম্যাট রঙের, সাধারণত সাদার, সঙ্গে অ্যান্টিএলিয়াস করে। সেই ছবি সাদায় ঠিক দেখায় আর গাঢ় যেকোনো কিছুর ওপর সাদা ফ্রিঞ্জ দেখায়। কাটআউট গাঢ় ব্যাকগ্রাউন্ডে বসলে বরং পূর্ণ আলফাসহ এক্সপোর্ট করুন।
মাস্ক, ম্যাট আর আলফা: শব্দভান্ডার
এই শব্দগুলো একে অপরের সঙ্গে মেলে আর ঢিলেঢালাভাবে ব্যবহার হয়। সাধারণত এগুলো যা বোঝায়:
- আলফা চ্যানেল: ইমেজ ফাইলের ভেতরে রাখা অস্বচ্ছতার মান, প্রতি পিক্সেলে একটি।
- মাস্ক: একটি গ্রেস্কেল ছবি যা নিয়ন্ত্রণ করে অন্য ছবির কোন অংশ দেখা যাবে। Photoshop-এর লেয়ার মাস্কে সাদা দেখায় আর কালো লুকায়, আর ধূসর আংশিক দেখা যায়। আসল পিক্সেলে হাত না দিয়েই মাস্ক এডিট করা যায়, তাই পেশাদাররা মুছে না ফেলে মাস্ক দিয়ে ব্যাকগ্রাউন্ড রিমুভ করেন।
- ম্যাট: একই ধারণার জন্য ফিল্ম আর কম্পোজিটিংয়ের শব্দ, একটি গ্রেস্কেল ছবি যা ঠিক করে কী রাখা হবে। "Matting" হলো চুলের মতো কঠিন কিনারার জন্য নরম, নিখুঁত ম্যাট হিসাব করার সমস্যা।
- ট্রাইম্যাপ: একটি মোটামুটি তিন-অঞ্চলের ম্যাপ (নিশ্চিত ফোরগ্রাউন্ড, নিশ্চিত ব্যাকগ্রাউন্ড, অনিশ্চিত) যা কিছু ম্যাটিং অ্যালগরিদম শুরুর বিন্দু হিসেবে ব্যবহার করে।
- বাইনারি বা হার্ড মাস্ক: শুধু কালো আর সাদা, কোনো ধূসর নেই। বাক্স আর লোগোর জন্য ঠিক আছে, চুলের জন্য খারাপ।
- কাটআউট: তৈরি ফলাফল, সাবজেক্টের রং আর একটি আলফা চ্যানেল।
মাস্ক আর আলফা চ্যানেল একই তথ্য রাখে। অনেক টুল যেকোনোটি এক্সপোর্ট করতে দেয়: আলফা ভেতরে থাকা একটি ট্রান্সপারেন্ট PNG, অথবা আলাদা একটি সাদা-কালো মাস্ক ছবি যা এডিটর বা ভিডিও টুলে নিজেই প্রয়োগ করতে পারেন।
কোন ফরম্যাট আলফা রাখতে পারে
| ফরম্যাট | আলফা সাপোর্ট |
|---|---|
| PNG | পূর্ণ আলফা (8 বা 16 বিট), বা একটি ট্রান্সপারেন্ট প্যালেট রং |
| WebP | পূর্ণ আলফা, lossless আর lossy দুই মোডেই |
| AVIF | পূর্ণ আলফা |
| GIF | শুধু চালু বা বন্ধ: প্যালেটের একটি রং ট্রান্সপারেন্ট চিহ্নিত |
| JPEG | নেই |
এই ফরম্যাটগুলোর পূর্ণ তুলনার জন্য দেখুন PNG বনাম JPEG বনাম WebP।
ছবিতে ট্রান্সপারেন্সি আছে কি না কীভাবে যাচাই করবেন
.png-এ শেষ হওয়া ফাইল মানেই ট্রান্সপারেন্সি নয়। অনেক PNG পুরো অস্বচ্ছ, আর অনলাইনে পাওয়া কিছু "ট্রান্সপারেন্ট" ছবি আসলে JPEG যার পিক্সেলে ধূসর-সাদা চেকারবোর্ড আঁকা। যাচাইয়ের নির্ভরযোগ্য উপায়গুলো এখানে।
চোখে দেখে
ছবিটি একটি গাঢ় আর একটি হালকা ব্যাকগ্রাউন্ডে বসান, যেমন একটি স্লাইড বা ডিজাইন টুলে। আসল কাটআউটে দুই ক্ষেত্রেই সাবজেক্টের চারপাশে ব্যাকগ্রাউন্ডের রং দেখা যায়। এরপরও চেকারবোর্ড দেখলে সেটি ছবির অংশ, ট্রান্সপারেন্সি নয়।
ImageMagick দিয়ে
# Does the file have an alpha channel at all?
identify -format "%A\n" photo.png
# Is it fully opaque anyway? (true means no visible transparency)
identify -format "%[opaque]\n" photo.png%A ট্রান্সপারেন্সি চ্যানেলের কথা জানায় (ঠিক কোন শব্দ প্রিন্ট হয় তা ImageMagick 6 আর 7-এ আলাদা), আর %[opaque] হিসাব করে প্রতিটি পিক্সেল পুরো অস্বচ্ছ কি না। আপনি চান একটি আলফা চ্যানেল আর false।
Python আর Pillow দিয়ে
from PIL import Image
im = Image.open("photo.png")
print(im.mode) # RGBA or LA means an alpha channel
print(im.has_transparency_data) # True if the file carries any transparency info
if "A" in im.getbands():
lo, hi = im.getchannel("A").getextrema()
print("alpha range:", lo, hi) # lo == 255 means nothing is transparentExtrema যাচাই সেই সাধারণ ক্ষেত্রটি ধরে ফেলে যেখানে RGBA ফাইলের প্রতিটি পিক্সেল অস্বচ্ছ।
প্ল্যাটফর্ম যখন আলফা উপেক্ষা করে
কিছু জায়গা ট্রান্সপারেন্সি মুছে দেয় বা উপেক্ষা করে। Etsy বলে ট্রান্সপারেন্ট PNG সাপোর্ট হয় না আর ট্রান্সপারেন্ট অংশ কালো দেখাতে পারে, আর Amazon ও Walmart-এর মতো মার্কেটপ্লেস এমনিতেই মেইন ইমেজ খাঁটি সাদায় চায়। এসব ক্ষেত্রে কাটআউট নিজেই ব্যাকগ্রাউন্ড রঙের ওপর ফ্ল্যাটেন করুন যাতে ফলাফল আপনার নিয়ন্ত্রণে থাকে। নিজের ওয়েবসাইটে, স্লাইডে আর ডিজাইন টুলে আলফা রেখে দিন।
দ্রুত পরিষ্কার আলফা চ্যানেল পাওয়া
শক্ত মাস্কের বদলে নরম কিনারার কাটআউট লাগলে removebackground.dev পূর্ণ আলফা চ্যানেলসহ ট্রান্সপারেন্ট PNG বা WebP ফাইল তৈরি করে, আর এর API আলাদাভাবে গ্রেস্কেল মাস্কও দিতে পারে।
প্রশ্ন
RGBA মানে কী?
লাল, সবুজ, নীল আর আলফা। প্রথম তিনটি পিক্সেলের রং বর্ণনা করে আর চতুর্থটি তার অস্বচ্ছতা, 0 (পুরো ট্রান্সপারেন্ট) থেকে সর্বোচ্চ মান (8-বিট ছবিতে 255) পর্যন্ত, যা পুরো অস্বচ্ছ।
Straight আর premultiplied আলফার পার্থক্য কী?
Straight আলফা পিক্সেলের পুরো রং আর তার অস্বচ্ছতা আলাদা রাখে। Premultiplied আলফা রংকে আগেই অস্বচ্ছতা দিয়ে গুণ করে রাখে, যেন কালোর ওপর কম্পোজিট করা হয়েছে। PNG সবসময় straight আলফা ব্যবহার করে; অনেক রেন্ডারিং আর ভিডিও টুল ভেতরে premultiplied ব্যবহার করে।
আমার কাটআউটের চারপাশে সাদা বা রঙিন আউটলাইন কেন?
সাধারণত পুরনো ব্যাকগ্রাউন্ড এখনো কিনারার পিক্সেলে মিশে আছে, অথবা সেভের আগে ছবিটি সাদার সঙ্গে অ্যান্টিএলিয়াস করা হয়েছিল। কিনারার রং ডিকনটামিনেট করা, নরম মাস্ক ব্যবহার করা, আর ম্যাট রঙের বদলে পূর্ণ আলফাসহ এক্সপোর্ট করলে বেশিরভাগ ক্ষেত্রে সমাধান হয়।
মাস্ক আর আলফা চ্যানেল কি একই?
দুটি একই তথ্য রাখে: প্রতি পিক্সেলে একটি গ্রেস্কেল মান, যা বলে পিক্সেলটি কতটা দেখা যাবে। আলফা চ্যানেল ইমেজ ফাইলের ভেতরে থাকে; মাস্ক সাধারণত আলাদা একটি গ্রেস্কেল ছবি বা এডিটরের লেয়ার মাস্ক।
একটি PNG সত্যিই ট্রান্সপারেন্ট কি না কীভাবে বুঝব?
এটি একটি গাঢ় আর একটি হালকা ব্যাকগ্রাউন্ডে বসিয়ে দেখুন ব্যাকগ্রাউন্ড দেখা যায় কি না। অথবা ImageMagick-এর identify %[opaque] দিয়ে চালান, বা Pillow-তে আলফা চ্যানেলের সর্বনিম্ন মান দেখুন; সর্বনিম্ন 255 মানে কিছুই ট্রান্সপারেন্ট নয়।
নিজের ছবিতে চেষ্টা করুন
নতুন অ্যাকাউন্ট 50টি ফ্রি ক্রেডিট পায়। প্রতি ছবিতে ১ ক্রেডিট, কোনো সাবস্ক্রিপশন নেই, আর ক্রেডিটের মেয়াদ ফুরায় না।
ব্যাকগ্রাউন্ড সরানসূত্র
- MDN: Alpha (alpha channel) glossary entry
- W3C: Portable Network Graphics (PNG) Specification (Third Edition)
- W3C: Compositing and Blending Level 1, simple alpha compositing
- MDN: Image file type and format guide
- Adobe Help: Select and Mask in Photoshop
- Adobe: Remove background with AI in Photoshop (layer masks)
- rembg README: color decontamination and edge modes
- ImageMagick: Format and print image properties (escapes)
- Pillow: Image module reference
- Etsy Help: Requirements and best practices for images in your Etsy shop