Takéalfa, RGBA alpha, kanál průhlednostiZákladní
Definice
Alfa kanál je složka obrazových dat, která u pixelu určuje míru neprůhlednosti nebo průhlednosti. Doplňuje barevné kanály, typicky RGB, a umožňuje plynulé okraje, stíny, překryvy, masky i skládání vrstev. Hodnota alfa sama neurčuje barvu, ale říká, jak se barva pixelu promíchá s pozadím.
Proč má pixel čtvrtou složku
Alfa kanál přidává k barevným hodnotám informaci o tom, jak moc má být daný pixel vidět. U běžného zápisu RGBA první tři složky popisují červenou, zelenou a modrou barvu, zatímco čtvrtá složka popisuje krytí. Hodnota 1, případně 255 v osmibitovém zápisu, znamená plně neprůhledný pixel. Hodnota 0 znamená pixel, který se při skládání s pozadím nevykreslí.
Čtvrtá složka řeší hlavně okraje a překryvy. Bez alfy by kulatá ikona, měkký stín nebo poloprůhledný panel musely být uložené proti konkrétní barvě pozadí. Alfa kanál dovolí uložit tvar a jeho průhlednost nezávisle, takže stejný obrázek může ležet na světlém, tmavém i barevném podkladu.
Když barva zůstane a viditelnost zmizí
Průhledný pixel může mít stále uloženou barvu. Grafický editor, formát souboru nebo GPU může uchovávat RGB hodnoty i tam, kde je alfa nulová. Při přímém zobrazení taková barva vidět není, ale může se projevit při změně velikosti, filtrování textury nebo interpolaci mezi pixely. Právě kvůli tomu někdy vznikají světlé či tmavé lemy kolem ikon.
Alfa proto není „barva průhlednosti“. Alfa je číselná informace používaná při kompozici. Výsledný pixel se počítá z barvy popředí, její alfy a barvy pozadí. V CSS se podobná myšlenka používá například v barvách rgb() s alfa složkou nebo v zápisu rgba().
Skládání vrstev bez špinavých okrajů
Přímá alfa
Přímá, někdy nazývaná neasociovaná alfa, ukládá barvu a hodnotu průhlednosti odděleně. Pixel může mít například červenou barvu a alfu 0,25. Při skládání se barva popředí vynásobí alfou až v okamžiku výpočtu výsledku. Takový zápis se snadno chápe a běžně se používá ve výměnných obrazových datech.
Přednásobená alfa
Přednásobená alfa ukládá barevné složky už vynásobené hodnotou alfy. Poloprůhledná červená tedy nemá plnou červenou složku a samostatnou alfu, ale červená složka je už zeslabená. Tento způsob bývá výhodný při renderingu a kompozici, protože snižuje riziko některých artefaktů a zjednodušuje výpočty pro blending.
Alfa na webu, v texturách a v exportu
Webový vývojář narazí na alfa kanál u PNG ikon, WebP obrázků, canvasu, SVG filtrů i CSS barev. UI designér ho používá u stínů, překryvů, modálních oken a stavů komponent. Grafik pro hry nebo 3D pracuje s alfou v texturách listů, vlasů, částic, obtisků a materiálů, které nemají plný obdélníkový tvar.
CSS vlastnost opacity se od alfa složky barvy liší rozsahem účinku. opacity: 0.5 zprůhlední celý prvek včetně textu a potomků. Barva typu rgb(0 0 0 / 50%) zprůhlední jen konkrétní barvu, například pozadí panelu, zatímco text může zůstat plně čitelný.
Cena průhlednosti v renderingu
Alfa kanál může komplikovat výkon a pořadí kreslení. Neprůhledné objekty lze často vykreslovat efektivněji, protože renderer může snadno rozhodnout, co je zakryté. Průhledné objekty se musí skládat s tím, co je za nimi, a výsledek závisí na pořadí. V 3D scénách proto průhlednost často vyžaduje třídění, speciální materiály nebo kompromisy mezi rychlostí a vizuální věrností.
Příklady z praxe
Průhledné pozadí tlačítka
Designér chce tmavé tlačítko na fotografii, ale text musí zůstat čitelný. Alfa ve vlastnosti pozadí zprůhlední jen výplň tlačítka, zatímco text zůstane neprůhledný. Samostatná vlastnost opacity se hodí až pro stav disabled, protože ztlumí celý prvek.
button { background: rgb(20 20 20 / 65%); color: white; } button[disabled] { opacity: 0.45; }Ztmavení náhledu v Canvasu
Aplikace generuje náhled fotografie s tmavým překryvem a logem. Canvas nejdřív vykreslí fotografii, potom poloprůhlednou černou vrstvu a nakonec logo plnou alfou. Výsledkem je čitelnější náhled bez úprav původního obrázku.
const ctx = canvas.getContext('2d'); ctx.drawImage(photo, 0, 0); ctx.globalAlpha = 0.35; ctx.fillStyle = 'black'; ctx.fillRect(0, 0, canvas.width, canvas.height); ctx.globalAlpha = 1; ctx.drawImage(logo, 24, 24);
Časté omyly
- MýtusAlfa nula znamená, že pixel nemá žádnou barvu.
- Ve skutečnostiPixel s nulovou alfou může mít uložené RGB hodnoty, jen se při běžné kompozici neprojeví. Tyto hodnoty mohou ovlivnit okraje při škálování nebo filtrování.
- MýtusPNG má vždycky alfa kanál.
- Ve skutečnostiFormát PNG alfa kanál podporuje, ale konkrétní PNG soubor ho mít nemusí. Některé PNG obrázky jsou plně neprůhledné nebo používají jen jednu průhlednou barvu.
- MýtusCSS opacity je totéž jako alfa v barvě.
- Ve skutečnostiCSS opacity ovlivní celý prvek včetně potomků. Alfa složka barvy ovlivní jen danou barvu, například pozadí, a ostatní obsah může zůstat plně neprůhledný.
Časté dotazy
- Proč má obrázek s alfa kanálem kolem okraje světlý lem?
- Světlý lem kolem průhledné ikony často vzniká z barev uložených v pixelech, které mají nízkou nebo nulovou alfu. Při změně velikosti, filtrování nebo exportu se tyto barvy mohou promíchat s viditelnými okraji. Alfa kanál tedy nemusí být problém sám o sobě, problém bývá v původní barvě okrajových pixelů, nesprávném exportu nebo v rozdílu mezi přímou a přednásobenou alfou.
- Kdy použít alfa složku barvy místo CSS opacity?
- Alfa v barvě je vhodná, když má být průhledná jen konkrétní výplň, rámeček nebo stín. CSS opacity se hodí, když má být průhledný celý prvek najednou, včetně textu, ikon a potomků. Alfa kanál nebo alfa složka barvy proto dává lepší kontrolu nad čitelností UI, zatímco opacity je rychlá volba pro ztlumení celého prvku, například při deaktivovaném stavu.
- Ukládá alfa kanál barvu pozadí pod obrázkem?
- Alfa kanál neukládá obraz, který se nachází pod průhledným místem. Alfa kanál ukládá jen míru krytí pixelů vlastního obrázku nebo vrstvy. Barva podkladu se do výsledku započítá až při zobrazení nebo renderingu. Stejný PNG soubor s průhledností proto může vypadat jinak na bílém webu, tmavém panelu nebo barevné fotografii.
- Proč průhledné objekty v 3D někdy blikají nebo se překrývají špatně?
- Pořadí kreslení průhledných objektů je důležité, protože výsledná barva vzniká skládáním popředí a pozadí. Když renderer nakreslí průhledné sklo, kouř nebo listy ve špatném pořadí, může se část scény smíchat s nesprávným podkladem. Neprůhledné objekty tento problém obvykle nemají, protože jejich pixel jednoduše překryje to, co je za nimi.
Zdroje
- Compositing and Blending Level 1(otevře se v novém okně)
- CSS Color Module Level 4(otevře se v novém okně)
- Portable Network Graphics (PNG) Specification (Second Edition)(otevře se v novém okně)
- CanvasRenderingContext2D: globalAlpha property(otevře se v novém okně)