Hlavní navigace

Grafika v UNIXu - vektorová grafika

12. 11. 2001
Doba čtení: 7 minut

Sdílet

Alternativou bitových map je vektorová grafika. Abychom mohli využít jejích výhod, musíme k tomu mít dobrý editor. Ve druhém dílu přehledu grafického softwaru jsem se lehce dotkl vektorových editorů. Protože toto téma vyvolalo bohatou diskusi, rozhodl jsem se k němu vrátit.

Vektorová grafika nám nabízí možnost obrázek libovolně zvětšovat, aniž by se objevily „zuby“. Při práci můžeme upravovat již nakreslené křivky. Obrázky lze bez ztráty kvality libovolně deformovat a tvarovat. Cenou za to je nutnost používat zcela jiné nástroje. Obecně lze říci, že vektorová grafika je vhodná pro tvorbu log, diagramů, sazbu apod. Pro zpracování obrázků však hraje prim grafika bitmapová. A vektorový editor by nám měl umožnit bitovou mapu vložit.

Donedávna byl jediným přenositelným systémem vektorové grafiky PostScript, jehož původním zaměřením byl tisk ve vysokých rozlišeních. Novější formát, SVG (Scalable Vector Graphics), byl naproti tomu již koncipován jako formát přenositelné vektorové grafiky. Z toho vyplývají drobné odlišnosti v jejich schopnostech.

Převodníky

Obecným převodníkem z PostScriptu do jiných formátů je pstoedit. Jedná se o program, který spustí speciálně inicializovaný Ghostscript, a ten pak místo rastrování zapisuje průběh kreslení. Umí převádět do mnoha formátů (gif, xfig, pdf, gnuplot, zploštělý PostScript s Bézierovými křivkami nebo bez nich, výměnný CAD formát DXF, LightWave 3D, RenderMan, Real3D, applet Java 1 nebo Java 2, formát Idraw, Tcl/Tk, HPGL, AI, Windows Meta File – WMF pro Windows 9×/NT, Enhanced Windows Meta File – EMF pro Windows 9×/NT, OS/2 meta file pro OS/2, PIC formát pro troff/groff, formát METAPOST, formát pro obrázek v programech TEX/LaTEX a LaTEX2e, obrázek pro Kontour, GNU Metafile pro plotutils/libplot, Sketch), další jsou dostupné jako externí moduly (např. FrameMaker MIF, CGM Format binární i textový, SVG, RTF). Některé z těchto modulů jsou ovšem komerční.

Do PostScriptu se většinou dá převádět velmi jednoduše – zachycením příkazů pro tisk.

Typickou úlohou bývá též převod čárové grafiky do grafiky vektorové, často nazývaný trasování. Tento převod je poměrně komplikovaným problémem a jeho vykonání závisí na množství parametrů, jakými jsou přesnost sledování křivky, rozpoznávání hran, hustota řídících bodů apod. Tento náročný úkol zvládá AutoTrace. Obsahuje trasovací knihovnu, kterou lze vestavět do aplikací, a jednoduchou aplikaci z příkazového řádku. Průběh trasování lze řídit nastavením třinácti parametrů. Umí převádět do formátů eps, ai, Sketch, SVG, xfig, emf, Elastic Reality Shape, Shockwave Flash a zvládá přímý výstup přes pstoedit do jeho formátů.

Vektorové editory

Za základní vlastnosti editoru lze považovat následující:

Bézierovy křivky: Jaký typ Bézierových křivek program kreslí? Interpolované, aproximované či obecné? (První dvě jmenované se někdy nepřesně označují jako „spline křivky“.) U obecných Bézierových křivek by mělo být možné změnit režim směrových vektorů na normální, symetrický a úhlový.

Vzorky: Umí program vzorky a vzorované čáry?

Import a export: Umí program pracovat s eps a s bitmapami? Umí program jednoduše exportovat? Lze z něj dostat např. EPS obrázek?

Za standardní vlastnosti, které již dále nerozepisuji, považuji podporu seskupování objektů a běžný editor křivek.

