semmixkolor i percepcja

Przezroczystość kolorów

Przezroczystość mówi, ile tła ma prześwitywać przez piksel. Formaty radzą sobie z nią na dwa sposoby: albo piksel jest w całości przezroczysty lub nie (GIF), albo ma płynny stopień krycia, kanał alfa (PNG, WebP, AVIF).

Przezroczystość binarna w GIF

GIF nie ma kanału alfa. Zamiast tego jeden numer z palety można oznaczyć jako przezroczysty. Robi to blok sterowania grafiką ($F9): jeden bit włącza przezroczystość, a jeden bajt podaje numer koloru. Piksele z tym numerem nie są rysowane, więc widać przez nie to, co było pod spodem.

Wada: brzeg jest albo kryjący, albo przezroczysty. Wygładzona krawędź napisu przygotowana na białym tle ma piksele pośrednie między kolorem napisu a bielą. Na ciemnym tle te piksele tworzą jasną obwódkę (halo).

Kanał alfa

Kanał alfa to czwarta składowa piksela, α, od 0 (całkiem przezroczysty) do 1 (kryjący). PNG zapisuje go jako pełny kanał w RGBA albo, dla obrazów z paletą, jako blok tRNS z osobnym α dla każdej pozycji palety.

Złożenie piksela z tłem opisuje operator "over" (Porter i Duff, 1984):

C = α · C_obraz + (1 - α) · C_tło dla tła też przezroczystego: α_wynik = α_obraz + α_tło · (1 - α_obraz) C_wynik = (α_obraz · C_obraz + α_tło · (1 - α_obraz) · C_tło) / α_wynik

Przykład: 50% krycia na bieli i czerni

#c85028 z α = 0,5:

na bieli, liczone na wartościach sRGB: (228, 168, 148) na bieli, liczone w świetle liniowym: (230, 194, 189) na czerni, sRGB: (100, 40, 20) na czerni, liniowo: (146, 56, 26)

Różnica jest wyraźna, zwłaszcza na czerni. Fizycznie poprawne jest składanie w świetle liniowym (zob. korekcja gamma). Przeglądarki i CSS składają jednak domyślnie na wartościach sRGB, więc projektanci przyzwyczaili się do tamtego wyglądu. Ważne, żeby w jednym projekcie trzymać się jednej metody.

Alfa premultiplikowana

Wiele programów przechowuje kolor już przemnożony przez α: zamiast (R, G, B, α) zapisuje (α·R, α·G, α·B, α). Wzór "over" upraszcza się wtedy do:

C_wynik = C'_obraz + (1 - α_obraz) · C'_tło

Zalety: szybsze składanie, poprawne skalowanie i rozmywanie (przezroczyste piksele nie "przeciekają" swoim kolorem na sąsiadów). Wada: przy małym α tracimy dokładność koloru. PNG zapisuje alfa zawsze bez premultiplikacji, więc programy przeliczają ją przy wczytywaniu.

Skąd biorą się obwódki