Ušetřete

Hlavní navigace

Grafika v UNIXu - PostScript

Programovací jazyk PostScript se stal univerzálním jazykem pro komunikaci grafických aplikací. Používají ho tiskárny a tiskové procesory, je základním (a dlouhou dobu byl jediným) výměnným formátem vektorové grafiky, v UNIXu je téměř výhradním jazykem pro tisk z aplikací. Proto o něm budou následující díly. Nečekejte však učebnici (ta by vydala na celý seriál), ale spíše rady k jeho užívání.

Jazyk PostScript byl navržen firmou Adobe v roce 1985 jako jazyk pro popis stránek. Díky svým rozsáhlým možnostem se však brzy stal i formátem používaným k přenosu obrázků mezi aplikacemi.

Jedná se o interpretovaný jazyk, založený na práci se zásobníky. Jeho základními grafickými objekty jsou pak cesty, které lze obtahovat a vyplňovat, bitové mapy, rastry, vzorky a písma. Téměř celá jeho specifikace je volně dostupná na Internetu v publikaci PostScript Language Reference Manual (PLRM).

Interpret PostScriptu postupně prochází kód, interpretuje jeho příkazy a provádí vykreslování (rastrování) do výstupní paměti. Interpretu se proto také někdy říká RIP (Raster Image Processor) a zmíněnému procesu pak slangově „ripování“.

Pro ty, kteří PostScript nikdy neviděli, uvádíme lehce komentovanou malou ukázku. Standardní souřadný systém začíná vlevo dole.

%!
% nastavení velikosti média
1 dict dup /PageSize [40 40] put setpagedevice
% definice zkratky pro příkaz curveto
/c { curveto } def
% uložíme na zásobník dva parametry
% příkaz translate je vyzvedne a provede
% nastavení souřadného systému
-15.7606 -35 translate
% nová cesta
newpath
% posun pera
46.3294 35 moveto
% několik Bézierových křivek:
% curveto odebírá ze zásobníku šest parametrů:
% x1 y1 x2 y2 x3 y3
% pero se přesune do [x3,y3]
% s použitím řídících bodů [x1,y1] a [x2,y2]
29.2607 39.8018 16.8406 59.5148 15.7606 65.2856 c
17.6206 70.885 22.9607 73.9362 25.5407 74.355 c
27.5207 73.0986 31.7207 67.0067 32.5607 64.2173 c
31.3007 62.3182 29.0207 61.0105 27.4007 60.3524 c
27.8207 58.6772 35.5594 48.1696 41.1854 46.6044 c
41.7839 48.2297 43.1597 50.5775 45.0735 51.8417 c
47.8843 51.0591 53.9883 46.8451 55.305 44.9188 c
54.9459 42.3302 51.8936 36.9724 46.3294 35 c
% uzavření cesty
closepath
% vyplnění oblasti ohraničené cestou
fill
% vykreslení stránky
showpage
výstup ukázky

Další specifikační publikací je kniha Type 1 Font Format. Tento formát byl dlouho tajný. V roce 1988 firmě Adobe hrozil bojkot firem Microsoft a Apple. Dlouholetý boj skončil kompromisem. Formát Type 1 byl uvolněn, mezitím však zmíněné firmy vytvořily další formát písem – TrueType. Ten se na oplátku dostal do PostScriptu pod označením Type 42.

Třetí knihou, která je plná ukázek, je Adobe PostScript Tutorial and Cookbook (s výjimkou příkladů k dispozici pouze jako kniha).

Přestože PLRM je v podstatě návodem na napsání interpretu PostScriptu, firma Adobe nikdy neuvolnila referenční implementaci.

PostScript Level 1, PostScript Level 2, PostScript LL3

Ve vývoji PostScriptu existují tři mezníky.

PostScript Level 1 (1985): Jazyk pro popis stran pro černobílé tiskárny. Dodnes narazíme na zařízení, která podporují jen PostScript Level 1.