Pokročilé vlastnosti, které by podle mého názoru neměly v opravdu kvalitním editoru chybět, jsem seřadil podle užitečnosti:

Podpora češtiny: Vím, že podpora češtiny, alespoň pro kreslení a výstup pro PostScript LL3, znamená v mnohém z programů jen několik řádek kódu. Dokud je tam ale nikdo nedopíše, program neuspěje.

Rotace a zkosení: Program by měl umět rotovat a zkosovat objekty, případně i nelineárně deformovat.

Komplexní tvary: Vypořádá se program s objekty s dírou? Například PostScript má pro vyhodnocování děr hned dvě metody – sudá/lichá, kdy je bod součástí díry, je-li součástí sudého počtu objektů, a metoda podle směru kreslení – kdy se objekty kreslené po směru hodinových ručiček „odčítají“ od objektů kreslených po směru hodinových ručiček. Je-li výsledek nula, jde o díru (nebo okolí objektu).

Ořezové cesty: Cestu v programu by mělo být možné využít nejen jako objekt pro vyplňování, ale též jako ořezovou cestu – např. vložit bitmapový obrázek do útvaru omezeného Bézierovou křivkou.

Obarvení čárové grafiky: Pokud je obrázek zapsaný ve formátu čárové grafiky, měl by jej program umět obarvit libovolnou barvou.

Přechody (gradienty): Jsou užitečnou pomůckou pro návrh graficky zajímavých tiskovin. Počínaje PostScriptem LL3 jsou podporovány přímo, starší verze PostScriptu je musí vykreslovat jako soustavu barevných pruhů. Rozšířením přechodů je Gouraudovo stínování.

Operace nad písmy: V některých programech lze písmo jen obarvit. To je však poněkud málo. Písmo by mělo být použitelné i jako cesta a ořezová cesta, třeba i pro obrázek. Mělo by být možné převést písmo do křivek.

Volné kreslení: Tento nástroj mimořádně zvyšuje efektivitu práce – to, co nakreslíte myší nebo tabletem, se okamžitě převede do křivek. Není přitom nutné se starat o polohu řídících bodů.

Podpora barevných prostorů: RGB podporují všechny editory, ale jiné systémy, např. CMYK, Lab nebo přímé barvy, jsou též potřebné.

Hledej a zaměň barvu: Funkce záměny jedné barvy za jinou se občas hodí, stejně jako pojmenované barvy.

Poloprůhlednost: Podpora poloprůhlednosti sice není do PostScriptu zahrnuta (narozdíl od SVG), ale to neznamená, že by ji vektorový editor nemohl umět. Vektorový převod do PostScriptu by se pak odehrával výpočtem v útrobách editoru.

Animace: Některé vektorové editory mohou umět vytvářet vektorové animace.

Volná deformace Bézierových křivek: Pro editaci Bézierových křivek je užitečný speciální editor, ve kterém lze křivku editovat bez ohledu na polohu řídících bodů (ty se dopočítají automaticky).

Neinteraktivní vektorové editory

Tyto editory stojí v ústraní zájmu profesionálů. Přesto jejich schopnosti často vysoce převyšují možnosti editorů interaktivních.

Díky kvalitním převodníkům se ani při jejich použití nemusíme vzdát možnosti provést část práce v editoru interaktivním.

Pomineme-li přímou editaci PostScriptu v textovém editoru, vládnou poli neinteraktivních vektorových editorů tři programy, které si příliš nekonkurují:

METAPOST

METAPOST vznikl na konci osmdesátých let minulého století jako modifikace o deset let staršího METAFONTu (o něm jsme se zmínili v desátém dílu našeho seriálu). Jeho jazyk však byl poněkud upraven, aby výstupem nebyly znaky písma, ale PostScriptové obrázky. Svou sílu si však jazyk zachoval. Pokud budete potřebovat kreslit matematické ilustrace, vytvářet evolventní křivky (které jste si možná v dětství kreslili na papír pomocí soupravy ozubených koleček) nebo třeba napsat program, který nakreslí lotos, složený z n lístků v daném pořadí, rozevřených pod úhlem γ, je METAPOST tím nejlepším řešením.

