Hlavní navigace

Grafický metaformát PostScript

3. 5. 2007
Doba čtení: 11 minut

Sdílet

Dnes začneme s popisem známého a velmi úspěšného metaformátu nazvaného PostScript. Ten ve své podstatě není pouhý vektorový a bitmapový formát, ale plnohodnotný programovací jazyk, což nebývalým způsobem rozšiřuje jeho schopnosti nad rámec běžných souborových formátů.

Obsah

1. Grafický metaformát PostScript
2. Aplikace PostScriptu
3. Princip práce PostScriptu
4. Ukázka jednoduché stránky zapsané v PostScriptu
5. Složitější PostScriptový program
6. Odkazy na další informační zdroje
7. Obsah dalšího pokračování tohoto seriálu

1. Grafický metaformát PostScript

PostScript is a page description language (PDL) developed by Adobe Systems. PostScript is primarily a language for printing documents on laser printers, but it can be adapted to produce images on other types of devices. PostScript is the standard for desktop publishing because it is supported by imagesetters, the very high-resolution printers used by service bureaus to produce camera-ready copy.
Webopedia

Ve všech předchozích částech tohoto seriálu jsme si popisovali rastrové i vektorové grafické formáty, ve kterých byly informace uložené v pevně zadaných a předem popsaných datových strukturách, tj. bez možnosti uložení jakéhokoli programového kódu. PostScript se od těchto grafických formátů v mnoha ohledech odlišuje, protože je to patrně nejrozšířenější a současně i nejznámější Turingovsky kompletní programovací jazyk, který je založený na principu abstraktního vícezásobníkového procesoru, podobně jako programovací jazyk Forth, kterým jsem se již před dvěma lety na Rootu podrobně zabýval v samostatném seriálu.

V případě PostScriptu se však (na rozdíl od Forthu) jedná o specializovaný jazyk primárně určený především pro popis stránky, která se má vytisknout na postscriptové tiskárně, převést na bitmapový obrázek určený pro tisk na „hloupějších“ tiskárnách (GDI tiskárny, PCL tiskárny, jehličkové tiskárny), nebo zobrazit na obrazovce počítače vhodným prohlížečem, například zadarmo šířeným programem GhostView spolu s Ghostscriptem. Kromě toho může PostScript sloužit i jako metaformát určený pro přenos grafickým informací mezi různými aplikacemi a operačními systémy (metaformát je v tomto kontextu myšlen souborový formát, ve kterém je možné ukládat jak vektorovou kresbu, tak i bitmapovou, tj. rastrovou grafiku).

Na rozdíl od většiny ostatních značkovacích jazyků i datových formátů určených pro popis tiskové stránky (jmenujme například doposud často používaný PCL určený pro laserové tiskárny či v tomto seriálu již podrobně popsaný formát HP-GL určený především pro plottery atd.) je grafickou informaci možné v PostScriptu popsat programovým kódem s využitím proměnných, řídicích struktur, možností definice nových slov (ty jsou obdobou procedur a maker), proměnných, slovníků apod. Program napsaný v PostScriptu existuje v čitelné podobě ve formě (skoro)textového souboru, který má většinou příponu .ps nebo .eps (zapouzdřený PostScript, embedded PostScript).

V těchto souborech mohou být uložena i binární data fontů, vložených bitmap apod., proto mohou nastat problémy při ruční editaci souboru v těch textových editorech, které do souboru některé ne-alfanumerické znaky přidávají, nebo naopak ubírají. Program pro popis tiskové stránky může být v PostScriptu napsán velmi čitelně, nicméně prakticky všechny aplikace, které PostScriptový soubor generují, produkují pro člověka nečitelný kód – prohlédněte si například PostScriptový výstup z  TEXu (generovaný většinou přes dvips, ale zde je nečitelnost dána i častou aplikací kerningu) nebo Wordu (obdobou prakticky nečitelného výstupu jsou i mnohé WYSIWYG editory pro HTML či XHTML, které také neprodukují zrovna čistý a čitelný HTML kód).

