GIMP je mocný nástroj na interaktivní zpracování rastrové grafiky. Dokonce obsahuje i rozhraní pro psaní vlastních skriptů. Kromě Scheme a Perlu je k dispozici i rozhraní pro jazyk Python. Pomocí všech těchto skriptovacích jazyků máte přístup k drtivé většině funkcí GIMPu, takže není problém automatizovat jakýkoli postup, jež byl aplikován interaktivně. Existuje i několik webových stránek1, jež používají GIMP jako ``stroj'' zpracovávající grafické operace.
Ve většině případů jsou ale požadavky na automatizované úkony menší, než co všechno nabízí GIMP. Automatizovat budete chtít často pouze odstraňování šumu, zaostření fotografií, úpravu světlosti apod. Osobně jsem narazil na několik základních operací, které jsem byl nucen aplikovat na množství obrázků. Patří mezi ně zejména změna velikosti, převod formátů, rotace obrázků, spojení několika snímků do jednoho, orámování obrázku, vytváření animací a textových popisů snímků.
Poté co jste ode mne, v minulých článcích, slyšeli tolik chvály na editor GIMP, budete možná překvapeni, když nyní budu tvrdit, že pro všechny tyto úkony existuje lepší řešení, než je GIMP. Stejně tak, jako není GIMP vhodný jako implicitní prohlížeč obrázků, se nehodí pro tyto operace z jediného důvodu – je příliš obézní. Z hubeného editoru rastrů vyrostl „drobeček“, jež si z vaší volné paměti slupne, v každé svojí instanci, nezanedbatelný kousek.
I majitelé většího množství operační paměti, jež činí z +-20MB RAM zanedbatelnou hodnotu, jistě uvítají skupinu programů a knihoven, jež všechny uvedené operace zvládnou stejně dobře jako GIMP, akorát rychleji.
Přichází kouzelník
ImageMagick, jak se balík pro neinteraktivní zpracování rastrové grafiky jmenuje, se skládá z několika utilit a knihoven. Na tomto místě nebudu popisovat knihovny ImageMagick, protože tento článek není určen pro programátory. Budu popisovat jenom funkci utilit, jež mají pro konečného uživatele v momentě prvního seznámení větší appeal. Než si je postupně představíme, dovolím si poznamenat, že ImageMagick podporuje slušnou řádku formátů, a to buď nativně nebo s použitím externích utilit (včetně GIMPu). Přímo do ImageMagick je implementováno dostatek všeobecně rozšířených formátů, ale ani možnost použít externí utilitu není k zahození. Už jste někdy pracovali s mpeg1 encoderem z produkce univerzity v Berkeley? Tak vězte, že použití ImageMagick, jež externě volá mpegencode vám ušetří spoustu času.
Podívejme se ale na kalibr dodaných zbraní. Vybrat si můžeme hned z několika základních utilit. Display je zobrazovací utilita, jež umožňuje vykreslení libovolného podporovaného formátu na obrazovku X serveru. Import je utilita na snímání libovolného okna, včetně celého X desktopu. Animate slouží pro zobrazení animace na X display. Montage vytváří mozaiku z několika obrázků. Convert je utilita sloužící k převodu formátů. Mogrify umožňuje aplikovat filtry přímo na zdrojové obrázky. Identify určí, o jaký typ formátu se jedná a vypíše podrobnou statistiku o obrázku. Combine umí různým způsobem sloučit obrázky do jednoho. Poslední utilitou je XTP, jež slouží k práci s obrázky v síťovém prostředí.
Display
Tento jednoduchý nástroj pro zobrazování se hodí i v případech, kdy před aplikováním změn pomocí nástrojů jako convert nebo montage, chcete změny nejprve vidět. Všechny utility sdílejí stejný formát parametrů, takže je snadné nejprve vše ``nanečisto'' vyzkoušet a teprve poté aplikovat.
Display obsahuje i interaktivní editor. Ten vyvoláte pomocí levého tlačítka myši na oblasti právě zobrazovaného obrázku. Před hledáním správné syntaxe si tedy můžete nejprve vyzkoušet, co všechno ImageMagick umí.
Kromě jednoduchého zobrazování obrázku umí display vytvářet prezentace (slideshow), generovat náhledy obrázků, zobrazit obrázek do libovolného X okna nebo vypsat statistiku o obrázku. Všechny utility umožňují specifikovat typ souboru/filtr pomocí přípony, anebo předpony u každého souboru. Takže např. vygenerování náhledů všech JPEG obrázků v aktuálním adresáři můžete specifikovat pomocí display ‚vid:*.jpg‘, zobrazení jfif souboru s příponou gif pomocí display jpeg:obr.gif.
Jelikož je rozdíl, jestli obrázek nejdříve zmenšíte, a potom snížíte počet barev, nebo naopak, záleží v případě ImageMagick utilit na pořadí parametrů.
Jako většina unixových utilit i ImageMagick podporuje tzv. rourování, takže se můžete vyřádit používáním standardního vstupu/výstupu např. při vícenásobném filtrování jednoho obrázku.
Zajímavou je též možnost otevřít obrázek na vzdálený displej. Display tak můžete použít třeba ke znemožnění vašeho kolegy, když mu na monitor otevřete obrázek slečny v momentě, kdy řeší něco se svým nadřízeným. Jestli chcete způsobit kolegovi/kolegyni epileptický záchvat, stačí zadat následující příkaz:
animate -delay 5 -display kolega.firma.cz:0.0 *.jpg
Samozřejmě to předpokládá, že máte zabezpečena práva pro zobrazení na daném X serveru. Okno může samozřejmě zavřít, ale když ho ještě pošlete na desktop, uvidíte jak se bude, doslova, cukat :).
Ukázky použití
display -window root -geometry 1024×786! pozadi.jpgdisplay -backdrop -geometry 800×600 ‚vid:*.jpg‘zobrazí obrázek pozadi.jpg na X desktopu.
display http://jimmac.musichall.cz/screenshots/buzz1.pngVytvoří náhledy všech jpeg obrázků v adresáři a zobrazí je po obrázcích o velikosti 800×600. Celý obrázek orantluje, že není vidět na pozadí.
display jpeg:-Display umožňuje, stejně jako GIMP otevírat vzdálené obrázky.
import -window root pnm:- | display -window root –Načte obrázek ve formátu jpeg ze standardního vstupu.
display -geometry 800×600\> obr.jpgPoužijte před odchodem z pracovní stanice vašeho kolegy, kolegyně. S pobavením pozorujte kolegu, kolegyni jak zběsile kliká po desktopu a supí. :)
display -rotate –90\> obr.pngNa obrazovce 800×600 zobrazí celý obrázek. Když je větší, než toto rozlišení, bude zmenšen se zachováním proporcí. Všimněte si, že jsem musel zrušit speciální funkci znaku > pomocí zpětného lomítka (samozřejmě jsem to poprvé neudělal, a přišel tak o jeden obrázek :().
Zobrazí každý obrázek na výšku, tj. vždy, když je obrázek širší, než vyšší, bude otočen o –90 stupňů.
Convert
Tato utilitka je mocným konverzním nástrojem, jež umožňuje, kromě převodu z a do obrovského množství formátů, též provádět zároveň na konvertovaných snímcích základní transformační operace. Pakliže jste jenom zběžně shlédli možnosti programu display, znáte již většinu toho, co umí i convert.
Asi nejzajímavější novinkou je parametr draw. Tato volba umožňuje na obrázku vykreslit jednoduchá primitiva včetně textu. Máte-li potřebu automaticky generovat titulky pro web, ImageMagick je ideálním řešením. V případě kreslení postscriptového fontu ale závisí ImageMagick na X serveru, takže úplně ideální to také není. Lepší volbou je implementovaný TrueType engine (viz dále).
Vybrat si můžete z následujících primitiv:
point | bod |
line | úsečka |
rectangle | obdélník |
fillRectangle | vyplněný obdélník |
circle | kružnice |
fillCircle | kruh |
ellipse | elipsa |
fillEllipse | vyplněná elipsa |
polygon | dtto |
fillPolygon | vyplněný polygon |
color | vyplnit barvou |
matte | výplň vzorkem |
text | popiska |
image | vložit obrázek |
Před vlastním kreslením pravděpodobně budete chtít definovat barvu inkoustu pomocí ink. K vykreslení bodu stačí zadat souřadnice. Linka potřebuje souřadnice dvě. Pakliže si nepřejete antialiasovanou čáru, použijte +antialias. Obdélník se definuje zadáním souřadnic levého horního a pravého dolního rohu. Kružnice nestandardně nepoužívá poloměr, nýbrž kromě souřadnice středu definujete souřadnici některého bodu na okraji. Část elipsy je definována souřadnicí středu, výškou, šířkou a úhlem počátečního a koncového úhlu křivky (pro kompletní elipsu tedy 0,360). Polygon definujete sekvencí souřadnic jednotlivých bodů.
Pro výplň barvou máte možnost několika typů: point (přebarví cílový pixel), replace (přebarví všechny pixely s barvou totožnou s cílovým pixelem), flood (výplň souvislé barevné plochy), filltoborder (vyplní všechny sousední pixely, jež mají rozdílnou barvu), reset (změní barvu všech pixelů).
Protože se parametry draw často rozrostou do zrůdných velikostí, je rozumné vše uložit do souboru a ten pak použít jako atribut: -draw @soubor.draw.
Pro použití textu můžete specifikovat řez písma pomocí standardní masky X serveru (viz. příklad), nebo použít zápis -font @/cesta/k/fontu.ttf.
Ukázky použití
convert -enhance -despeckle -equalize \hnusny.png – | display -title ‚supr obrazek‘ –
convert -delay 20 -geometry 468×60! -colors 8 \Udělá se šeredným, tmavým a zrnitým obrázkem doslova kouzla …
+dither obr-0[0–3]?.jpg animace.mng
convert -colormap CMYK -size 1536×1024 \Vytvoří animovaný proužek ve formátu movable network graphic, bez použití ditheringu. Ne, že byste ho zobrazili někde jinde než v ImageMagick :).
obr?.pcd image%d.psd
convert -pen black -draw \Zkonvertuje obrázky z formátu Kodak PhotoCD do formátu editoru Photoshop, s použitím CMYK modelu interpretace barev. Nedělejte si ale iluze o tomto konverzním barevném algoritmu. Výrazně totiž ve výsledku převažuje složka K :(. Jde sice tento efekt kompenzovat např. pomocí -gamma 2.7, ale i tak je výsledek spíše neuspokojivý.
‚fillrectangle 700,570 900,600‘ -font
echo $font
\-pen white -draw ‚text 710,575 „právě vidíš %f“‘ \
picture-039.jpg – | display -
convert jimmac/doc/tex/gimp-kniha/gimp.ps[2–8] \Ukáže anotovaný obrázek. Pro text ``právě vidíš picture-039.jpg'' byl použit řez písma Verdana o velikosti 11 pixelů. Text je psán bílým písmem na černém obdélníku. V proměnné font by tedy mělo být něco jako ``-microsoft-verdana-medium-r-normal---110---p-*-iso8859–2''.
miff:- | animate -delay 100 -
Zobrazí slideshow stránek 2 až 8 se sekundovým intervalem (Něco pro absolventy kurzu rychlo-čtení).
Combine
S tímto programem můžete spojovat obrázky v jeden, za použití všemožných způsobů krytí.
Patrně nejdůležitějším je parametr compose, jež definuje právě způsob krytí obrázků. Máte k dispozici následující typy: over (součet), in (vyříznutí konturou obrázku), out (vyřízne opak kontury z in), atop (překrývající se objekty), xor (překrývající se oblasti budou prázdné), plus (přičítání RGB hodnot až do hodnoty 255), minus (totéž, ale odečítání), add (totéž co plus ale přesahující hodnoty znovu od nuly), subtract (obdobně jako minus, resp. add), difference (absolutní hodnota rozdílu, vhodné k porovnávání podobných obrázků), bumpmap (vytvoření plastického dojmu), replace (obrázek nahrazený zdrojovým obrázkem bez použití alfa kanálu).
Pomocí atributu stegano je též možné ``schovat'' do obrázku, obrázek jiný (steganografie).
Příklady použití
combine auto.png voda.jpg miff:- | display –combine -combine difference obr.png obr.jpg \Vytvoří montáž auta ve vodě. Samozřejmě to předpokládá, že je oblast kolem auta transparentní (matte/alfa kanál).
rozdil.png
Vizualizuje rozdíl způsobený ztrátovou kompresí JPEG.
Identify
Tato utilitka vám o obrázku poví krapet víc, než třeba file. Standardní výpis lze ještě ``rozkecat'' parametrem -verbose.
Mogrify
Tato utilita je v podstatě totožná s convert, ale pracuje přímo na originálních souborech. U této utility dvakrát platí staré známé ``dvakrát měř, jednou řež''. Spíše doporučuji vytvářet kopie pomocí convert a potom originály smazat …
Montage
Tento nástroj se hodí k vytváření dlaždic z obrázků. Už jsme se sice seznámili s vizuálním náhledem na obrázky v podobě filtru vid:, nicméně montage je daleko mocnější a dává vám daleko větší volnost při vytváření montáží podle vašeho gusta.
Příklady použití
montage -tile 2×8 -backgroundcolor black \-pen white -label „%f“ -geometry 200+10+10 \
picture-01*.jpg miff:- | display -
Vytvoří náhled na obrázky, o velikosti hrany maximálně 200px, barvu pozadí černou, desetipixelový rozestup mezi obrázky s bílým názvem souboru a dvěma sloupci, osmi řadami na stránku/obrázek.
Xtp
Poslední utilitou, kterou si představíme, je Xtp, nástroj pro vzdálenou práci s obrázky. V podstatě se jedná o alternativu k programu FTP, ale nevyžaduje interaktivní zadávání příkazů. Osobně raději používám wget, snarf nebo scp, nicméně možná se někomu z vás zalíbí.
Ukázky použití
xtp -retrieve ftp://nekde.cz/images/xtp -retrieve \Rekurzivní stažení obrázků.
ftp://uzivatel:heslo@nekde//root/pics/.*\.jpg
Stáhne všechny JPEG soubory z adresáře /root/pics. Autorizuje se jako uzivatel s heslem heslo.
Skripty
Filosofie ImageMagick je rozdílná od filosofie GIMPu. ImageMagick využijete zejména při opakovaném aplikování filtrů velkému množství obrázků, konverzi apod. Předpokládá to tedy alespoň základní znalost vašeho shellu, nebo nějakého skriptovacího jazyka, jako je Perl, Python nebo PHP (ano, PHP kompilované jako CGI skript lze úspěšně používat i mimo web).
Pro inspiraci uvedu následující bash skript, který zkonvertuje všechny JPEG obrázky v adresáři do formátů GIF a PNG, přitom odstraní šum, ekvalizuje barvy a upraví gamma korekci.
#!/bin/bash comment="(c) Jakub Steiner\n\nkonvertoval ImageMagick" for soubor in *.jpg do convert -comment "$comment" -geometry 200x100 -colors 8 \ -antialias $soubor $soubor-nahled.gif convert -equalize -noise -gamma 1.7 -despecle $soubor \ $soubor-filtr.png done
Závěrem
ImageMagickje k dispozici pro většinu unxových systémů, Windows NT/9X, MacOS, VMS a OS2. No a nakonec samozřejmost – ImageMagick je free software.
Od svého raného počítačového života jsem byl odchován grafickým uživatelským rozhraním. Všude, kam se podívám se dočtu, že je příkazová řádka mrtvá, překonaná právě ``klikacím'' rozhraním. Takže se ptám – chcete se uklikat k smrti, nebo sáhnout po dávkovém ImageMagick?
Hned vám odpovím dalším příkladem. Zkuste vyklikat třeba tohle:
ssh nekde.cz ‚cd /obrazky/jpeg; convert \
vid:.jpeg miff:-‘ | display miff:-
Jak jste se již dovtípili, umožní tento jediný příkaz vzdálené prohlížení obrázků ``bezpečným'' tunelem s použitím secure shellu. Všimněte si, že jsem použil nativní formát ImageMagick, MIFF. To proto, že v truecolor podporuje více obrázků v jednom, takže je možné zobrazovat vícestránkové náhledy.
Související odkazy
- http://www.imagemagick.org
- http://www.imagemagick.org/www/formats.html
- http://www.freetype.org
- http://www.gimp.org
- 1
- http://www.cooltype.com