Pomocné balíky maker zajistí spojení s TEXem, postscriptový výstup pak použitelnost výstupu v libovolné aplikaci.

METAPOST najdeme ve většině distribucí TEXu.

Následuje malá ukázka, jak lze pracovat s METAPOSTem:

beginfig(1);
path xlist;
xlist=(0,0)--(0,0)..(-.75pt,3.75pt)..(0,7.5pt)--
  (0,7.5pt)..(.75pt,3.75pt)..cycle;
pickup pencircle scaled .4pt;
def list expr x =
% cullit; % pouze pro METAFONT
 unfill xlist rotated x shifted (7.5pt,0);
% cullit; % pouze pro METAFONT
 draw xlist rotated x shifted (7.5pt,0);
enddef;
def listy expr x =
 list x;
 list -x;
enddef;
listy 15;
listy 30;
listy 45;
listy 60;
list 0;
endfig;
end
výstup ukázky

pstricks

Pstricks je balíkem maker pro TEX. Funguje ve většině TEXových formátů a najdeme ho ve většině jeho distribucí. Na rozdíl od METAPOSTu však pstricks přináši možnosti PostScriptu do jazyka TEXu. Jde tedy vlastně o klasický vektorový editor v neinteraktivní podobě. Pokud projdeme výše uvedené požadavky, které se mohou vztahovat i na neinteraktivní editory, pak pstricks neumějí jen podporu nezávislých a přímých barevných prostorů, poloprůhlednost a animace (obarvení čárové grafiky pak jen pomocným trikem). Jedná se o zatím nejsilnější vektorový editor v oblasti otevřeného kódu.

Následující příklad demonstruje použití pstricks ve spojení s holým Plain TEXem (použitím vyšších formátů se můžeme vyhnout těžkopádnosti holého TEXu):

\input pstricks
\input epsf
\font\smhelv phvro at 20pt
\font\medelv phvb at 25pt
\font\bighelv phvb at 100pt
\nopagenumbers
\smhelv
\vbox to\vsize{
\vskip\vsize
\hbox{\psclip{%
  \pscustom[linestyle=none,fillstyle=solid,fillcolor=yellow]{%
    \newpath
    \moveto(0,0)%
    \lineto(\hsize,.5\vsize)%
    \lineto(0,\vsize)%
    }}%
    \vbox to0pt{\vss\baselineskip36pt
      \leaders
    \vbox{\prevdepth0pt\setbox4\hbox{{\lightgray http://www.root.cz}\enskip}%
      \hbox{\hskip-.5\wd4\cleaders\hbox{\copy4\enskip}\hskip\hsize}%
      \hbox{\cleaders\hbox{\copy4\enskip}\hskip\hsize}%
    \vskip-\prevdepth}%
    \vskip1.1\vsize
      \nointerlineskip\vbox to 0pt{
        \vskip-.48\vsize
        \vss\rightline{\epsfxsize4cm\epsfbox{tuxsit.eps}\hskip1cm}\vss
        \vskip.48\vsize}%
    }%
\endpsclip}
\vskip-\vsize
\advance\rightskip8mm
\vskip50mm
\baselineskip72pt
\leftskip0ptplus1fil
\rightskip0pt
\parfillskip0pt
\bighelv
ROOT
\vfil
\medelv
informace (nejenom) ze sv\v eta Linuxu
\vskip50mm
\hrule height0pt
}
\bye
výstup ukázky

Gnuplot

CS24_early

Po programu Gnuplot sáhnou všichni, kteří potřebují vytvářet grafy a diagramy. Protože na Rootu vyšel nedávno o programu Gnuplot celý seriál, přenechám popis povolanějším.

Příští díl věnujeme interaktivním editorům.

Byl pro vás článek přínosný?

Autor článku