Zkratka propicture elementTakéPx, Obrazový bod, Picture elementZákladní

Definice

Pixel je nejmenší adresovatelný prvek rastrového obrazu, kterému lze přiřadit jednu barvu. Digitální fotografie, obsah obrazovky i textura ve hře jsou mřížkou pixelů uspořádaných do řádků a sloupců. Ve webovém designu navíc CSS pixel neznamená fyzický bod displeje, ale referenční jednotku délky nezávislou na hustotě zobrazovače.

Kategorie: Grafické programováníAktualizováno

Nezaměňujte: Pixel označuje jak nejmenší prvek rastrového obrazu, tak měřicí kód v marketingu (tracking pixel) a rovněž řadu telefonů Google Pixel.

Pixel jako vzorek, ne jako čtvereček

Pixel se běžně kreslí jako malý čtverec, ale přesnější je chápat ho jako vzorek barvy odebraný v jednom bodě spojité scény. Z tohoto pohledu vyplývá celá řada jevů, které by u „čtverečků“ nedávaly smysl: schodovité hrany, moaré na jemných vzorech nebo rozmazání při zvětšení. Rekonstrukce obrazu z konečného počtu vzorků je vzorkovací problém, a proto se proti artefaktům bojuje technikami jako anti-aliasing během rasterizace.

Co pixel obsahuje

Hodnota pixelu závisí na barevném modelu a bitové hloubce. Nejčastější je 8 bitů na kanál v modelu RGB, tedy 24 bitů na pixel a přibližně 16,7 milionu barev; s alfa kanálem pro průhlednost jde o 32 bitů. Fotografické a HDR pipeline pracují s 10, 12 nebo 16 bity na kanál, případně s desetinnými čísly. Grayscale obrázek má jediný kanál, indexovaný obraz ukládá místo barvy odkaz do palety.

Fyzicky se jeden pixel na LCD nebo OLED panelu skládá z několika subpixelů (obvykle červeného, zeleného a modrého). Toho využívá subpixelové vyhlazování písma, které dokáže zvýšit zdánlivé rozlišení textu, ale je závislé na konkrétním uspořádání subpixelů v panelu.

Proč CSS pixel není pixel displeje

Na webu je 1px abstraktní jednotka. Na displeji s vysokou hustotou připadá na jeden CSS pixel několik fyzických pixelů; poměr udává window.devicePixelRatio, typicky 2 nebo 3. Bez tohoto oddělení by se stránka na moderním telefonu zobrazila nečitelně malá. Praktický důsledek: rastrové obrázky a plátno canvas je nutné vykreslovat v násobném rozlišení, jinak vypadají měkce. Vektorová grafika a text tímto problémem netrpí.

Souvisejícími jednotkami jsou DPI a PPI. PPI popisuje hustotu pixelů na palec u zobrazovače, DPI počet tiskových bodů na palec. Rozlišení v pixelech samo o sobě neříká nic o fyzické velikosti: stejný obrázek 1000 × 1000 px může být na tiskovině čtvercem o straně 8 cm i 30 cm.

Tracking pixel: úplně jiný význam

V marketingu a analytice znamená pixel měřicí kód, historicky průhledný obrázek 1 × 1, který se načte z cizího serveru a tím ohlásí zobrazení stránky nebo otevření e-mailu. Dnes jde většinou o JavaScript, název ale zůstal. Konverzní pixely reklamních systémů měří dokončené objednávky a napájejí remarketing. Protože ukládají identifikátory a předávají data třetí straně, spadají v EU pod pravidla pro souhlas a ochranu osobních údajů.

Kde na pixelech záleží nejvíc

Ve výkonnostně kritickém renderování je počet pixelů přímo cenou: fragment shader se spouští pro každý pokrytý pixel, takže zdvojnásobení rozlišení zhruba zčtyřnásobí zátěž. Ve strojovém učení tvoří pixely vstupní tenzor a jejich hodnoty se normalizují. V UI naopak platí, že honba za pixelovou přesností napříč zařízeními je slepá ulička: rozumnější je pracovat s relativními jednotkami a nechat prohlížeč přepočet na fyzické body.

