Każdy piksel zwykłego obrazu opisują trzy liczby: ile zawiera czerwieni, zieleni i błękitu. To wystarczy, żeby określić kolor piksela, ale nie to, czy da się przez niego coś zobaczyć. Kanał alfa to czwarta liczba dla każdego piksela, która robi właśnie to: przechowuje krycie, od całkowitej przezroczystości do całkowitej nieprzezroczystości.
Gdy ktoś mówi o "PNG z przezroczystym tłem", ma na myśli obraz z kanałem alfa, w którym piksele tła mają wartość alfa równą zero. Ten poradnik wyjaśnia, jak działa ta liczba, na jakie dwa sposoby programy ją zapisują, dlaczego krawędzie wychodzą źle i jak sprawdzić, co naprawdę zawiera plik.
RGBA: cztery kanały na piksel
MDN definiuje kanał alfa prosto: kolory składają się z kanałów (czerwonego, zielonego i niebieskiego), a żeby opisać kolor, "przez który w pewnym stopniu widać tło", dodaje się czwarty kanał. Obraz ze wszystkimi czterema nazywa się RGBA.
Wartość można zapisać na kilka sposobów i wszystkie znaczą to samo:
| Zapis | Całkowicie przezroczysty | W połowie przezroczysty | Całkowicie nieprzezroczysty |
|---|---|---|---|
| Liczba 8-bitowa (większość plików graficznych) | 0 | 128 | 255 |
| Liczba 16-bitowa (16-bitowy PNG) | 0 | 32768 | 65535 |
| Ułamek (obliczenia kompozycji, CSS) | 0 | 0,5 | 1 |
| Procent (CSS) | 0% | 50% | 100% |
Przyrostek hex (CSS #rrggbbaa) | 00 | 80 | ff |
Specyfikacja PNG ujmuje to precyzyjnie: wartość alfa równa zero oznacza pełną przezroczystość, maksymalna wartość dla danej głębi bitowej oznacza pełne krycie, a wartości pośrednie to częściowo przezroczyste piksele, "które można nałożyć na obraz tła".
Najważniejsze są właśnie te wartości pośrednie. Dobre wycięcie to nie tylko "obiekt nieprzezroczysty, tło przezroczyste". Piksele wzdłuż krawędzi, zwłaszcza we włosach, sierści, tkaninach, szkle i przy rozmyciu ruchu, są częściowo przezroczyste i to dzięki nim obiekt wygląda naturalnie na nowym tle, zamiast wyglądać na wycięty nożyczkami.
Jak rysowany jest przezroczysty piksel
Gdy aplikacja umieszcza twój obraz na czymś innym, miesza każdy piksel z tym, co jest pod nim. Specyfikacja W3C Compositing and Blending podaje podstawowy wzór:
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)W typowym przypadku nieprzezroczystego tła wzór sprowadza się do średniej ważonej. Piksel z alfą 0,3 wnosi 30% własnego koloru i przepuszcza 70% tła.
Alfa prosta a premultiplikowana
Kolor częściowo przezroczystego piksela można zapisać na dwa sposoby, a pomylenie ich to klasyczne źródło ciemnych lub jasnych obwódek.
Alfa prosta (nazywana też niepowiązaną lub niepremultiplikowaną) zapisuje kolor tak, jakby piksel był całkowicie nieprzezroczysty, a krycie przechowuje osobno. W połowie przezroczysty czysto czerwony piksel zapisany jest jako czerwony 255, zielony 0, niebieski 0, alfa 128.
Alfa premultiplikowana (nazywana też powiązaną) zapisuje kolor już pomnożony przez alfę. Ten sam piksel zapisany jest jako czerwony 128, zielony 0, niebieski 0, alfa 128. Jak ujmuje to specyfikacja PNG, taki obraz "jest już nałożony na czarne tło".
To, której używa plik, zależy od formatu i programu:
- PNG zawsze używa alfy prostej. Specyfikacja mówi to wprost i zaznacza, że dzięki temu edytor może łatwo zmienić przezroczystość obrazu.
- Potoki graficzne, silniki gier i narzędzia do kompozycji wideo często wewnętrznie pracują na alfie premultiplikowanej, bo obliczenia mieszania są prostsze, a filtrowanie działa lepiej.
Problemy zaczynają się, gdy jeden program zapisuje wartości premultiplikowane, a drugi odczytuje je jako proste. Kolory wzdłuż krawędzi wychodzą za ciemne i powstaje cienki czarny kontur. W odwrotnej sytuacji krawędzie są za jasne. Jeśli na każdym wycięciu z jednego narzędzia widzisz taką samą ciemną obwódkę, w pierwszej kolejności podejrzewaj niezgodność premultiplikacji.
Skąd obwódki na wycięciach
Obwódka (halo) to widoczny brzeg wokół obiektu, który do niego nie należy. Ma cztery typowe przyczyny i każda ma własne rozwiązanie.
1. Stare tło jest wtopione w piksele krawędzi
Aparat nigdy nie rejestruje czystej granicy. Kosmyk włosów na tle zielonego żywopłotu daje piksele, które są częściowo włosem, a częściowo żywopłotem. Jeśli wycięcie zachowa oryginalne kolory tych pikseli i tylko uczyni je półprzezroczystymi, zieleń zostaje w nich wymieszana. Na białym tle obiekt ma wtedy delikatną zieloną poświatę.
Rozwiązaniem jest dekontaminacja kolorów: oszacowanie prawdziwego koloru pierwszego planu dla każdego piksela krawędzi i zapisanie go w miejsce starego. W Photoshopie ta funkcja nazywa się Odkażanie kolorów (Decontaminate Colors) i znajduje się w obszarze roboczym Zaznacz i maskuj, a otwartoźródłowa biblioteka rembg ma opcję decontaminate, która robi to samo. Zmienia ona kolory krawędzi, nigdy kształt maski.
2. Maska jest za twarda
Jeśli maska ma tylko piksele całkowicie nieprzezroczyste i całkowicie przezroczyste, krawędzie wyglądają na poszarpane, a wygładzanie krawędzi z oryginalnego zdjęcia zostawia wokół obiektu jednopikselową linię w kolorze tła. Miękkie obiekty, takie jak włosy, potrzebują miękkiej maski z prawdziwymi wartościami pośrednimi.
3. Ukryte kolory w przezroczystych pikselach
Piksel z alfą równą zero w pliku z alfą prostą nadal ma wartości czerwieni, zieleni i błękitu. Nie widać ich, ale skalowanie lub rozmywanie obrazu miesza sąsiednie piksele i jeśli te ukryte kolory są białe lub czarne, przenikają do widocznej krawędzi. Dobre biblioteki graficzne unikają tego, premultiplikując obraz przed skalowaniem i konwertując go z powrotem po nim.
4. Obraz został spłaszczony na kolorze
GIF-y i PNG z paletą często obsługują tylko przezroczystość typu włącz lub wyłącz, więc narzędzia przed zapisem wygładzają krawędź względem koloru matte, zwykle białego. Taki obraz wygląda dobrze na białym tle, a na wszystkim ciemniejszym pokazuje białą obwódkę. Jeśli wycięcie ma leżeć na ciemnym tle, wyeksportuj je z pełnym kanałem alfa.
Maski, matte i alfa: słowniczek
Te pojęcia się zazębiają i bywają używane dość swobodnie. Oto co zwykle znaczą:
- Kanał alfa: wartości krycia zapisane w pliku obrazu, po jednej na piksel.
- Maska: obraz w skali szarości, który decyduje, które części innego obrazu są widoczne. W maskach warstw w Photoshopie biel odsłania, czerń zakrywa, a szarości są częściowo widoczne. Maskę można edytować bez naruszania oryginalnych pikseli, dlatego profesjonaliści usuwają tło za pomocą masek, a nie gumki.
- Matte: termin z filmu i kompozycji na to samo, obraz w skali szarości określający, co zostaje. "Matting" to problem obliczania miękkich, dokładnych matte dla trudnych krawędzi, takich jak włosy.
- Trimapa: zgrubna mapa z trzema strefami (na pewno pierwszy plan, na pewno tło, niepewne), od której zaczynają niektóre algorytmy mattingu.
- Maska binarna lub twarda: tylko czerń i biel, bez szarości. Wystarcza przy pudełkach i logo, słabo radzi sobie z włosami.
- Wycięcie: gotowy efekt, czyli kolory obiektu plus kanał alfa.
Maska i kanał alfa zawierają te same informacje. Wiele narzędzi pozwala wyeksportować jedno lub drugie: PNG z przezroczystym tłem z wbudowaną alfą albo osobny czarno-biały obraz maski, który możesz samodzielnie nałożyć w edytorze lub programie do wideo.
Które formaty mogą przechowywać alfę
| Format | Obsługa alfy |
|---|---|
| PNG | Pełna alfa (8 lub 16 bitów) albo jeden przezroczysty kolor z palety |
| WebP | Pełna alfa, zarówno w trybie bezstratnym, jak i stratnym |
| AVIF | Pełna alfa |
| GIF | Tylko włącz lub wyłącz: jeden kolor z palety oznaczony jako przezroczysty |
| JPEG | Brak |
Pełne porównanie tych formatów znajdziesz w poradniku PNG, JPEG czy WebP.
Jak sprawdzić, czy obraz ma przezroczystość
Rozszerzenie .png nie dowodzi przezroczystości. Wiele plików PNG jest całkowicie nieprzezroczystych, a niektóre "przezroczyste" obrazy znalezione w sieci to pliki JPEG z szaro-białą szachownicą namalowaną w pikselach. Oto niezawodne sposoby sprawdzenia.
Na oko
Umieść obraz na ciemnym i na jasnym tle, na przykład w prezentacji lub narzędziu graficznym. Prawdziwe wycięcie w obu przypadkach pokazuje kolor tła wokół obiektu. Jeśli nadal widzisz szachownicę, jest ona częścią obrazu, a nie przezroczystością.
Za pomocą 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 zgłasza kanał przezroczystości (dokładne słowo różni się między ImageMagick 6 i 7), a %[opaque] oblicza, czy każdy piksel jest całkowicie nieprzezroczysty. Chcesz zobaczyć kanał alfa i false.
Za pomocą Pythona i 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 transparentSprawdzenie wartości skrajnych wyłapuje częsty przypadek pliku RGBA, w którym każdy piksel jest nieprzezroczysty.
Gdy platforma ignoruje alfę
Niektóre miejsca usuwają lub ignorują przezroczystość. Etsy podaje, że przezroczyste PNG nie są obsługiwane, a przezroczyste obszary mogą wyświetlać się na czarno, a marketplace'y takie jak Amazon i Walmart i tak wymagają zdjęć głównych na czysto białym tle. W takich przypadkach spłaszcz wycięcie na kolorze tła samodzielnie, żeby mieć kontrolę nad efektem. Na własnej stronie, w prezentacjach i w narzędziach graficznych zachowaj alfę.
Szybki sposób na czysty kanał alfa
Jeśli potrzebujesz wycięć z miękkimi krawędziami zamiast twardych masek, removebackground.dev tworzy pliki PNG lub WebP z przezroczystym tłem i pełnym kanałem alfa, a jego API może też zwrócić samą maskę w skali szarości.
Pytania
Co oznacza RGBA?
Czerwony, zielony, niebieski i alfa (red, green, blue, alpha). Pierwsze trzy opisują kolor piksela, a czwarty jego krycie, od 0 (całkowicie przezroczysty) do wartości maksymalnej (255 w obrazach 8-bitowych) oznaczającej pełne krycie.
Czym różni się alfa prosta od premultiplikowanej?
Alfa prosta przechowuje pełny kolor piksela i jego krycie osobno. Alfa premultiplikowana przechowuje kolor już pomnożony przez krycie, tak jakby został nałożony na czerń. PNG zawsze używa alfy prostej; wiele narzędzi do renderowania i wideo wewnętrznie używa premultiplikowanej.
Dlaczego moje wycięcie ma białą lub kolorową obwódkę?
Zwykle stare tło jest nadal wymieszane z pikselami krawędzi albo obraz przed zapisem wygładzono względem bieli. Dekontaminacja kolorów krawędzi, miękka maska i eksport z pełnym kanałem alfa zamiast koloru matte rozwiązują większość przypadków.
Czy maska to to samo co kanał alfa?
Zawierają te same informacje: wartość w skali szarości dla każdego piksela, która mówi, na ile jest on widoczny. Kanał alfa jest zapisany w pliku obrazu; maska to zwykle osobny obraz w skali szarości albo maska warstwy w edytorze.
Jak sprawdzić, czy PNG jest naprawdę przezroczysty?
Umieść go na ciemnym i jasnym tle i sprawdź, czy tło prześwituje. Możesz też uruchomić identify z ImageMagick z %[opaque] albo sprawdzić minimalną wartość kanału alfa w Pillow; minimum 255 oznacza, że nic nie jest przezroczyste.
Wypróbuj na własnym zdjęciu
Nowe konta dostają 50 darmowych kredytów. Jeden kredyt za zdjęcie, bez subskrypcji, a kredyty nigdy nie wygasają.
Usuń tłoŹródła
- 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