praktyka
Praca z grafiką z linii komend
Praca z grafiką
z linii komend
Piotr Wolny
W latach 70-tych ubiegłego wieku do gospodarstw domowych trafiły pierwsze komputery, które poza
wyświetlaniem tekstu, posiadały możliwość kontrolowania pojedynczych pikseli ekranu, innymi słowy
wyświetlania grafiki. Wtedy też natychmiast pojawiły się pierwsze programy do rysowania i oglądania
obrazków, a obróbka obrazków nierozłącznie zaczęła kojarzyć się z narzędziami i z graficznym
interfejsem użytkownika (GUI). Skąd więc pomysł, aby wiele lat pózniej tworzyć i opisywać narzędzia
graficzne działające z linii komend?
o narzędzia działające z linii komend można nych prostych operacji będzie nam łatwiej wykonać wła-
sięgać z różnych powodów. Pierwszym i chy- śnie w ten sposób niż w GUI.
ba najczęstszym jest możliwość łatwego po- Coraz rzadszą choć wciąż jeszcze spotykaną jest sy-
Pwtórzenia raz zaprojektowanej operacji dowol- tuacja, w której jakąś operację na plikach graficznych da
ną ilość razy. Jeśli na przykład chcemy umieścić na jed- się wykonać wyłącznie z linii komend. Z reguły progra-
nym obrazku nasz podpis, najprościej będzie uruchomić mów o jakichś specjalistycznych funkcjach (jak np. dcraw
Gimp-a, załadować obydwa obrazki i połączyć. Jeśli jed- do importu zdjęć z aparatów cyfrowych w formacie RAW
nak chcemy to zrobić w odniesieniu do kilkuset czy wię- czy enblend do poprawiania wyglądu panoram) można
cej plików, Gimp czy podobne programy przestają być używać za pośrednictwem GUI. Co jednak, gdy pracuje-
użyteczne również dlatego, że posługiwanie się w nich my zdalnie przez SSH i ściąganie plików do obróbki lo-
skryptami czy makropoleceniami wcale nie należy do kalnej zajmowałoby wiele czasu? Wtedy oczywiście rów-
prostych. Najlepszym rozwiązaniem będzie wtedy linia nież nieoceniona staje się wiedza o programach działają-
komend. cych z linii komend.
Innym przykładem zastosowania programów dzia- Tym bardziej, że większość operacji, które można wy-
łających z linii komend są niektóre operacje tak proste, konać na plikach z grafiką rastrową, w analogiczny spo-
że zwyczajnie nie warto uruchamiać żadnego progra- sób można przeprowadzić na coraz bardziej popularnych
mu z GUI, aby je wykonać. Jeśli chcemy na przykład po- PDF-ach.
łączyć dwa obrazki w jeden duży, w każdym programie
z GUI będzie to od nas wymagało przynajmniej kilkuna- Zmiana rozmiarów zdjęć
stu kliknięć myszą, a czasem nawet liczenia rozmiarów. Skalowanie to jedna z najczęściej wykonywanych opera-
Z linii komend będzie to kilka literek oraz nazwy dwóch cji na plikach graficznych często potrzebna, gdy chce-
plików. Jeśli nabierzemy trochę wprawy, to wiele podob- my umieścić zdjęcia w internecie lub przesłać je przez
50 czerwiec 2007
linux@software.com.pl
praktyka
Praca z grafiką z linii komend
e-mail. Można ją wykonać na wiele rozmai- Program convert, poza -resize posiada dać ich przyszłość, bowiem są one rozwija-
tych sposobów, dlatego doskonale nadaje jeszcze dwie inne opcje, które robią prawie ne bardziej przez prywatną firmę niż przez
się do zaprezentowania możliwości linii ko- to samo, a ich składnia jest identyczna. Jeśli społeczność open source. Dziś jednak obję-
mend. zastąpimy -resize poprzez -scale, to użyty zo- te są licencją GPL i można bez większych
Najpopularniejszym programem, które- stanie inny, znacznie szybszy algorytm ska- problemów skompilować je samodzielnie.
go możemy użyć w tym celu jest convert z zes- lowania. Jeśli zaś użyjemy -thumbnail, zosta- Wystarczy po ściągnięciu zródeł ze strony
tawu programów ImageMagick. Pakiet Ima- nie użyty ten sam algorytm co przy -resize, domowej (w momencie pisania tego arty-
geMagick (poświęcę mu dalej najwięcej miej- jednak dodatkowo zostaną usunięte wszyst- kułu najnowszy był plik exact-image-0.3.4.
sca) znajdziemy w każdej dystrybucji. Ma kie dodatkowe dane (komentarze, exif itp.) tar.bz2) rozpakować je i wydać tradycyjne
on ogromne możliwości, których oczywi- niepotrzebne przy miniaturkach. polecenia:
ście w całości nie sposób opisać w jednym Program convert i ImageMagick to zdecy-
artykule, na szczęście ma on również bar- dowanie najpopularniejszy wybór użytkow- ./configure; make; make install.
dzo dobrą dokumentację, gdzie na przykła- ników Linuksa, jednak istnieją w stosunku
dach pokazane są możliwości wszystkich do niego alternatywy. Jedną z nich jest fork Pomimo ogromu warnings programy powin-
programów z pakietu (patrz ramka W sieci). z projektu ImageMagick o nazwie Graphics ny się skompilować.
W tym artykule przedstawię kilka najprost- Magick (http://www.graphicsmagick.org/). Pa- W efekcie otrzymujemy m.in. program
szych przykładów jego zastosowania, któ- kiet o tej nazwie znajdziemy w Debianie econvert. Choć ma on mniejsze możliwości
re mam nadzieję zachęcą do korzystania oraz Ubuntu #########. Jeśli nasza dystry- niż opisywany wcześniej convert, używa się
z niego nawet użytkowników nieobezna- bucja go nie zawiera, możemy posłużyć się go bardzo podobnie. Najistotniejszą różnicą
nych z linią komend. gotowym pakietem rpm dostępnym na stro- jest konieczność podania opcji -i przed nazwą
Jak można zatem przeskalować obrazek nie projektu. GraphicsMagick odłączył się od pliku zródłowego oraz -o przed nazwą pliku
z linii komend? Zakładając, że nasz plik na- ImageMagick, aby zapewnić bardziej stabil- wynikowego, np:
zywa się obraz.jpg i w konsoli przeszliśmy ne API dla programistów. Rzadziej wpro-
do katalogu, w którym on się znajduje (np. wadzane są więc do niego nowe funkcje, za econvert -i obraz.jpg
cd /home/piotr/obrazy), możemy wydać pole- to jednak często okazuje się, że GraphicsMa- --scale 50% -o maly-obraz.jpg.
cenie: gick działa szybciej.
Składnia poleceń jest prawie identyczna Bez żadnych dodatkowych opcji prędkość
convert obraz.jpg - jak w przypadku ImageMagick najważniej- działania jest podobna jak w przypadku co-
resize 50% obraz-maly.jpg. szą różnicą jest to, że każde polecenie poprze- nvert, jednak jakość pliku wynikowego jest
dzamy komendą gm. Jeśli więc wpiszemy: zauważalnie lepsza. Za to zamieniając --scale
Tak więc najpierw podajemy nazwę orygi- na --nearest-scale, przyspieszymy program pra-
nalnego obrazka, pózniej opcje (może ich być convert test.jpg wie trzykrotnie.
więcej), na końcu zaś nazwę pliku wyniko- -resize 50% thumb.png,
wego. Zamiast podawania wartości w pro- Operacje na wielu plikach
centach możemy określić szerokość w pikse- uruchomimy program z pakietu ImageMa- Znamy już różne proste metody skalowania
lach pliku wynikowego wysokość zostanie gick. Wpisując zaś: obrazów. Jak jednak wykonać je szybko i wy-
dostosowana proporcjonalnie: godnie na wielu plikach? Oczywiście w takim
gm convert test.jpg przypadku wpisywanie wiele razy podobnej
convert obraz.jpg - -resize 50% thumb.png, komendy nie ma sensu. Moim zdaniem naj-
resize 200 obraz-maly.jpg. lepiej wtedy zapoznać się z programem find.
użyjemy GraphicsMagick. Dopisując dodatko- Jest to bardzo uniwersalne narzędzie do od-
Analogicznie możemy podać również do- wo z przodu polecenie time, możemy zmie- najdywania plików i katalogów na podstawie
celową wysokość obrazka (w miejsce -resize rzyć różnicę szybkości działania w naszych dowolnych kryteriów. My skorzystamy teraz
200 wpisujemy -resize x100) albo też dodając zastosowaniach. z jego opcji -exec, która umożliwia wykonanie
wykrzyknik określić na sztywno pożąda- Inną alternatywą dla ImageMagick jest dowolnego polecenia z nazwą znalezionego
ną wysokość i szerokość (-resize "200x100!"). biblioteka i programy ExactImage (http:// pliku jako argumentu. Tak więc find będzie-
Oczywiście podawane przez nas wartości www.exactcode.de/oss/exact-image/). Są one my mogli stosować z dowolnym z wcześniej
mogą służyć zarówno do zmniejszania, jak dziś na dość wczesnym etapie rozwoju opisanych programów.
i powiększania obrazków. i właściwie nie wiadomo, jak będzie wyglą- Najszybciej jest wytłumaczyć działanie
czegoś na przykładzie, zobaczmy więc nastę-
pujące polecenie:
Listing 1. Przykład z dokumentacji ImageMagick
convert obraz.jpg \ find . -maxdepth 1 -name '*.jpg
-font /usr/share/fonts/truetype/antpb.ttf -pointsize 20 \ ' -exec convert '{}
-draw "gravity south \ ' -thumbnail"x100"
fill black text 0,12 'Nasz podpis' \ miniatury/'{}' ';'
fill white text 1,11 'Nasz podpis' " \
obraz-podpisany.jpg Pierwszy argument określa, w jakim katalo-
gu szukamy plików (pojedyncza kropka ozna-
www.lpmagazine.org 51
praktyka
Praca z grafiką z linii komend
cza katalog bieżący), następny argument po- Inne operacje graficzne convert obraz.jpg
wstrzymuje program przed schodzeniem do Wiemy już, jak wykonać jedną z najprost- -frame 40x40+40+10
podkatalogów, po parametrze -name okre- szych operacji, czyli zmianę rozmiaru obraz- obraz-ramka.png.
ślamy pliki, do których ma zostać zastoso- ków, a także, w jaki sposób powtórzyć ją na
wana nasza operacja w tym przypadku na dowolnie wielkim zbiorze plików. Proponuję poeksperymentować, dodając
podstawie ich rozszerzenia. Następnie po- Programy z pakietu ImageMagick umożli- do tej komendy dodatkowe opcje -border-
między -exec oraz znakami ";" wpisujemy wiają wykonanie w analogiczny sposób wie- color oraz -mattecolor z wartością rgb poda-
komendę, która będzie wykonywana. Śred- lu znacznie bardziej zaawansowanych opera- ną za pomocą trzech liczb, jak w przykła-
nik na końcu jest niezbędny, aby powło- cji na plikach. Oczywiście nie sposób opisać dzie wcześniejszym. Ciekawe efekty można
ka wiedziała, w którym miejscu kończy się tutaj ich wszystkich, wspomnę jedynie takie, uzyskać również podając opcję -frame wie-
nasza komenda. Musimy go jednak podać które wydają się najciekawsze albo najbar- lokrotnie. Oczywiście, gdy już wypracuje-
w cudzysłowach, najlepiej pojedynczych. dziej potrzebne. my sobie ładną ramkę, możemy powtórzyć
Znaki {} zastępowane są nazwą każdego Większość ludzi uważa, że zdjęcia ładniej operację jej tworzenia dla wszystkich pli-
z plików znalezionych przez find. One rów- wyglądają w ramkach. Z linii komend może- ków przy pomocy find.
nież powinny znalezć się w cudzysłowach, my łatwo tworzyć rozmaite obramowania, Umieszczając zdjęcia w internecie, bar-
zwłaszcza jeśli w nazwach naszych plików począwszy od najprostszych, np: dzo często je podpisujemy. Choć istnieją
są spacje. W efekcie więc nasza komenda bę- programy z GUI, które potrafią to wykonać
dzie uruchomiona tak wiele razy, ile plików convert obraz.png szybko dla wielu zdjęć, jeśli użyjemy narzę-
zostanie odnalezionych przez find. W tym -bordercolor "rgb(1,255,100)" dzi z pakietu ImageMagick, otrzymamy bar-
przypadku wygenerowane miniatury znaj- -border 25x5 obraz-ramka.png. dzo szerokie możliwości często dostępne
dą się w podkatalogu miniatury, możemy gdzie indziej.
jednak nadpisać pliki wyjściowe, podając Parametry jak łatwo się domyślić określa- Przykładowe komendy robią się jed-
dwukrotnie samo {}. ją kolor ramki oraz jej rozmiar. Nieco ciekaw- nak dosyć długie, dlatego dla zwiększenia
Więcej informacji na temat działania pro- szy efekt uzyskamy stosując opcję -raise albo czytelności podaję je w kilku liniach, z któ-
gramu find można znalezć w jego podręczni- +raise wtedy brzegi obrazka będą przyciem- rych każda za wyjątkiem ostatniej koń-
ku (man find). Jeszcze bardziej zaawansowa- nione lub rozjaśnione, tworząc złudzenie głę- czy się odwrotnym ukośnikiem \ . Wpisu-
ne możliwości dostaniemy używając progra- bi. Na przykład: jąc te komendy w konsoli, możemy robić to
mu xarg (man xarg), ich opis jednak nie mie- w wielu liniach ze znakiem \ , tak jak po-
ści się już w tematyce artykułu. convert obraz.jpg niżej albo w jednej linii, pomijając wtedy
Stosowanie find jest najbardziej uni- +raise 40x40 obraz-ramka.png. znak \ .
wersalną metodą, czasem jednak można się Poniższy przykład zaczerpnięty z nie-
bez niej obejść i wykonać operację na wielu Oczywiście szerokość ramki dobieramy tak, wielkimi zmianami z dokumentacji Image-
plikach znacznie prościej. Jeśli wystarczą aby wynosiła co najmniej 1% wielkości obraz- Magick umieści na naszym obrazku biały
nam możliwości, jakie oferuje ImageMagic, ka. Jeśli mamy convert w wersji przynajmniej tekst z czarną obwódką, dzięki czemu będzie
w takich przypadkach zamiast convert mo- 6.3.2 (convert -version), możemy wykonać on zawsze widoczny niezależnie od kolo-
żemy użyć programu mogrify. Jego główną jeszcze ciekawsze obramowanie udające rystyki.
różnicą w stosunku do convert jest to, że do- zdjęcie z aparatu Polaroid. Najlepiej nadaje W powyższym przykładzie obraz.jpg
myślnie zmienia on plik wejściowy zamiast się ono dla miniaturek fotografii. Przykłado- oraz obraz-podpisany.jpg to oczywiście pliki
tworzyć nowy. Tak więc, o ile w convert we polecenie może wyglądać tak: wejściowy i wyjściowy. Czcionka (której
musieliśmy podać plik wejściowy i wyjścio- wielkość w punktach określa następny para-
wy, to w mogrify podajemy wyłącznie plik convert obraz.jpg metr) została podana w postaci bezwzglę-
wejściowy oraz oczywiście opcje. Dodat- -thumbnail 200 dnej ścieżki do pliku truetype nie musi być
kowo zamiast pełnej nazwy pliku możemy -background gray40 ona zainstalowana, a w każdym systemie
podać wzorzec, np. '*.jpg'. Tak więc polece- +polaroid obraz-mini.png. może znajdować się gdzie indziej. W ko-
nie: lejnym parametrze określiliśmy położenie
Kolejną metodą tworzenia ramek, tym ra- napisu jako południowe (south), czyli u dołu
mogrify -thumbnail 200 '*.jpg' zem wyglądających nieco trójwymiarowo, jest na środku. Alternatywnie możemy podać
opcja -frame, która przejmuje cztery parame- NorthWest, North, NorthEast, West, Center,
zamieni wszystkie pliki *.jpg w katalogu bie- try: szerokość, wysokość oraz szerokość we- East, SouthWest, SouthEast. Podpis podaje-
żącym na miniatury o szerokości 200 punk- wnętrznego i zewnętrznego skosu. Na przy- my dwukrotnie taki sam, bowiem najpierw
tów. Możemy jednak uniknąć usunięcia pli- kład: będzie on napisany na czarno, a pózniej na
ków wejściowych, dodając np. opcję -format
png. Na przykład poleceniem: Listing 2. Przykładowe polecenia
mogrify -format png jhead -model
-thumbnail 200 '*.jpg' "FinePix S9500" -nffuji-%Y_%m_%d-%H_%M_%S *.jpg
jhead -model
utworzymy miniaturki w formacie png, po- "Canon PowerShot A60" -nfcanon-%Y_%m_%d-%H_%M_%S *.jpg
zostawiając pliki wejściowe bez zmian.
52 czerwiec 2007
praktyka
Praca z grafiką z linii komend
biało. Listę nazw kolorów w ImageMagick fdupes -r /home/user/ Ponadto przy pomocy opcji -quality z pro-
można uzyskać poleceniem: katalog-z-obrazkami. gramami mogrify lub convert możemy szyb-
ko zmienić stopień kompresji JPEG naszych
convert -list Color Opcja -r spowoduje przechodzenie do pod- plików, np:
katalogów. Jeśli dodamy opcję -d, program
Dokumentacja ImageMagick zawiera ogrom- będzie pytał, który z duplikatów zachować, mogrify -quality 50 '*.jpg'
ną ilość bardzo zaawansowanych sposo- usuwając wszystkie pozostałe. Alternatyw-
bów użycia opcji rysowania i oznaczania nie możemy wywołać program z opcją -f lub:
tekstem. Pisząc znacznie dłuższe polecenia, i przekierować jego wyjście do jakiegoś pli-
możemy uzyskać dużo ładniej wyglądające ku, np: find . -name '*.jpg'
napisy. Jeśli jednak zależy nam na ładnym -exec convert
oznaczeniu obrazków, często lepszym wy- fdupes -r -f katalog >/tmp/lista. -quality 50 {} {} \;.
borem może być przygotowanie osobnego
pliku graficznego zawierającego tekst z na- W tym przypadku w pliku /tmp/lista bę- Jeśli jesteśmy przy tematyce konwersji
szym podpisem lub nasze logo. Następnie dzie lista plików, które można bezpiecznie i rozmiarów zdjęć, nie można pominąć bar-
możemy łatwym poleceniem nałożyć ten usunąć. Można napisać skrypt, który z niej dzo ciekawego narzędzia o nazwie jhead.
plik na obrazek, tworząc coś w rodzaju pi- skorzysta albo też korzystając z funkcji Przy jego pomocy możliwe są operacje na
sma wodnego. Najlepsze efekty uzyskamy znajdz i zamień w dowolnym edytorze tek- nagłówku EXIF (tworzonym przez cyfrowe
oczywiście wtedy, gdy plik z naszym zna- stu dopisać tam przed każdą nazwą pliku aparaty fotograficzne) oraz innych dodatko-
kiem zawiera przezroczystość zamiast zwy- komendę rm i uruchomić ten plik polece- wych danych w plikach JPEG. Pierwszym
kłego tła. niem: zastosowaniem, jakie może się przydać jest
Zakładając, że mamy plik znak.png i chce- usunięcie z plików wszystkich dodatko-
my nałożyć go na obraz.jpg uzyskując ob- sh /tmp/lista wych danych przy pozostawieniu same-
raz-zaznaczony.jpg, polecenie może wyglądać go obrazu. Można to wykonać dla wszyst-
następująco: Program fdupes działa bardzo szybko, ale kich obrazków w bieżącym katalogu pole-
znajdzie tylko i wyłącznie pliki identyczne. ceniem jhead -purejpg *.jpg. W ten spo-
composite -watermark 30% Na zupełnie innej zasadzie działa findima- sób nie tylko zaoszczędzimy po nawet 10kb
-gravity north znak.png gedupes, który analizuje wygląd obrazków, na każdym zdjęciu, ale przede wszystkim
obraz2.jpg obraz-znaczony.jpg. w ten sposób znajdując pliki identyczne lub usuniemy dane, które możemy uznawać za
całkiem podobne. Jeśli więc ten sam obraz prywatne, czyli np. posiadany model apa-
Podane 30% to oczywiście stopień odci- nagramy w różnych formatach, zostanie on ratu, data wykonania zdjęcia, parametry
śnięcia naszego znaku. Gdy chcemy, aby potraktowany jako duplikat. Z drugiej stro- ekspozycji itp.
nasza praca została zabezpieczona przed ny findimagedupes wymaga bardzo dużo cza- To oczywiście nie jedyne zastosowanie
kadrowaniem, możemy użyć samego -tile su i pamięci, zwłaszcza na większych zbio- programu jhead. Doskonale potrafi on bowiem
zamiast -gravity north. Nastąpi wtedy wy- rach plików. Zamiast z linii komend moż- zmienić nazwy plików, korzystając z zapisa-
pełnienie znakiem całego obrazu. Zamiast na go wywołać również z GUI programu nej w nagłówku EXIF daty wykonania zdję-
-watermark możemy też wypróbować -dis- Gqview, jednak mi osobiście wcale nie wy- cia. Na przykład polecenie:
solve. dało się to wygodniejsze.
Po znalezieniu duplikatów możemy za- jhead -nfzdjecie-%Y_%m_%d
Zarządzamy zbiorem zdjęć stanowić się nad zmianą formatu przecho- -%H_%M_%S *.jpg
Gdy posiadamy aparat cyfrowy, nasz dysk wywanych zdjęć. Konwersja między róż-
w mniejszym czy większym tempie wypeł- nymi formatami przy pomocy programów uporządkuje nasze fotografie według daty.
nia się plikami jpg. Korzystając z linii ko- z pakietu ImageMagick jest banalnie prostą Jeśli plik nie będzie miał nagłówka EXIF,
mend możemy podjąć różne zabiegi, aby operacją. Na przykład polecenie: zostanie użyta data z systemu plików. Uży-
utrzymać w naszym zbiorze porządek. wając dodatkowo opcji -model, możemy po-
Pierwszym problemem, jaki może się mogrify -format jpg segregować zdjęcia na podstawie apara-
pojawić w dużym zbiorze zdjęć są poja- -quality 90 '*.tif' tów, którymi zostały wykonane. Na przy-
wiające się duplikaty, czyli te same zdję- kład najpierw przy pomocy np. head *.jpg
cia ściągnięte z aparatu wielokrotnie i znaj- zamieni wszystkie TIFF-y w bieżącym kata- sprawdzamy, jakie różne wartości wystę-
dujące się najczęściej w różnych katalogach logu na pliki JPEG z jakością kompresji 90 pują u nas w polu Camera model. Następ-
pod innymi nazwami. Programem, który (domyślna jakość w ImageMagick to 75). Kon- nie, korzystając z nich, wprowadzamy róż-
bardzo szybko potrafi odnalezć takie pli- wersji można dokonywać też przy pomo- ne nazwy plików. Przykładowo przy posia-
ki nawet w ogromnym zbiorze jest fdupes. cy programu convert wystarczy w nazwie danych przeze mnie aparatach były to pole-
Program ten oblicza sumy md5 wszystkich pliku docelowego podać pożądane roz- cenia (Listing 2).
badanych plików, w istocie więc ma ma- szerzenie ImageMagick obsługuje ponad Warto wiedzieć, że nagłówek EXIF, który
ło wspólnego z grafiką komputerową po- 100 różnych formatów. Najprostszy przyk- jest najczęściej usuwany podczas edycji pli-
za faktem, że często przydaje się przy pli- ład: ku w programach graficznych można przy-
kach graficznych. Najczęstszy sposób jego wrócić, korzystając również z jhead. Oczy-
użycia to: convert plik.jpg plik.tif. wiście pod warunkiem, że posiadamy ory-
54 czerwiec 2007
praktyka
Praca z grafiką z linii komend
ginalny plik z nieuszkodzonymi danymi. Należy zwrócić uwagę na użyty tutaj for- PDF bardzo polecam program Sam2p (http:
Następujące polecenie skopiuje nagłówek mat dla tymczasowych plików, miano- //www.inf.bme.hu/~pts/sam2p/) on jako je-
z pliku oryginalny.jpg na zmodyfikowany.jpg: wicie MIFF (The Magick Image File Format). dyny nie trafił jeszcze do wszystkich dys-
Jest to wewnętrzny format programów Ima- trybucji (choć jest przynajmniej w Debianie
jhead -te oryginalny.jpg geMagick i zapisywanie do niego jest sto- i Ubuntu). Można jednak łatwo zainstalo-
zmodyfikowany.jpg. sunkowo najszybsze. Dla plików tymcza- wać go nawet ze zródeł po ściągnięciu
sowych możemy też używać innych forma- pliku sam2p-latest.tar.gz, rozpakowaniu
Oczywiście w ten sposób możemy udawać , tów bezstratnych, np. BMP czy TIFF. Nigdy i przejściu do nowo utworzonego katalo-
że zdjęcie zostało wykonane na innym sprzę- nie należy za to używać JPEG czy GIF, gdyż gu (u mnie sam2p-0.45) wystarczą polece-
cie lub w innych warunkach niż w rzeczy- wiązać się to będzie ze stratą czasu i ja- nia:
wistości. Dodatkowo w podręczniku pro- kości.
gramu man jhead można znalezć opis wy- Ostatnią operacją na plikach graficz- ./configure enable-lzw
konania tego polecenia na wielu plikach nych, o której chciałbym wspomnieć jest --enable-gif; make;
jednocześnie. stworzenie filmu w formacie AVI ze wszyst- make install.
kich zdjęć z danego katalogu. Przy użyciu
Inne operacje z linii komend mencoder'a taki film z pokazem slajdów Czynnością, którą najczęściej zdarza mi się
Jakie inne operacje warto umieć wykonać z li- utworzymy bardzo szybko nawet przy wie- wykonywać z linii komend jest tworzenie
nii komend? Cóż, moim zdaniem ich lista jest lu zdjęciach. Przykładowe polecenie przy pliku PDF z wielu obrazków w JPEG lub
dosyć długa. Przede wszystkim nie wspo- rozmiarze docelowym 640x480 i zmianie TIFF. Mogą to być skany jakiegoś dokumen-
mniałem jeszcze o programie identify, który klatki co pół sekundy może wyglądać na- tu albo nawet zwykłe zdjęcia konwersja
drukuje na konsoli informacje o pliku graficz- stępująco: do PDF jest niezłą metodą na wygodne
nym. Wystarczy wpisać: przesłanie ich do podglądu przez e-mail,
mencoder "mf://*.jpg" -mf fps= tym bardziej, że dostajemy łatwą kontrolę
identify [nazwa_pliku] 0.5 -vf scale=640:480 nad rozmiarem pliku wynikowego.
-o wyjscie.avi -ovc lavc Jak można utworzyć plik z jednym ob-
lub: -lavcopts vcodec=mpeg4. razkiem na stronę? Musimy rozpocząć od
konwersji każdego obrazka do osobnego
identify -verbose [nazwa_pliku]. Tak utworzony plik bez problemu obejrzy- pliku PDF. Można to wykonać przy pomo-
my na komputerze. Jeśli jednak chcemy cy omawianego już wcześniej programu co-
W tym drugim przypadku poza typem, roz- stworzyć pokaz MPEG, by zapisać go na pły- nvert, na przykład wpisując
dzielczością i rozmiarem zobaczymy tak- cie DVD-Video, aby móc go obejrzeć w do-
że wiele zaawansowanych danych, np. sto- wolnym sprzętowym odtwarzaczu DVD, convert -page a5 foto.jpg strona1.pdf
pień kompresji czy statystyki dotyczące ko- powinniśmy posłużyć się GUI programu Di-
lorów. giKam, gdzie wybieramy Narzędzia->Utwórz Funkcja -page jest oczywiście opcjonalna,
Znając rozmiar obrazka, możemy po- pokaz slajdów MPEG. a dodatkowo możemy użyć też omawia-
dzielić go na kilka mniejszych przy pomocy nych wcześniej -scale i -quality, dzięki cze-
opcji -crop programu convert. Na przykła: Przetwarzanie plików PDF mu będziemy mieli kontrolę nad rozmia-
Pliki PDF (ang. Portable Document Format) rem tworzonego pliku PDF.
convert obraz.jpg systematycznie zdobywają coraz większą Zamiast convert do tworzenia PDF-ów
-crop 200x200+500+600 popularność jako stosunkowo niewielkie z obrazków możemy użyć programu sam2p.
kawalek.jpg i łatwe w tworzeniu, a także niezawodne Ma on co prawda zdecydowanie mniej op-
w przeciwieństwie do wielu innych for- cji, jednak swoje zadanie wykonuje dosko-
stworzy plik kawalek.jpg o rozmiarach 200x matów zapisu danych praktycznie zawsze nale, tworząc często mniejsze pliki i działa-
200 zawierający fragment obraz.jpg od piksela wyglądają tak samo na różnych kompute- jąc wielokrotnie szybciej. Przykładowe je-
o położeniu x=500 i y=600. Częściej niż dzie- rach i systemach operacyjnych. Choć Linux go użycie może wyglądać w ten sposób:
lenie obrazków przydaje się ich łączenie. Je- nie jest dobrze wspierany przez firmę, któ-
śli obrazki mają być łączone poziomo od le- ra stworzyła ten standard, w naszym syste- sam2p -c ijg:50 foto.jpg strona.pdf
wej do prawej, posługujemy się opcją -ap- mie mamy niezłe narzędzia do tworzenia
pend, np: i modyfikacji plików PDF. W tym artyku- Przy pomocy opcji -c ijg:50 ustawiamy jakość
le wspomnę o tych, których używam z linii kompresji JPEG (w przedziale od 1 do 100).
convert 1.png 2.png 3.png komend. Program ten nie potrafi skalować plików, jed-
+append rzad1.miff. Na początek lista programów, które bę- nakże sterowanie poziomem kompresji do-
dą nam potrzebne. Zapewne mamy już za- skonale sprawdza się w osiąganiu pożąda-
Następnie przy łączeniu obrazków w pionie instalowany pakiet z ImageMagick, podob- nych rozmiarów plików PDF.
używamy -append, np: nie zresztą jak Ghostscript (pakiet o tej samej Aby szybko skonwertować wszystkie ob-
nazwie, ewentualnie gs-gpl lub gs-esp). Przy- razki do plików PDF, możemy użyć progra-
convert rzad1.miff rzad2.miff dadzą nam się również pakiety xpdf-utils mu find, podobnie jak w opisywanym wcze-
-append calosc.tif. lub poppler-utils oraz pdftk, czyli PDF Toolkit. śniej punkcie Operacje na wielu plikach , na
Do szybkiej konwersji obrazków na format przykład:
www.lpmagazine.org 55
praktyka
Praca z grafiką z linii komend
find . -name '*.jpg' z najstarszych wersji standardu PDF, czyli 1.2 konwersji w drugą stronę można użyć
-exec sam2p (które odpowiada wersji 3.0 oprogramowa- programu html2ps wynik jego działania
-c ijg:50 {} {}.pdf ';' nia Adobe Acrobat). Analogicznie przy pomocy można przekonwertować z Postscriptu przy
ps2pdf13 i psd2pdf14 możemy tworzyć pliki użyciu ps2pdf. Ciekawsze możliwości ma
Za to do operacji złączenia powstałych stron w nieco nowszej wersji standardu. jednak program e2ps, którego można uży-
PDF w jeden dokument użyjemy programu Pliki PDF można łatwo rozdzielić na wać np. w ten sposób:
pdftk: poszczególne strony przy pomocy komen-
dy np: cat /etc/apache/httpd.conf
pdftk *.pdf cat output | a2ps | ps2pdf14
calosc.pdf. pdftk plik.pdf burst - moj_apacz.pdf
output strona-%02d.pdf.
Na jego stronie domowej można znalezć wię- W wyniku otrzymamy zaskakująco ładnie
cej przykładów wykonania tej operacji na Wszystkie parametry po burst są opcjonalne sformatowany dokument.
różne sposoby. program użyje wtedy domyślnych nazw
Gdy mamy już gotowy plik PDF, może- stron w postaci pg_#####.pdf. Zamiast wy- Zakończenie
my zapoznać się z narzędziami, które po- dzielać wszystkie strony do osobnych pli- Programy działające z linii komend mogą do-
trafią go podzielić, konwertować czy zmo- ków możemy część dokumentu, np. strony skonale przydać się nie tyko programistom
dyfikować. Na początek jednak powinni- 2-5, umieścić w osobnym pliku: czy inżynierom oprogramowania, ale rów-
śmy poznać dokładnie nasz materiał, naj- nież zwykłym użytkownikom, którzy chcą
lepiej przy pomocy programu pdfinfo. Po pdftk plik.pdf cat 2-4 na przykład zrobić ciekawe rzeczy ze swoimi
wydaniu komendy pdfinfo [nazwa_pliku_ output strony2-5.pdf. zdjęciami z wakacji.
pdf] dowiemy się m.in. jaki program stwo- Opisane tutaj możliwości w zakresie ob-
rzył ten dokument, poznamy datę utworze- Pliki PDF łączymy jeszcze prościej polece- róbki grafiki z linii komend to w istocie tyl-
nia, liczbę stron czy rozmiar papieru. Naj- niem: ko mała namiastka tego, co da się zrobić, ko-
ważniejszą informacją będzie jednak wer- rzystając z darmowych linuksowych narzę-
sja standardu PDF (PDF version). Jeśli jest pdftk 1.pdf 2.pdf 3.pdf dzi. Dużo więcej interesujących przykładów
to 1.6 lub 1.7, to niestety możemy spodzie- cat output 123.pdf. i bardziej zaawansowane opisy można zna-
wać się pewnych problemów z działaniem lezć przede wszystkim na stronach projek-
niektórych narzędzi linuksowych. Starsze Jedną z ciekawszych możliwości pdftk tu ImageMagick, gdzie zapraszam wszystkich
wersje standardu powinny działać bez pro- jest umieszczanie znaku wodnego w tle zainteresowanych.
blemów. wszystkich stron dowolnego pliku PDF. Gdy dużo zajmujemy się grafiką pod Linuk-
Chcąc stworzyć plik PDF, który jest bar- Nasz znak wodny będzie doskonale wi- sem, na pewno mamy sporo plików XCF. Na-
dziej pewny zarówno w obróbce jak i przy doczny pod tekstem albo pod innymi czę- wet jeśli nie mamy w systemie GIMP-a, korzy-
oglądaniu na różnych komputerach, może- ściowo przezroczystymi obiektami. Jeśli stając wyłącznie z linii komend, możemy przy
my wygenerować go na nowo przy pomocy jednak w pliku PDF występuje jakiś nie- pomocy programu xcf2png spłaszczyć plik
programu ps2pdf. Wpisując np: przezroczysty obiekt (np. zdjęcie), to ono XCF i skonwertować do formatu PNG. Wy-
przykryje nasz dodatkowy znak. Zabawę starczy podać nazwę pliku zródłowego i po
ps2pdf12 stary.pdf nowy.pdf musimy rozpocząć od stworzenia jednej opcji - o nazwę wyjściowego pliku PNG. Pro-
strony PDF zawierającej nasz znak wod- gram xcf2png znajdziemy w pakiecie xcftools.
uzyskamy plik w nowy.pdf z tą samą zawar- ny najczęściej jakiś jasnoszary rysunek Gdy już skończymy zabawę z obrazka-
tością jednak stworzony przez dosyć pew- lub tekst. Oczywiście możemy to zrobić mi, być może chcielibyśmy przesłać je pocz-
ne narzędzie, a dodatkowo będący w jednej z linii komend, wygodniej chyba jednak bę- tą elektroniczną? To oczywiście też jest moż-
dzie w OpenOffice, skąd można wyekspor- liwe z linii komend. Pomocny będzie pro-
tować szybko gotowy PDF. Jeśli nasz znak gram biabam, dostępny w większości dys-
wodny znajduje się w pliku znak.pdf, a plik, trybucji. Jego podstawowe użycie z jednym
który chcemy oznaczyć to nasz.pdf, to wpi- plikiem i jednym adresatem może wyglądać
sujemy następującą komendę: następująco:
pdftk nasz.pdf biabam plik.jpg -s
background znak.pdf "temat listu"
output gotowy.pdf adres@odbiorcy.com.
Na zakończenie omawiania plików PDF Po wydaniu tego polecenia program popro-
warto wspomnieć jeszcze o programie pdf- si o wpisanie treści maila. Aby zakończyć, na-
tohtml (część pakietu poppler-utils) przy leży w pustej linii (czyli po naciśnięciu [En-
jego pomocy można zapoznać się z teksto- ter]) nacisnąć [Ctrl]+[d]. Poczta zostanie wy-
wą zawartością pliku PDF przy pomocy do- słana przy użyciu lokalnie dostępnego ser-
Rysunek 1. Plik PDF wraz z dołączonym znakiem
wolnej przeglądarki w tym również dzia- wera SMTP, który oczywiście musi być skon-
wodnym
łających z linii komend lynx czy w3m. Do figurowany.
56 czerwiec 2007
Wyszukiwarka
Podobne podstrony:
2008 06 Programowanie grafiki [Programowanie]2008 06?ytor grafiki wektorowej Inkscape [Grafika]2007 06 22 29 Stawiarski06 Praca układu pomp odśrodkowych instrukcja2007 06 Fit for the Future the New Ext4 Filesystem2007 01 Praca dla fizjoterapeutówPolecenia wykonywane z linii komend w Linuksiepomiary 11 06 2007 062007 06 And Cut Lives Video Editor2007 06 UML – potrzeba standaryzacji notacji [Inzynieria Oprogramowania]2007 06 PiggybackI1 Prototypowanie algorytmów sterowania pracą elastycznej linii w środowisku PLC S7 30006 Praca układu pomp odśrodkowych2007 06 Amarok–wypasiony wilk [Poczatkujacy]06 Praca inzyniera2007 06 Weryfikacja nadawcy–dylematy administratora [Bezpieczenstwo]więcej podobnych podstron