Snad jedinou světlou výjimkou jsou v tomto ohledu programy typu CAD (například AutoCAD), jejichž PostScriptový výstup je docela dobře čitelný a je také ukázkou, jak vytvářet nová jednoznaková a dvouznaková slova pro zmenšení celkové velikosti PostScriptového souboru. Také již zmiňovaný program Ghostscript je možné nakonfigurovat tak, aby prováděl převod z jednoho PostScriptového souboru do souboru jiného s jeho zjednodušením (flattening), optimalizací apod.

2. Aplikace PostScriptu

Murphy by PostScript definoval jako nástroj, s jehož pomocí lze ve velmi krátkém okamžiku znehodnotit značné množství drahého materiálu. Experimentálně bylo totiž ověřeno, že rychlost PostScriptového zařízení je nepřímo úměrná smysluplnosti tištěného textu.
Zdeněk Wagner, TEX Bulletin

Na PostScriptu je založeno mnoho dalších aplikací. Kromě již zmíněných programových prohlížečů (GhostView, KGhostView a dalších, veskrze komerčních programů) jsou to především tiskové programy (poněkud nesprávně nazývané RIPy – Raster Image Processor(s)), které mohou provádět konverzi PostScriptového souboru na bitmapy, jež se mají zobrazit či vytisknout. Tyto konverzní programy nejsou vlastně nic jiného než interpretery programovacího jazyka PostScript, které postupně zadaný program vykonávají a podle volaných grafických funkcí mění barvu jednotlivých pixelů výsledné bitmapy. PostScriptové tiskárny také obsahují interpreter PostScriptu (RIP), který skládá jednotlivé stránky a postupně je tiskne. Na některých tiskárnách jde také ovládat zabudovaný displej a klávesničku a psát pomocí příkazů PostScriptu humorné hlášky obsluze.

PostScript je použit i v operačních systémech typu Unix jako univerzální tiskový formát. Při tisku se v Unixech jak vektorové, tak i bitmapové kresby nejprve převádějí do PostScriptu a teprve poté se buď pošlou přímo na tiskárnu nebo do softwarového RIPu, který daný PostScriptový soubor převede do formátu vhodného pro daný typ tiskárny. Ukazuje se, že volba PostScriptu jako tiskového meziformátu byla velmi šťastná, vždyť od roku 1985, kdy byl PostScript Level 1 firmou Adobe představen veřejnosti, se vlastně takto nastavený systém tisku nemusel měnit (až na rozšíření zavedené PostScriptem Level 2 v roce 1991, to je však prakticky ve všech ohledech zpětně kompatibilní s PostScriptem Level 1).

V systému NeXT se jeho tvůrci, mezi nimiž nechyběl ani známý Steve Jobs, neomezili pouze na tisk, ale použili PostScript (resp. jeho mírně upravenou variantu) i pro tvorbu grafického uživatelského rozhraní. Tento zajímavý systém se po několikaleté odmlce opět vrací, i když v poněkud primitivnější podobě, jako moderní GUI založené na vektorovém popisu a nikoli bitmapových ikonách. Pro účely zobrazení grafiky na monitorech i vzdálených terminálech byl v NeXTu navržen takzvaný Display PostScript, který je v několika operacích odlišný od klasického „tiskového“ PostScriptu, princip práce však zůstává stejný.

