किसी साधारण इमेज का हर पिक्सल तीन संख्याओं से बताया जाता है: उसमें कितना लाल, हरा और नीला है। इससे पता चलता है कि पिक्सल किस रंग का है, लेकिन यह नहीं कि उसके आर-पार देखा जा सकता है या नहीं। अल्फ़ा चैनल हर पिक्सल की चौथी संख्या है जो ठीक यही करती है: यह अपारदर्शिता (opacity) स्टोर करती है, पूरी तरह ट्रांसपेरेंट से लेकर पूरी तरह अपारदर्शी तक।
जब लोग "ट्रांसपेरेंट बैकग्राउंड वाली 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 भी कहते हैं) रंग को ऐसे स्टोर करता है जैसे पिक्सल पूरी तरह अपारदर्शी हो, और अपारदर्शिता अलग रखता है। आधा ट्रांसपेरेंट शुद्ध लाल पिक्सल लाल 255, हरा 0, नीला 0, अल्फ़ा 128 के रूप में स्टोर होता है।
Premultiplied अल्फ़ा (जिसे associated भी कहते हैं) रंग को पहले से अल्फ़ा से गुणा करके स्टोर करता है। वही पिक्सल लाल 128, हरा 0, नीला 0, अल्फ़ा 128 के रूप में स्टोर होता है। PNG स्पेसिफ़िकेशन के शब्दों में, ऐसी इमेज "पहले से काले बैकग्राउंड पर कंपोज़िट की हुई है"।
कोई फ़ाइल कौन सा तरीक़ा इस्तेमाल करती है, यह फ़ॉर्मैट और सॉफ़्टवेयर पर निर्भर है:
- PNG हमेशा straight अल्फ़ा इस्तेमाल करता है। स्पेसिफ़िकेशन यह साफ़ कहता है, और बताता है कि इससे एडिटर इमेज की ट्रांसपेरेंसी आसानी से बदल सकता है।
- ग्राफ़िक्स पाइपलाइन, गेम इंजन और वीडियो कंपोज़िटिंग टूल अक्सर अंदर ही अंदर premultiplied अल्फ़ा में काम करते हैं, क्योंकि ब्लेंडिंग का गणित आसान होता है और फ़िल्टरिंग बेहतर चलती है।
समस्याएं तब शुरू होती हैं जब एक प्रोग्राम premultiplied मान लिखता है और दूसरा उन्हें straight की तरह पढ़ता है। किनारों के रंग ज़्यादा गहरे आते हैं, जिससे पतली काली आउटलाइन बनती है। उलटी दिशा में किनारे ज़्यादा चमकीले हो जाते हैं। अगर किसी एक टूल के हर कटआउट पर लगातार गहरी किनारी दिखे, तो सबसे पहले premultiplication की गड़बड़ी पर शक करें।
कटआउट में हेलो क्यों आता है
हेलो विषय के चारों ओर दिखने वाली एक किनारी है जो उसका हिस्सा नहीं है। इसकी चार आम वजहें हैं, और हर एक का अपना इलाज है।
1. पुराना बैकग्राउंड किनारे के पिक्सल में घुला है
कैमरा कभी साफ़ सीमा कैप्चर नहीं करता। हरी झाड़ी के सामने बालों की एक लट ऐसे पिक्सल बनाती है जो कुछ बाल और कुछ झाड़ी होते हैं। अगर कटआउट इन पिक्सल के असली रंग रखता है और उन्हें सिर्फ़ अर्ध-ट्रांसपेरेंट बनाता है, तो हरा रंग मिला रहता है। सफ़ेद पर रखने पर विषय के चारों ओर हल्की हरी चमक आ जाती है।
इसका इलाज है कलर डीकंटैमिनेशन: हर किनारे वाले पिक्सल के असली फ़ोरग्राउंड रंग का अनुमान लगाकर उसे लिखना। Photoshop इसे "Select and Mask" वर्कस्पेस में "Decontaminate Colors" कहता है, और ओपन-सोर्स rembg लाइब्रेरी में decontaminate विकल्प यही करता है। यह किनारों के रंग बदलता है, मास्क का आकार कभी नहीं।
2. मास्क बहुत सख़्त है
अगर मास्क में सिर्फ़ पूरी तरह अपारदर्शी और पूरी तरह ट्रांसपेरेंट पिक्सल हैं, तो किनारे दांतेदार दिखते हैं, और असली फोटो की कोई भी antialiasing विषय के चारों ओर बैकग्राउंड रंग की एक पिक्सल की लाइन छोड़ देती है। बालों जैसे नरम विषयों को असली बीच के मानों वाला नरम मास्क चाहिए।
3. ट्रांसपेरेंट पिक्सल में छिपे रंग
straight-अल्फ़ा फ़ाइल में शून्य अल्फ़ा वाले पिक्सल के भी लाल, हरे और नीले मान होते हैं। आप उन्हें देख नहीं सकते, लेकिन इमेज को रीसाइज़ या ब्लर करने से पड़ोसी पिक्सल मिलते हैं, और अगर वे छिपे रंग सफ़ेद या काले हैं तो वे दिखने वाले किनारे में रिस जाते हैं। अच्छी इमेज लाइब्रेरी रीसाइज़ से पहले premultiply करके और बाद में वापस बदलकर इससे बचती हैं।
4. इमेज को किसी रंग पर फ़्लैट कर दिया गया
GIF और पैलेट PNG अक्सर सिर्फ़ हां-या-ना वाली ट्रांसपेरेंसी सपोर्ट करते हैं, इसलिए टूल सेव करने से पहले किनारे को किसी मैट रंग, आम तौर पर सफ़ेद, पर antialias करते हैं। ऐसी इमेज सफ़ेद पर ठीक दिखती है और किसी भी गहरे रंग पर सफ़ेद झालर दिखाती है। अगर आपका कटआउट गहरे बैकग्राउंड पर रहेगा, तो उसे पूरे अल्फ़ा के साथ एक्सपोर्ट करें।
मास्क, मैट और अल्फ़ा: शब्दावली
ये शब्द एक-दूसरे में घुले हैं और ढीले ढंग से इस्तेमाल होते हैं। आम तौर पर इनका मतलब यह होता है:
- अल्फ़ा चैनल: इमेज फ़ाइल के अंदर स्टोर अपारदर्शिता के मान, हर पिक्सल का एक।
- मास्क: एक ग्रेस्केल इमेज जो तय करती है कि दूसरी इमेज के कौन से हिस्से दिखें। Photoshop के लेयर मास्क में सफ़ेद दिखाता है और काला छिपाता है, और ग्रे आंशिक रूप से दिखते हैं। मास्क को असली पिक्सल छुए बिना एडिट किया जा सकता है, इसीलिए प्रोफ़ेशनल बैकग्राउंड मिटाने के बजाय मास्क से हटाते हैं।
- मैट: इसी विचार के लिए फ़िल्म और कंपोज़िटिंग का शब्द, एक ग्रेस्केल इमेज जो तय करती है कि क्या रखा जाए। "मैटिंग" बालों जैसे मुश्किल किनारों के लिए नरम, सटीक मैट निकालने की समस्या है।
- ट्राइमैप: एक मोटा तीन-हिस्सों वाला नक़्शा (पक्का फ़ोरग्राउंड, पक्का बैकग्राउंड, अनिश्चित) जिसे कुछ मैटिंग एल्गोरिदम शुरुआती बिंदु के रूप में इस्तेमाल करते हैं।
- बाइनरी या हार्ड मास्क: सिर्फ़ काला और सफ़ेद, कोई ग्रे नहीं। डिब्बों और लोगो के लिए ठीक, बालों के लिए कमज़ोर।
- कटआउट: तैयार नतीजा, विषय के रंग और एक अल्फ़ा चैनल।
मास्क और अल्फ़ा चैनल में एक ही जानकारी होती है। कई टूल दोनों में से कोई भी एक्सपोर्ट करने देते हैं: अंदर बने अल्फ़ा वाली ट्रांसपेरेंट 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 का क्या मतलब है?
लाल (Red), हरा (Green), नीला (Blue) और अल्फ़ा। पहले तीन पिक्सल का रंग बताते हैं और चौथा उसकी अपारदर्शिता, 0 (पूरी तरह ट्रांसपेरेंट) से लेकर पूरी अपारदर्शिता के अधिकतम मान (8-बिट इमेज में 255) तक।
Straight और premultiplied अल्फ़ा में क्या अंतर है?
Straight अल्फ़ा पिक्सल का पूरा रंग और उसकी अपारदर्शिता अलग-अलग स्टोर करता है। Premultiplied अल्फ़ा रंग को पहले से अपारदर्शिता से गुणा करके स्टोर करता है, जैसे उसे काले पर कंपोज़िट किया गया हो। PNG हमेशा straight अल्फ़ा इस्तेमाल करता है; कई रेंडरिंग और वीडियो टूल अंदर premultiplied इस्तेमाल करते हैं।
मेरे कटआउट के चारों ओर सफ़ेद या रंगीन आउटलाइन क्यों है?
आम तौर पर पुराना बैकग्राउंड अब भी किनारे के पिक्सल में मिला होता है, या सेव करने से पहले इमेज को सफ़ेद पर antialias किया गया था। किनारों के रंग डीकंटैमिनेट करना, नरम मास्क इस्तेमाल करना, और मैट रंग के बजाय पूरे अल्फ़ा के साथ एक्सपोर्ट करना ज़्यादातर मामले ठीक कर देता है।
क्या मास्क और अल्फ़ा चैनल एक ही हैं?
इनमें एक ही जानकारी होती है: हर पिक्सल का एक ग्रेस्केल मान जो बताता है कि वह कितना दिखता है। अल्फ़ा चैनल इमेज फ़ाइल के अंदर स्टोर होता है; मास्क आम तौर पर अलग ग्रेस्केल इमेज या एडिटर में लेयर मास्क होता है।
कैसे पता करूं कि PNG सच में ट्रांसपेरेंट है?
उसे गहरे और हल्के बैकग्राउंड पर रखें और देखें कि बैकग्राउंड आर-पार दिखता है या नहीं। या ImageMagick का identify %[opaque] के साथ चलाएं, या Pillow में अल्फ़ा चैनल का न्यूनतम मान देखें; न्यूनतम 255 का मतलब है कि कुछ भी ट्रांसपेरेंट नहीं है।
अपनी इमेज पर आज़माएं
नए अकाउंट को 50 मुफ़्त क्रेडिट मिलते हैं। हर इमेज के लिए 1 क्रेडिट, कोई सब्सक्रिप्शन नहीं, और क्रेडिट कभी खत्म नहीं होते।
बैकग्राउंड हटाएंस्रोत
- 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