Příklady z praxe

  1. Canvas ostrý na Retina displeji

    Plátno vykreslené v CSS rozměrech vypadá na displeji s devicePixelRatio 2 rozmazaně, protože se roztáhne na dvojnásobek fyzických pixelů. Řešením je nastavit atributy width a height na násobek DPR a poté zmenšit plátno CSS stylem. Kreslicí kontext se přeškáluje, takže souřadnice v kódu zůstanou v CSS pixelech.

    const dpr = window.devicePixelRatio || 1;
    const cssW = 800, cssH = 400;
    canvas.width = cssW * dpr;
    canvas.height = cssH * dpr;
    canvas.style.width = cssW + 'px';
    canvas.style.height = cssH + 'px';
    const ctx = canvas.getContext('2d');
    ctx.scale(dpr, dpr);
  2. Odhad paměti pro obrazový buffer

    Nekomprimovaný snímek ve Full HD s 8 bity na kanál a alfa kanálem zabere 1920 × 1080 × 4 bajty, tedy zhruba 8,3 MB. Při 4K rozlišení je to už asi 33 MB na jeden snímek, což vysvětluje, proč se u dvojitého bufferování a HDR formátů rychle narazí na limity VRAM. Stejný výpočet používá i backend při rozhodování, jestli obrázek zpracovat proudově.

    width = 3840
    height = 2160
    bytes_per_pixel = 4  # RGBA8
    print(width * height * bytes_per_pixel / 1024**2, "MB")

Časté omyly

MýtusVíc megapixelů znamená lepší fotku.
Ve skutečnostiKvalita snímku závisí především na velikosti snímače, optice, dynamickém rozsahu a zpracování signálu. Vysoký počet pixelů na malém snímači znamená menší plochu na jeden pixel, tedy horší poměr signálu k šumu při slabém světle.
MýtusJeden CSS pixel je jeden bod na obrazovce.
Ve skutečnostiCSS pixel je referenční jednotka. Na displejích s vysokou hustotou odpovídá dvěma, třem i více fyzickým pixelům podle devicePixelRatio, a proto se rastrová grafika musí dodávat ve vyšším rozlišení.
MýtusTracking pixel je neškodný obrázek, takže nepotřebuje souhlas.
Ve skutečnostiTracking pixel typicky přenáší IP adresu, identifikátor a kontext návštěvy třetí straně a často pracuje s uloženými identifikátory. V EU proto zpravidla vyžaduje souhlas stejně jako marketingové cookies.

Časté dotazy

Jak převést pixely na centimetry nebo milimetry?
Převod pixelů na fyzickou délku vyžaduje znát hustotu zobrazení nebo tisku. Při 96 PPI odpovídá 96 pixelů jednomu palci, tedy 2,54 cm; jeden pixel tak měří asi 0,26 mm. Pro tisk se místo toho počítá s hodnotou DPI zvolenou v exportu: obrázek 3000 pixelů na šířku vytištěný při 300 DPI má šířku 10 palců, při 150 DPI dvojnásobek. Samotný soubor tedy fyzickou velikost neurčuje, tu určuje až zvolená hustota při zobrazení nebo tisku.
Proč se pixely při zvětšení obrázku rozmažou?
Rastrový obrázek obsahuje pevný počet vzorků. Při zvětšení je nutné dopočítat mezilehlé hodnoty interpolací, například bilineárně nebo bikubicky, což vede k rozmazání, protože chybějící detail nikde uložený není. Zvětšení bez interpolace naopak vytvoří viditelné čtverce. Modely pro superrozlišení dokážou detail dogenerovat, ale jde o odhad podle naučených vzorů, nikoli o obnovení původní informace. Proto se pro loga, ikony a text doporučuje vektorový formát, který se přepočítává při každém vykreslení.
Kdy dává smysl v CSS použít px místo rem?
Jednotka px se hodí tam, kde má rozměr zůstat konstantní bez ohledu na uživatelské nastavení velikosti písma: tenké oddělovací linky, okraje, poloměry zaoblení nebo přesné pozicování dekorativních prvků. Pro velikost písma, odsazení a výšku řádku je vhodnější rem, protože respektuje volbu uživatele v prohlížeči a zlepšuje přístupnost. Kombinace obou přístupů je běžná praxe: typografie v rem, jemné detaily v px.
Jaký je rozdíl mezi pixelem a subpixelem?
Pixel je logická jednotka obrazu s jednou barevnou hodnotou, subpixel je fyzická součást panelu, obvykle samostatná červená, zelená nebo modrá buňka. Jeden pixel na displeji tvoří několik subpixelů umístěných vedle sebe. Subpixelové vyhlazování písma adresuje tyto buňky odděleně a zvyšuje tím zdánlivou horizontální ostrost textu. Výsledek ale závisí na uspořádání subpixelů v konkrétním panelu, takže na otočené obrazovce nebo u OLED s netradičním rozložením může vzniknout barevný lem.

Zdroje

  1. Pixel(otevře se v novém okně)Wikipedia
  2. CSS Values and Units Module Level 3(otevře se v novém okně)W3C, 2019
  3. Window: devicePixelRatio property(otevře se v novém okně)MDN Web Docs
  4. HTML Standard(otevře se v novém okně)WHATWG

Související pojmy

Potřebujete to vyřešit v praxi?

Poradíme, jak na to ve vašem projektu

Vysvětlit pojem je jedna věc, navrhnout kolem něj funkční řešení druhá. Ozvěte se a probereme, co dává smysl u vás.