Velmi zajímavé je spojení PostScriptu se systémem TEX a jeho nadstavbami. To je možné provádět oboustranně. Výstup generovaný TEXem, tj. soubor typu DVI (Device Independend), je možné pomocí velmi užitečné utility dvips převést do PostScriptu a posléze vytisknout na jakémkoli postscriptovém zařízení, včetně osvitových jednotek. Pokud se použijí rastrové (bitmapové) fonty (například původní Computer Modern) a rozlišení fontů bude rovné přesnému rozlišení osvitové jednotky či laserové tiskárny, stává se TEX spolu s prohlížečem DVI souborů a utilitou dvips vlastně jediným opravdovým WYSIWYG systémem, kde si můžeme prohlédnout vysázenou stránku přesně tak, jak bude vytištěna (až na úroveň jednotlivých pixelů). S fonty typu Type 1 či TrueType to není možné, protože každé zařízení bude provádět rasterizaci poněkud odlišným způsobem; z tohoto důvodu je označení mnoha aplikací za WYSIWYG poněkud sporné.

V opačném směru je možné do stránek lámaných TEXem přidat PostScriptové dokumenty, nejčastěji vektorové či bitmapové obrázky. Pomocí různých sad maker, například známého makra PSTricks, je propojení TEXu a PostScriptu ještě těsnější, stejně jako v případě systému METAPOST, který výrazným způsobem rozšiřuje možnosti původního METAFONTu, tj. programu určenému pro převod písem a dalších obrázků popsaných ve specializovaném programovacím jazyku do bitových map a souborů s metrikami fontů.

PostScript je důležitý i jako formát pro dlouhodobou úschovu dokumentů. Podobně jako formát PDF – Portable Document Format (rovněž navržený firmou Adobe), se jedná o standardizovaný nástroj, takže je do značné míry zaručeno, že dokument uložený v tomto formátu bude čitelný a tisknutelný i v poměrně vzdálené budoucnosti. To se týká i kódování znaků mimo základní ASCII – v samotném PostScriptu mohou být potřebné znaky přímo uloženy (možný je bitmapový, vektorový i obrysový popis) přičemž jejich kódování je nezávislé na použitém operačním systému. I dnes lze bez problémů zobrazit dokumenty vytvořené v roce 1985, kdy se PostScript začal rozšiřovat. Pro úschovu textu se zachováním jeho logických částí (sémantiky) je však vhodnější použít jinou technologii, například DocBook.

3. Princip práce PostScriptu

Většina dnes používaných tiskáren a osvitových jednotek je založena na principu obarvování jednotlivých bodů na výstupním médiu (papír na tiskárnách, folie na osvitových jednotkách). Tyto zařízení tedy využívají podobný systém jako aktivní zobrazovací technologie (obrazovky s CRT popř. LCD či plasmové displeje), tj. rozklad celého obdélníkového obrazu do sítě dostatečně malých bodů (pixels, dots). U těch nejjednodušších tiskáren je možné a většinou i nutné obarvování bodů řídit přímo počítačem – typicky se jedná o jednoduché jehličkové tiskárny a levné GDI tiskárny (označované také jako Windows tiskárny). U těchto tiskáren se tedy o veškeré rozložení obrazu na tiskové body (rasterizaci) stará samotný počítač, který na tiskárnu posílá již výslednou bitmapu.

Toto řešení s sebou přináší několik nevýhod: vytvořená bitmapa musí být provedena v rozlišení vhodném pro danou tiskárnu (tj. je obecně nepřenositelná na další zařízení, resp. teoreticky přenositelná je, ale s viditelnou ztrátou kvality) a samotný tisk je pomalý, protože mnoho práce musí zařídit počítač, který posílá objemné bitmapy po relativně pomalých datových kanálech do tiskárny. Naproti tomu tiskárny a osvitové jednotky, které jsou vybavené PostScriptem, si veškerou rasterizaci, tj. převod původně vektorové a na zařízení nezávislé kresby do bitmapy provádí samy pomocí RIPu, bez asistence počítače. Ten se pouze stará o přenos PostScriptového souboru na toto zařízení.

