Lepší vyhlazování písma ve Windows

Posledně jsem tu v souvislosti s webovými fonty popisoval rozdíly ve způsobu vyhlazování písma mezi systémy Windows a Mac OS X a povzdechl jsem si nad mizerným renderingem písma ve Windows. Dnes tu mám jednu fajnovou specialitku – vyzkoušejte lepší vyhlazování písma ve Windows!

Jak známo, ve Windows můžete volit mezi třemi typy renderování fontů: nevyhlazované, vyhlazené „standardním antialiasingem“ a ClearType. Poslední způsob můžete vytunit jednoduchým nástrojem od Microsoftu nebo od třetích stran, např. ClearTweak od firmy Isoland. Tento software umožňuje nastavit kontrast vyhlazování a vybrat pořadí subpixelů pro různá LCD (jsou dva typy – RGB a BGR). Teď si asi říkáte „jo, to znám, to je starý“. Fajn, tohle ovšem není to, čím se nyní chci zabývat, takže čtěte dál :)

Všechny výše uvedené typy renderování písma ve Windows trpí jedním problémem, kterým je hinting. Windows totiž před samotným vykreslením (a vyhlazením) znaku obrysovou křivku zdeformuje a až tuto zdeformovanou křivku vyhlazuje. U ClearType je problémem i fakt, že vždy využívá subpixely LCD monitoru, což umožňuje jemnější kontrolu nad vyhlazením, ovšem za cenu mírného zabarvení obrysu písmen, což ne každému voní. A korunuje to tím, že vyhlazuje pouze v horizontálním směru, ne ve vertikálním, což způsobuje ony známé zuby na zaoblených částech písmen.

Zatímco Microsoft preferuje čitelnost písma při malých velikostech na obrazovce i za cenu odchýlení od původního tvaru písmen, Mac OS X volí jinou strategii – preferuje kresbu písma před zarovnáváním na pixelový rastr. Obě metody mají své urputné obhájce i odpůrce. A zatímco v našich končinách se můžeme dohadovat, jestli je jeden nebo druhý typ vyhlazování hezčí, u nelatinkových písem se složitou kresbou jsou problémy s čitelností mnohem výraznější.

Japonští vývojáři proto vymysleli fígl, jak naroubovat na systémovou knihovnu GDI zcela odlišný renderer písma – Freetype, což je open source knihovna pro vykreslování písma, známá především z linuxového prostředí. Tímto poměrně jednoduchým hackem umožnili využití rendereru Freetype prakticky ve všech aplikacích Windows na systémové úrovni! Princip je prostý – kdykoliv nějaká aplikace Windows potřebuje vypsat text, zavolá systémovou funkci TextOut. Japonští vývojáři prostě tuto funkci nahradili funkcí vlastní. Ačkoliv je to již pár let stará záležitost, já jsem o něčem takovém dosud neslyšel a narazil jsem na to náhodou. Dost mě překvapilo, že je něco takového tak snadno možné, takže jsem to hned vyzkoušel a ono to opravdu funguje.

Čas na pár ukázek

webfonts-cleartype1
Ukázka 1a: Demo stránka s webfonts se standardním ClearType

webfonts-freetype1
Ukázka 1b: Tatéž stránka s GDI++

webfonts-cleartype2
Ukázka 2a: Jiná demostránka s ClearType

webfonts-freetype2
Ukázka 2b: Totéž s GDI++

Projekt (jestli se to tak dá nazvat) se jmenuje GDI++ a odkaz na stažení a popis najdete na webu vladg.com (není to oficiální web, ale hostuje potřebný balíček knihoven). Je nutné upozornit, že se jedná o neoficiální zásah do systému, který může způsobovat nestabilitu či zpomalení Windows. Nicméně není se třeba moc obávat, nic se nikam neinstaluje a vše funguje transparentně a nedestruktivně. Stáhnutý balíček stačí rozbalit do libovolného adresáře a spustit soubor gditray.exe. Do tray baru přibude ikonka, která v kontextovém menu umožňuje jedním kliknutím vypnout či zapnout vlastní vyhlazování. Změna se okamžitě projeví ve všech aplikacích systému.