PostScript Level 2 (1990): Ještě před vznikem tohoto standardu se objevila nutnost rozšíření. Vznikly tak implementace jazyka Level 1 s podporou barev, stejně jako různá rozšíření závislá na zařízení (PostScript Level 1 neměl příkazy pro změnu velikosti stránky, nastavení podavačů či ovládání řezaček).

Aby se napříště zabránilo živelnému přidávání příkazů, nebyly žádné z těchto příkazů (s výjimkou podpory barev) zaneseny do nového standardu (nicméně ve většině interpretů doposud tyto příkazy jsou), ale namísto toho vznikla nová datová kategorie – zdroje. PostScript tak mohl být snadno a kompatibilně rozšířen o podporu speciálních funkcí. Navíc přibyla možnost kódovacích a kompresních filtrů (jpeg DCT, lzw, CCITT aj.), které umožnily významně zmenšit zvlášť velikost bitmap. Přibyla také podpora nezávislých barevných prostorů. Největší vnitřní změnou Level 2 je pak podpora úklidu paměti (Garbare Collection), celkový počet změn je však o mnoho vyšší.

PostScript LL3 (Language Level 3, 1997): Do LL3 přibylo mnoho dalších funkcí. Mezi hlavní patří podpora přechodů (Gouraudovo stínování), zobecnění rastrovacích funkcí (funkce SuperScreen čtyřnásobně zvýší počet vykreslených odstínů na tiskárně s malým rozlišením), interpretace mnoha dalších typů písem či práce s vícesložkovými barevnými prostory. Pro nás je též důležité, že se do standardního kódování znakových sad dostaly i české znaky.

Display PostScript (DPS): Ještě před vznikem Level 2 vznikla speciální mutace PostScriptu pro obrazovkové servery. Většina jeho funkcí byla zařazena do Level 2, ale několik dalších, které nemají pro tisk význam, zůstalo jako rozšíření (podpora více vláken, rolování v oknech apod.).

Portable Document Format (PDF): Interpretace postscriptového kódu je poměrně složitá a relativně pomalá. PostScript je navíc textový formát, což zvyšuje velikost souborů. Formát PDF přebral ideu popisu stránky, ovšem vyřadil všechny programovací konstrukce. Naproti tomu přidal podporu komprese celého kódu, kryptografie, náhledů stran, hypertextových odkazů, apletů, barevných profilů ICC aj. Stal se de facto standardem pro vystavování zformátovaných dokumentů na síti.

Co PostScript neumí

Od počátku byl PostScript navrhován tak, aby při své práce nemusel udržovat celý obrázek v maximální bitové hloubce, ale pouze v bitové hloubce výstupního zařízení. Do obrazové paměti se ukládá již vyrastrovaný obraz. To v případě typického jednobitového výstupu znamená šestnáctinásobnou úsporu paměti. To, co jednou do výstupní paměti vykreslí, již nikdy nečte zpět. Z tohoto návrhu však vyplývají jistá omezení:

PostScript nepracuje s průhledností. Je to jednoduchý fakt. Předchozí objekt buď zcela překryje, a nebo ho nechá beze změny. Z nuly či jedničky ve výstupní paměti nelze v případě průhlednosti odvodit novou hodnotu.

PostScript nepodporuje Floyd-Steinbergův rozptyl. Algoritmy difúze chyby, ke kterým FS patří, totiž vyžadují znalost výsledné hodnoty okolních pixelů ve vstupní bitové hloubce, což PostScript neumožňuje. Místo FS rozptylu je však možné použít tzv. stochastické rastry, které dávají podobný výsledek, ale pracují na jiném principu. Pokud na FS rozptylu trváme, je možné ho implementovat jako zákaznickou rastrovací funkci (ovšem s obrovskými paměťovými nároky).

PostScript a Ghostscript

Řekne-li se PostScript a UNIX, nelze neříci i Ghostscript. Jeho vývoj je podporovaný firmou Aladdin Enterprises a nyní též firmou Artifex Software (ta vyvíjí komerční OEM verze). Největší část kódu napsal L. Peter Deutsch.

Dnes zahrnuje implementaci PostScriptu Level 2 a téměř kompletní implementaci LL3. Ghostscript si poradí i s PDF a DPS. Většina ovladačů je na vysoké úrovni, připravena na ostré nasazení v praxi.