PostScriptový interpreter a vykreslovač (RIP, Raster Image Processor) pracuje následovně: při inicializaci každé stránky je nejprve tato stránka vymazána, tj. všechny pixely odpovídající bitmapy jsou nastaveny na bílou barvu (barvu pozadí). Programátor či aplikace, která vytváří PostScriptový program však nemusí pracovat až na nejnižší úrovni, tj. na úrovni bitmapy složené z jednotlivých pixelů, ale může celou stránku seskládat ze základních grafických primitiv, kterými jsou v PostScriptu myšleny takzvané cesty a znaky. Stránka je tedy popsána pomocí cest, znaků a textových řetězců, tyto grafická primitiva však mohou být tvořena programově. Kromě toho se mohou v PostScriptu nacházet vložené bitmapy a pixmapy (dokonce i v komprimované podobě).

Kvůli minimalizaci nákladů na tiskové zařízení je PostScript (resp. jeho grafický subsystém) navržen tak, aby se již jednou vykreslené pixely nemusely nikdy číst. To sice zjednodušuje práci všech postscriptových zařízení a strukturu jejich pamětí, na druhou stranu to však neumožňuje například vytváření poloprůhledných objektů – ty musí být předpočítány typicky přímo v grafickém editoru, v PostScriptu bude uložen pouze výsledný vektorový obrázek.

Naproti tomu jednoduché rastrové tiskárny (zejména takzvané Windows GDI tiskárny), které neobsahují RIP, přijímají pouze bitmapy ve svém nativním rozlišení. Veškeré rastrování tedy provádí samotný počítač a tiskárna pouze tiskne výslednou bitmapu. Nevýhoda programového rastrování nemusí být na první pohled zřejmá, zejména při výpočetním výkonu moderních počítačů, ale zkusme se zamyslet nad tím, jak se poměrně veliká bitmapa přenáší například po počítačové síti (ve skutečnosti jsou prakticky všechny lepší síťové tiskárny PostScriptové). Pro zajímavost je možné si vypočítat, jaký objem dat zabere popis jedné strany A4 pomocí bitmapy při tiskovém rozlišení pouhých 600 DPI černobíle (osvitové jednotky mají DPI většinou mnohem vyšší): jde o hodnotu přesahující 30 milionů tiskových bodů!

Patrně nejmocnější je na PostScriptu vytváření cest (path) – ty byly později převzaty i do dalších grafických formátů, například SVG – Scalable Vector Graphics, na jejichž vývoji se taktéž podílela firma Adobe (vlastník licence PostScriptu). Každá cesta se skládá ze křivek, dokonce je možné převádět jednotlivé znaky na křivky. Křivka má zadané základní vlastnosti, jako je typ čáry, výplňový vzorek, způsob zakončení a barvu (ta existuje pouze u novější verze PostScriptu). Pomocí uzavřených cest lze také ořezávat část obrázku. Parametry jednotlivých křivek, ze kterých je cesta složena, se ukládají na zásobník a příslušný příkaz (MOVETO, LINETO, CURVETO) si ze zásobníku vezme tolik souřadnic, kolik jich pro svou činnost potřebuje. Vlastní vykreslení (tisk) se provádí pomocí slova SHOWPAGE, tyto detaily si však vysvětlíme až v dalších částech tohoto seriálu.

Vzhledem k tomu, že je PostScript založený na abstraktním vícezásobníkovém procesoru, má zabudovány i základní operátory pro práci se zásobníkem. Jedná se o následující operátory (resp. v termi­nologii zásobníkových jazyků slova): DUP, DROP, SWAP, OVER a ROT. Jednotlivá slova se tvoří poněkud odlišným způsobem, než například v již zmiňovaném Forthu: pomocí DEF, nikoli dvojtečky a středníku. Kromě toho lze vytvářet i další rozšiřující slova, která ve Forthu chybí a používat rozhodovací a iterační konstrukce (smyčky). Syntaxe se poněkud odlišuje od standardního Forthu, nicméně smysl těchto příkazů zůstává stejný.

4. Ukázka jednoduché stránky zapsané v PostScriptu

