- předchozí článek - následující článek - obsah - úvodní stránka -

Linuxové noviny Duben 1998

Jak jsem vyráběl prezentaci

Jan "Yenya" Kasprzak, 15. února

Účastníci Linuxového semináře na Cikháji měli možnost vyslechnout moji přednášku na téma "Firewall pod Linuxem". Slajdy, které jsem tam promítal, jsou k dispozici i na Internetu http://www.linux.cz/cikhaj/yenya. Již na semináři jsem byl několikrát dotazován, jaké nástroje byly použity k výrobě těchto obrázků. A právě této otázce se budu věnovat v článku, který právě čtete.

Promítání

Začnu od konce - od výsledného efektu. Výsledkem mého snažení byly běžné bitmapové obrázky ve formátu PNG (Portable Network Graphics http://www.cdrom.com/pub/png/). Tyto obrázky jsem promítal na monitor a tedy i na plátno prohlížečem xv. Tento program je pro promítání obrázků velmi vhodný. Umí zobrazovat postupně několik obrázků, jejichž jména může uživatel specifikovat například z příkazové řádky. Takže moje prezentace se spouštěla následujícím příkazem:

$ xv stranka*.png

Prohlížeč xv lze ovládat z klávesnice - pro prezentace postačí vědět, že mezerníkem se zobrazí další obrázek a pomocí BackSpace předchozí obrázek. Dalším kladem tohoto programu je, že nemusíte složitě laborovat s umístěním okna - jsou-li obrázky stejně velké jako obrazovka, xv je automaticky zobrazí přes celou velikost obrazovky s tím, že horní lišta okna ani rámečky nejsou viditelné.

Sazba textu

Zpět na začátek - k vlastnímu vytváření textu. Text jsem sázel v TeXu s formátem eplain Karla Berryho (doporučuji vaší pozornosti - tento formát mírně rozšiřuje plain TeX s tím, že na rozdíl od LaTeXu nevnucuje uživateli žádný konkrétní styl sazby). Jako písmo jsem použil font Charter od firmy Bitstream, které je dostupné volně v každé distribuci XFree86. Počeštění této rodiny písem (stejně jako fontu IBM Courier, použitého pro strojopisné texty) jsem provedl balíkem fontinst a spoustou ruční práce. Obrázky jsem kreslil programem XFig a importoval do dvi souboru jako encapsulated PostScript.

Výsledné slajdy jsou tvaru landscape tedy "naležato". Toho jsem dosáhl tak, že jsem nastavil \vsize=5in. Významný text slajdu tedy leží v horní polovině stránky A4.

Od TeXu k bitmapě

Významným meziproduktem na cestě k výsledné prezentaci jsou soubory, obsahující ve formě polotónového (černo-šedo-bílého) obrázku jednotlivé stránky. Napsal jsem si krátký shellový skript, který realizuje převod z DVI do těchto obrázků:

#!/bin/sh
dvips -t a4 -f cikhaj98 | \
  gs -dSAFER -sDEVICE=pgmraw -r400x400 -q \
  -dNOPAUSE -sOutputFile=stranka%03d.pgm -
for i in stranka*.pgm; do
  pnmcut 80 0 3200 2400 $i >$i.cropped
  pnmscale -xscale 0.25 -yscale 0.25 \
  $i.cropped >$i
  rm $i.cropped
done

Tedy pomocí dvips převedu prezentaci do PostScriptu, pomocí GhostScriptu převedu jednotlivé stránky do pgm (v rozlišení čtyřikrát větším, než budu dále potřebovat), výsledný pgm soubor oříznu na požadované rozměry programem pnmcut a pomocí pnmscale zmenším na čtvrtinu (tedy 800 krát 600 bodů) a získám tím i antialiasing (novější GhostScript umí antialiasing sám, ale tehdy jsem ještě tuto verzi neměl nainstalovanou).

Barevná magie - GIMP na scéně

Nyní už zbývá takto vytvořené polotónové obrázky vzít, nabarvit text na žluto, doplnit k textu černý, trochu neostrý stín, pod nadpis vložit vodorovnou čáru se žluto-červeno-žlutým barevným přechodem a stínem ve stejném stylu a pod to všechno vložit pozadí, přecházející shora dolů od světle modré do tmavě modré.

[ Gimp ]

Udělat zmíněné není žádný problém - stačí k tomu libovolný alespoň trochu slušný editor bitmapových obrázků (z komerčních vzpomenu například Adobe Photoshop). Ovšem udělat tohle pro sedmadvacet slajdů pokaždé stejně, to už jen tak jednoduché není. Pominu-li možnost dělat to sedmadvacetkrát ručně, což může napadnout asi jen notorického uživatele předpředloňských Windows, zbývá najít způsob, jak výše popsané operace realizovat dávkově.

Jednou z možností je balík NetPBM, jehož součásti - programy pnmcut a pnmscale jsme viděli v akci výše. Nakonec jsem se ale rozhodl, že tento balík není pro moje účely dostačující. Další alternativou je program Gimp http://www.gimp.org. Pokud jste snad o Gimpu ještě neslyšeli: jde o velmi kvalitní rozšiřitelný program pro manipulaci s obrázky. Podívejte se na WWW stránku Gimpu, tam je uvedeno více. Na tomto místě zmíním jen pár zajímavostí: v Gimpu byl mimo jiné nakreslen známý linuxový tučňák http://www.isc.tamu.edu/~lewing/linux/. Vedlejším produktem vývoje Gimpu je i toolkit gtk+, jeden z nejlepších toolkitů pro X11 (na gtk+ je založeno i uživatelské objektové rozhrani GNOME http://www.gnome.org).

Program Gimp má tu skvělou vlastnost, že jej lze programovat. Jednak lze dopisovat různé filtry a grafické efekty pomocí mechanismu plug-inů, a jednak každou operaci, kterou v Gimpu může uživatel udělat vyvoláním funkce menu nebo stiskem tlačítka myši, lze též zavolat jako proceduru interního skriptovacího jazyka. Implicitně má Gimp vestavěný skriptovací jazyk s názvem script-fu. Tento jazyk je variantou funkcionálního programovacího jazyka Scheme (pro ty, kdo vůbec neví o co jde: je to vzdáleně podobné LISPu, který znáte třeba z Emacsu, a který se zejména vyznačuje na můj vkus nadměrným množstvím kulatých závorek). Docela by mě zajímalo, proč autoři Gimpu zvolili tento jazyk, když na Internetu roste velké množství již hotových přilinkovatelných (embeddable) interpreterů (například Perl nebo Tcl) s rozumnějšími jazyky, než je Scheme.

Naštěstí podobný vztah ke script-fu má více lidí. Marc Lehmann pcg@goof.com napsal modul pro Perl, který zpřístupní interní funkce Gimpu perlovému skriptu. Tento modul lze nalézt na libovolném zrcadle CPANu, například na adrese ftp://ftp.fi.muni.cz/pub/perl/modules/by-module/GIMP. Tento modul se standardním způsobem zkompiluje a nainstaluje. Dále je nutno vzít program Net-Server z tohoto modulu a nakopírovat jej do adresáře, kde Gimp hledá plug-iny (napříkad do ~/.gimp/plug-ins/).

Net Server - Gimp po síti

Plug-in Net-Server je po startu Gimpu dostupný z menu Extensions. Tento plug-in po spuštění vytvoří UNIXový socket v adresáři /tmp a přes tento socket mu perlovské skripty mohou zadávat příkazy. Tyto příkazy jsou pak předány Gimpu, který je vykoná. Takto můžeme mít někde spuštěný Gimp a z jiného okna spouštět jednotlivé skripty. Nebudu uvádět celý skript, který jsem používal pro vytváření prezentace. Skript najdete v adresáři s Linuxovými novinami.

Je vidět, že každý takový skript musí obsahovat podprogram net, který je vykonáván Net-Serverem. Dále může obsahovat podprogram query, který slouží k psaní plug-inů v Perlu. Tento podprogram volá Gimp při startu, pokud je script v adresáři plug-ins. Dále skript musí obsahovat zavolání jádra Gimpu - rutiny gimp_main.

Závěr

Tento článek má sloužit jednak jako odpověď na dotazy typu "Jak jsi to udělal?" ohledně mé přednášky na Cikháji, a jednak jako upozornění na Gimp - poměrně silný program pro editaci a tvorbu grafiky s vlastním skriptovacím prostředím. Myslím, že Gimp si zaslouží samostatný článek v tomto časopise, ne-li přímo seriál článků. Ještě uvidím, co se s tím dá dělat... *


- předchozí článek - následující článek - obsah - úvodní stránka -