Výchozí vyhlazování ovšem není všechno, co knihovna nabízí. Hlavní síla se skrývá v možnostech nastavení. Způsob renderingu písma pomocí GDI++ lze totiž ovlivnit mnoha parametry. Vše se řídí konfiguračními soubory, kterých můžete mít několik, přepínat mezi nimi a tím měnit různé styly vyhlazování podle potřeby (opět pomocí ikony v tray baru). V balíčku je navíc přiložena velmi užitečná utilitka gdixxTuner.exe, pomocí které můžete parametry ladit v přehledném dialogovém okně v reálném čase s několika náhledy písma v různém zvětšení:

gdituner
GDI++ tuner (klikněte na obrázek pro zvětšení)

Bohužel, jednotlivé možnosti nastavení nejsou příliš zdokumentovány, takže nezbývá než experimentovat.

Co všechno je možné ladit:

  • Hinting. Je možné zvolit standardní hinting, autohinting, nebo hinting zcela vypnout.
  • Typ antialiasingu. V nabídce je celkem šest typů vyhlazování, pro každý monitor se může hodit jiný. Jsou zde zastoupeny jak metody vyhlazování pomocí subpixelů RGB a BGR, tak pouze ve stupních šedi.
  • Width mode a Font loader. Zde si nejsem jistý, jak přesně tyto volby fungují, ale Width mode zřejmě určuje, zda se šířka znaků nechává podle metriky Windows, nebo se uvažuje podle vlastní metriky Freetype. Různé kombinace nastavení mají vliv na vykreslování znaků a mezery mezi nimi.
  • Bolder mode. Zřejmě ovlivňuje způsob ztučnění písma.
  • GammaMode a GammaValue. Možnost nastavení vlastní gama hodnoty pro výpočet světlosti stupňů šedi. Tímto parametrem lze ovlivňovat „jemnost“ či kontrast vyhlazování.
  • Contrast. Ovlivňuje kontrast kresby písma.
  • TextTuning. Touto volbou lze ladit jednotlivé barvové kanály RGB pro subpixel rendering.
  • NormalWeight, BoldWeight a ItalicSlant ovlivňují tučnost vyhlazování jednotlivých tloušťěk písma.
  • LcdFilter nabízí čtyři typy low pass filtrů, které jsou aplikovány na subpixel rendering. Slouží pro ovlivnění zabarvení hran písmen.

Jak vidno, knihovna nabízí širokou škálu nastavení. Je nutné poznamenat, že pro každý monitor může být vhodné jiné nastavení a samozřejmě hrají roli i osobní preference.

V konfiguračním souboru lze také nastavit, pro které aplikace se má GDI++ vypnout. Dokonce lze zadat i seznam jednotlivých fontů, pro které se má používat standardní nastavení Windows. Lze tak zároveň používat např. systémové fonty vyhlazované standardním ClearType a ostatní fonty nechat vyhlazovat pomocí GDI++, nebo třeba pro plaintextové editory jako je PSPad GDI++ zcela zakázat.

Po několikadenním testování musím říct, že GDI++ se chová slušně, žádné nestability systému jsem nepozoroval a ani zpomalení odezvy systému není znát (i když nějaké jistě je). Jediná aplikace, kde bylo zpomalení patrné, byl zmíněný PSPad se zvýrazňováním syntaxe. GDI++ mi funguje jak na Windows XP, tak na Vistách na notebooku. Pokud se vám taky nelíbí, jak Windows vykreslují písma, určitě doporučuju GDI++ vyzkoušet.

Datum: 28. 7. 2009, Autor: Karel Fučík

Komentáře (3)

  • 1
    Martin Michálek28. 7. 2009, 10.11
    Hezké! Škoda, že je to řešení na úrovni personálního tuningu počítače.

    Japonští vývojáři by mohli vymyslet, jak GDI++ distribuovat s webovou stránkou. :-)
  • 2
    pepčok28. 7. 2009, 14.39
    Moc pekné, po troške nastavovania. To by bola paráda keby sa to distribuovalo s mozillou/operou/? ako voliteľný renderer, s troškou osvety by to ľudia aj používali :)
  • 3
    miso19. 5. 2010, 11.53
    Je prosim mozne nazdielat nastavenie?

    Marne bojujem, lepsie nez ClearType, ale stale este kus chyba ...
    Osvedcila sa mi tato verzia:
    http://free.flop.jp/gdi++/src/gdi0909.zip

Přidat komentář

(nebude zveřejněn)

Ochrana proti spamu (prosím, zodpovězte následující otázku):

Položky označené * jsou povinné. 1 enter = nový řádek. Žádná syntaxe typu Texy není rozpoznávána, HTML bude escapováno.

Nejnovější komentáře