Příklad jednoduchého prográmku v PostScriptu i s nutnou minimální hlavičkou a inicializací může vypadat například následovně. V programu jsou použita slova MOVETO, LINETO (voláno nově nadeklarovaným slovem L) a CURVETO (voláno nově nadeklarovaným slovem C) pro vykreslení křivky/cesty se zaoblenými hranami tvořenými Bézierovými křivkami třetího stupně (jde tedy o slavné Bézierovy kubiky, které doslova ovlivnily celou jednu generaci grafických designerů). Příkazem SHOWPAGE dojde k vytištění celé stránky popř. k jejímu zobrazení v softwarovém PostScriptovém prohlížeči.

Na tomto příkladu stojí za povšimnutí fakt, že parametry jednotlivých slov/funkcí jsou umístěny před vlastním voláním daného slova. To je typická vlastnost všech zásobníkových programovacích jazyků, včetně Forthu a PostScriptu. Formát zápisu programu je volný, tj. klidně by bylo možné celý program zapsat na jednu řádku nebo naopak každý příkaz rozepsat na samostatný programový řádek – volba čitelnosti či naopak úspory místa je zcela ponechána na tvůrci souboru, tj. většinou na ovladači zabudovaném v nějaké grafické aplikaci. Text na posledním řádku není vizuálně zpracován, o čemž také svědčí poslední instrukce v celém programu.

400 72 translate/L{lineto}def/C{curveto}def
0 0 moveto 0 24 L 9 24 10 0 5 0 C
18 14 L 21 -6 23 0 27 16 C 32 0 L
37 0 45 12 45 24 C 45 0 L 45 24 L
54 22 50 20 46 10 C 59 9 51 6 49 0 C
58 10 66 -4 78 4 C 87 20 L
93 0 99 3 104 6 C 108 0 L
1 setlinejoin stroke showpage
(David Brooks, Open Software Foundation) pop 

5. Složitější PostScriptový program

Následující PostScriptový program (převzatý z TeXBulletinu), který je již poměrně složitý, předvádí použití několika matematických operací, instrukcí pro práci se zásobníkem a také tvorbu programových smyček. Význam jednotlivých příkazů i toho, proč jsou některé části obrazce vykresleny bílou barvou, bude patrný až po přečtení několika dalších dílů tohoto seriálu.

300 700 translate
/const 10 def /quadrant 4 def
-90 rotate
quadrant {
-100 0 translate
0 0 moveto
2 1 const {
100 const div mul
dup 0 exch
-180 180 arc
} for
100 0 translate
360 quadrant div rotate
} repeat
eofill 

ict ve školství 24

6. Odkazy na další informační zdroje

  1. Adobe Systems: PostScript Language Reference Manual, The Red Book,
    Adobe Systems Incorporated, 2nd ed., Addison Wesley 1990.
  2. Adobe Type 1 Font Format,
    Addison-Wesley
  3. PostScript Language Program Design,
    Addison-Wesley 1990, ISBN 0–201–14396–8
  4. PostScript Language Reference Manual,
    Addison-Wesley 1990, ISBN 0–201–18127–4
  5. PostScript Language Tutorial and Cookbook,
    Addison-Wesley 1990, ISBN 0–201–10179–3
  6. Petr Sojka: Grafika v TEXu (2),
    TeX Bulletin
  7. Rokicki, T.: DVIPS: A TEX Driver
  8. Timothy Van Zandt: PSTricks: PostScript macros for Generic TEX. User's Guide.

7. Obsah dalšího pokračování tohoto seriálu

V následujícím pokračování tohoto seriálu si podrobněji popíšeme programovací jazyk PostScript, zejména operace určené pro práci se zásobníkem a také slova (funkce) používané pro vykreslování cest a písma. Veškeré poznatky si také ukážeme na jednoduchých příkladech, které budeme zobrazovat pomocí softwarového RIPu, tj. Ghostscriptu spolu s GhostView.

Autor článku

Vystudoval VUT FIT a v současné době pracuje na projektech vytvářených v jazycích Python a Go.