Ghostscript používá i mnoho jiných aplikací – tiskové ovladače, převodníky grafických formátů, grafické servery, prohlížeče a další.

Možnosti Ghostscriptu však nekončí pouhým rastrováním. Pomocné nástroje umějí mnohem víc: zjednodušovat postscriptový kód, převádět mezi PostScriptem, zapouzdřeným PostScriptem a PDF, počítat ohraničovací rámy apod.

Strukturovaný PostScript, DSC

Postscriptové ovladače a prohlížeče často potřebují provádět s postscriptovým souborem různé operace – vybrat jednu stránku, rotovat ji, rozdělovat stránky podle vlastností… Samotný postscriptový kód v tom není nijak nápomocen, a tak by musela každá taková aplikace rozumět celému postscriptovému kódu, interpretovat ho a poté vytvářet nový kód, což by bylo značně nepraktické. Naštěstí je většina postscriptových kódů vytvářena strojově a lze je poměrně snadno sestavit tak, aby se na začátku souboru nacházel „definiční blok“ (je to poněkud nepřesné označení, „definiční blok“ se ještě dělí na další pododdíly) a každá stránka tvořila samostatný objekt (a na konci byl ukončovací blok). Aby i nepostscriptové aplikace mohly snadno získat informaci o této struktuře, přidají se do PostScriptu komentáře, to jsou ony DSC (komentáře struktury dokumentu – Document Structure Comments). Pokud dokument splňuje podmínku nezávislosti stran a zároveň obsahuje DSC, říkáme, že se jedná o strukturovaný PostScript. Takový PostScript můžete prohlížet napřeskáčku v prohlížeči, vybrat pro tisk jen zvolené strany apod. Většina aplikací generuje právě takový PostScript (pozor na některé, jejichž výstup se sice tak tváří, ale ve skutečnosti strukturovaný není – např. výstup z MS-Wordu).

Zde je ukázka strukturovaných komentářů PostScriptu (vytvořeny programem dvips podle starší verze DSC-2.0):

%!PS-Adobe-2.0
%%Creator: dvips(k) 5.78 Copyright 1998 Radical Eye Software ...
%%Title: popisky.dvi
%%Pages: 1
%%PageOrder: Ascend
%%BoundingBox: 0 0 936 86
%%DocumentFonts: CenturyExpdCEBTBoldItalic CenturyExpdCEBTItalic
%%EndComments
%DVIPSCommandLine: dvips -Plino1200 -D1800 -tfilm1 popisky
%DVIPSParameters: dpi=1800, compressed
%DVIPSSource:  TeX output 2001.09.24:2244
... Zde se nacházejí definiční hlavičky ...
%%EndProlog
%%BeginSetup
... Zde se nacházejí nastavovací hlavičky ...
%%EndSetup
%%Page: 1 1
... Zde se nachází popis stránky 1 ...
%%Trailer
... Zde se nachází ukončovací sekvence ...
%%EOF

Pokud soubor naproti tomu nezačíná „%!PS-Adobe-“, ale třeba jen „%!“, značí to, že se jedná o nestrukturovaný PostScript.

V dalších pokračováních si ještě povíme více o EPS, PPD, mylných názorech na PostScript a o nekompatibilitách mezi aplikacemi.

Ohodnoťte jako ve škole:
Průměrná známka 2,95

Školení Google Analytics

  •  
    Jak vyhodnocovat úspěšnost reklamních kampaní.
  • Jak ovládat Google Analytics a najít v něm to, co potřebuji.
  • Co je to konverze a jak měřit hodnotu objednávek z webu.

Detailní informace o školení Google Analytics »

       
3 názory Vstoupit do diskuse
poslední názor přidán 23. 10. 2001 11:29

Tento text je již více než dva měsíce starý. Chcete-li na něj reagovat v diskusi, pravděpodobně vám již nikdo neodpoví. Pro řešení aktuálních problémů doporučujeme využít naše diskusní fórum.

Zasílat nově přidané příspěvky e-mailem