2007 06 Praca z grafiką z linii komend [Grafika]

background image

praktyka

Praca z grafiką z linii komend

50

czerwiec 2007

praktyka

Praca z grafiką z linii komend

51

www.lpmagazine.org

lin

ux

@

so

ftw

ar

e.

co

m

.p

l

Praca z grafiką

z linii komend

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óźniej tworzyć i opisywać narzędzia
graficzne działające z linii komend?

Piotr Wolny

P

o narzędzia działające z linii komend można
sięgać z różnych powodów. Pierwszym i chy-
ba najczęstszym jest możliwość łatwego po-
wtórzenia raz zaprojektowanej operacji dowol-

ną ilość razy. Jeśli na przykład chcemy umieścić na jed-
nym obrazku nasz podpis, najprościej będzie uruchomić
Gimp-a, załadować obydwa obrazki i połączyć. Jeśli jed-
nak chcemy to zrobić w odniesieniu do kilkuset czy wię-
cej plików, Gimp czy podobne programy przestają być
użyteczne – również dlatego, że posługiwanie się w nich
skryptami czy makropoleceniami wcale nie należy do
prostych. Najlepszym rozwiązaniem będzie wtedy linia
komend.

Innym przykładem zastosowania programów dzia-

łających z linii komend są niektóre operacje tak proste,
że zwyczajnie nie warto uruchamiać żadnego progra-
mu z GUI, aby je wykonać. Jeśli chcemy na przykład po-
łączyć dwa obrazki w jeden duży, w każdym programie
z GUI będzie to od nas wymagało przynajmniej kilkuna-
stu kliknięć myszą, a czasem nawet liczenia rozmiarów.
Z linii komend będzie to kilka literek oraz nazwy dwóch
plików. Jeśli nabierzemy trochę wprawy, to wiele podob-

nych prostych operacji będzie nam łatwiej wykonać wła-
śnie w ten sposób niż w GUI.

Coraz rzadszą choć wciąż jeszcze spotykaną jest sy-

tuacja, w której jakąś operację na plikach graficznych da
się wykonać wyłącznie z linii komend. Z reguły progra-
mów o jakichś specjalistycznych funkcjach (jak np. dcraw
do importu zdjęć z aparatów cyfrowych w formacie RAW
czy enblend do poprawiania wyglądu panoram) można
używać za pośrednictwem GUI. Co jednak, gdy pracuje-
my zdalnie przez SSH i ściąganie plików do obróbki lo-
kalnej zajmowałoby wiele czasu? Wtedy oczywiście rów-
nież nieoceniona staje się wiedza o programach działają-
cych z linii komend.

Tym bardziej, że większość operacji, które można wy-

konać na plikach z grafiką rastrową, w analogiczny spo-
sób można przeprowadzić na coraz bardziej popularnych
PDF-ach.

Zmiana rozmiarów zdjęć

Skalowanie to jedna z najczęściej wykonywanych opera-
cji na plikach graficznych – często potrzebna, gdy chce-
my umieścić zdjęcia w internecie lub przesłać je przez

background image

praktyka

Praca z grafiką z linii komend

50

czerwiec 2007

praktyka

Praca z grafiką z linii komend

51

www.lpmagazine.org

e-mail. Można ją wykonać na wiele rozmai-
tych sposobów, dlatego doskonale nadaje
się do zaprezentowania możliwości linii ko-
mend.

Najpopularniejszym programem, które-

go możemy użyć w tym celu jest convert z zes-
tawu programów ImageMagick. Pakiet Ima-
geMagick
(poświęcę mu dalej najwięcej miej-
sca) znajdziemy w każdej dystrybucji. Ma
on ogromne możliwości, których oczywi-
ście w całości nie sposób opisać w jednym
artykule, na szczęście ma on również bar-
dzo dobrą dokumentację, gdzie na przykła-
dach pokazane są możliwości wszystkich
programów z pakietu (patrz ramka W sieci).
W tym artykule przedstawię kilka najprost-
szych przykładów jego zastosowania, któ-
re – mam nadzieję – zachęcą do korzystania
z niego nawet użytkowników nieobezna-
nych z linią komend.

Jak można zatem przeskalować obrazek

z linii komend? Zakładając, że nasz plik na-
zywa się obraz.jpg i w konsoli przeszliśmy
do katalogu, w którym on się znajduje (np.
cd /home/piotr/obrazy), możemy wydać pole-
cenie:

convert obraz.jpg -
resize 50% obraz-maly.jpg.

Tak więc najpierw podajemy nazwę orygi-
nalnego obrazka, później opcje (może ich być
więcej), na końcu zaś nazwę pliku wyniko-
wego. Zamiast podawania wartości w pro-
centach możemy określić szerokość w pikse-
lach pliku wynikowego – wysokość zostanie
dostosowana proporcjonalnie:

convert obraz.jpg -
resize 200 obraz-maly.jpg.

Analogicznie – możemy podać również do-
celową wysokość obrazka (w miejsce -resize
200
wpisujemy -resize x100) albo też dodając
wykrzyknik określić „na sztywno” pożąda-
ną wysokość i szerokość (-resize "200x100!").
Oczywiście podawane przez nas wartości
mogą służyć zarówno do zmniejszania, jak
i powiększania obrazków.

Program convert, poza -resize posiada

jeszcze dwie inne opcje, które robią prawie
to samo, a ich składnia jest identyczna. Jeśli
zastąpimy -resize poprzez -scale, to użyty zo-
stanie inny, znacznie szybszy algorytm ska-
lowania. Jeśli zaś użyjemy -thumbnail, zosta-
nie użyty ten sam algorytm co przy -resize,
jednak dodatkowo zostaną usunięte wszyst-
kie dodatkowe dane (komentarze, exif itp.)
niepotrzebne przy miniaturkach.

Program convert i ImageMagick to zdecy-

dowanie najpopularniejszy wybór użytkow-
ników Linuksa, jednak istnieją w stosunku
do niego alternatywy. Jedną z nich jest fork
z projektu ImageMagick o nazwie Graphics
Magick
(http://www.graphicsmagick.org/). Pa-
kiet o tej nazwie znajdziemy w Debianie
oraz Ubuntu #########. Jeśli nasza dystry-
bucja go nie zawiera, możemy posłużyć się
gotowym pakietem rpm dostępnym na stro-
nie projektu. GraphicsMagick odłączył się od
ImageMagick, aby zapewnić bardziej stabil-
ne API dla programistów. Rzadziej wpro-
wadzane są więc do niego nowe funkcje, za
to jednak często okazuje się, że GraphicsMa-
gick
działa szybciej.

Składnia poleceń jest prawie identyczna

jak w przypadku ImageMagick – najważniej-
szą różnicą jest to, że każde polecenie poprze-
dzamy komendą

gm

. Jeśli więc wpiszemy:

convert test.jpg
-resize 50% thumb.png,

uruchomimy program z pakietu ImageMa-
gick
. Wpisując zaś:

gm convert test.jpg
-resize 50% thumb.png,

użyjemy GraphicsMagick. Dopisując dodatko-
wo z przodu polecenie time, możemy zmie-
rzyć różnicę szybkości działania w naszych
zastosowaniach.

Inną alternatywą dla ImageMagick jest

biblioteka i programy ExactImage (http://
www.exactcode.de/oss/exact-image/
). Są one
dziś na dość wczesnym etapie rozwoju
i właściwie nie wiadomo, jak będzie wyglą-

dać ich przyszłość, bowiem są one rozwija-
ne bardziej przez prywatną firmę niż przez
społeczność open source. Dziś jednak obję-
te są licencją GPL i można bez większych
problemów skompilować je samodzielnie.
Wystarczy po ściągnięciu źródeł ze strony
domowej (w momencie pisania tego arty-
kułu najnowszy był plik exact-image-0.3.4.
tar.bz2
) rozpakować je i wydać tradycyjne
polecenia:

./configure; make; make install.

Pomimo ogromu warnings programy powin-
ny się skompilować.

W efekcie otrzymujemy m.in. program

econvert. Choć ma on mniejsze możliwości
niż opisywany wcześniej convert, używa się
go bardzo podobnie. Najistotniejszą różnicą
jest konieczność podania opcji -i przed nazwą
pliku źródłowego oraz -o przed nazwą pliku
wynikowego, np:

econvert -i obraz.jpg
--scale 50% -o maly-obraz.jpg.

Bez żadnych dodatkowych opcji prędkość
działania jest podobna jak w przypadku co-
nvert
, jednak jakość pliku wynikowego jest
zauważalnie lepsza. Za to zamieniając --scale
na --nearest-scale, przyspieszymy program pra-
wie trzykrotnie.

Operacje na wielu plikach

Znamy już różne proste metody skalowania
obrazów. Jak jednak wykonać je szybko i wy-
godnie na wielu plikach? Oczywiście w takim
przypadku wpisywanie wiele razy podobnej
komendy nie ma sensu. Moim zdaniem naj-
lepiej wtedy zapoznać się z programem find.
Jest to bardzo uniwersalne narzędzie do od-
najdywania plików i katalogów na podstawie
dowolnych kryteriów. My skorzystamy teraz
z jego opcji -exec, która umożliwia wykonanie
dowolnego polecenia z nazwą znalezionego
pliku jako argumentu. Tak więc find będzie-
my mogli stosować z dowolnym z wcześniej
opisanych programów.

Najszybciej jest wytłumaczyć działanie

czegoś na przykładzie, zobaczmy więc nastę-
pujące polecenie:

find . -maxdepth 1 -name '*.jpg
' -exec convert '{}
' -thumbnail"x100"
miniatury/'{}' ';'

Pierwszy argument określa, w jakim katalo-
gu szukamy plików (pojedyncza kropka ozna-

Listing 1.

Przykład z dokumentacji ImageMagick

convert obraz.jpg \
-font /usr/share/fonts/truetype/antpb.ttf -pointsize 20 \
-draw

"gravity south \

fill black text 0,12 'Nasz podpis' \
fill white text 1,11 'Nasz podpis' "

\

obraz-podpisany.jpg

background image

52

czerwiec 2007

praktyka

Praca z grafiką z linii komend

53

www.lpmagazine.org

praktyka

Praca z grafiką z linii komend

cza katalog bieżący), następny argument po-
wstrzymuje program przed schodzeniem do
podkatalogów, po parametrze -name okre-
ślamy pliki, do których ma zostać zastoso-
wana nasza operacja – w tym przypadku na
podstawie ich rozszerzenia. Następnie po-
między -exec oraz znakami ";" wpisujemy
komendę, która będzie wykonywana. Śred-
nik na końcu jest niezbędny, aby powło-
ka wiedziała, w którym miejscu kończy się
nasza komenda. Musimy go jednak podać
w cudzysłowach, najlepiej pojedynczych.
Znaki {} zastępowane są nazwą każdego
z plików znalezionych przez find. One rów-
nież powinny znaleźć się w cudzysłowach,
zwłaszcza jeśli w nazwach naszych plików
są spacje. W efekcie więc nasza komenda bę-
dzie uruchomiona tak wiele razy, ile plików
zostanie odnalezionych przez find. W tym
przypadku wygenerowane miniatury znaj-
dą się w podkatalogu miniatury, możemy
jednak nadpisać pliki wyjściowe, podając
dwukrotnie samo {}.

Więcej informacji na temat działania pro-

gramu find można znaleźć w jego podręczni-
ku (

man find

). Jeszcze bardziej zaawansowa-

ne możliwości dostaniemy używając progra-
mu

xarg

(

man xarg

), ich opis jednak nie mie-

ści się już w tematyce artykułu.

Stosowanie find jest najbardziej uni-

wersalną metodą, czasem jednak można się
bez niej obejść i wykonać operację na wielu
plikach znacznie prościej. Jeśli wystarczą
nam możliwości, jakie oferuje ImageMagic,
w takich przypadkach zamiast convert mo-
żemy użyć programu mogrify. Jego główną
różnicą w stosunku do convert jest to, że do-
myślnie zmienia on plik wejściowy zamiast
tworzyć nowy. Tak więc, o ile w convert
musieliśmy podać plik wejściowy i wyjścio-
wy, to w mogrify podajemy wyłącznie plik
wejściowy oraz oczywiście opcje. Dodat-
kowo zamiast pełnej nazwy pliku możemy
podać wzorzec, np. '*.jpg'. Tak więc polece-
nie:

mogrify -thumbnail 200 '*.jpg'

zamieni wszystkie pliki *.jpg w katalogu bie-
żącym na miniatury o szerokości 200 punk-
tów. Możemy jednak uniknąć usunięcia pli-
ków wejściowych, dodając np. opcję -format
png
. Na przykład poleceniem:

mogrify -format png
-thumbnail 200 '*.jpg'

utworzymy miniaturki w formacie png, po-
zostawiając pliki wejściowe bez zmian.

Inne operacje graficzne

Wiemy już, jak wykonać jedną z najprost-
szych operacji, czyli zmianę rozmiaru obraz-
ków, a także, w jaki sposób powtórzyć ją na
dowolnie wielkim zbiorze plików.

Programy z pakietu ImageMagick umożli-

wiają wykonanie w analogiczny sposób wie-
lu znacznie bardziej zaawansowanych opera-
cji na plikach. Oczywiście nie sposób opisać
tutaj ich wszystkich, wspomnę jedynie takie,
które wydają się najciekawsze albo najbar-
dziej potrzebne.

Większość ludzi uważa, że zdjęcia ładniej

wyglądają w ramkach. Z linii komend może-
my łatwo tworzyć rozmaite obramowania,
począwszy od najprostszych, np:

convert obraz.png
-bordercolor "rgb(1,255,100)"
-border 25x5 obraz-ramka.png.

Parametry – jak łatwo się domyślić – określa-
ją kolor ramki oraz jej rozmiar. Nieco ciekaw-
szy efekt uzyskamy stosując opcję -raise albo
+raise – wtedy brzegi obrazka będą przyciem-
nione lub rozjaśnione, tworząc złudzenie głę-
bi. Na przykład:

convert obraz.jpg
+raise 40x40 obraz-ramka.png.

Oczywiście szerokość ramki dobieramy tak,
aby wynosiła co najmniej 1% wielkości obraz-
ka. Jeśli mamy convert w wersji przynajmniej
6.3.2 (

convert -version

), możemy wykonać

jeszcze ciekawsze obramowanie „udające”
zdjęcie z aparatu Polaroid. Najlepiej nadaje
się ono dla miniaturek fotografii. Przykłado-
we polecenie może wyglądać tak:

convert obraz.jpg
-thumbnail 200
-background gray40
+polaroid obraz-mini.png.

Kolejną metodą tworzenia ramek, tym ra-
zem wyglądających nieco trójwymiarowo, jest
opcja -frame, która przejmuje cztery parame-
try: szerokość, wysokość oraz szerokość we-
wnętrznego i zewnętrznego skosu. Na przy-
kład:

convert obraz.jpg
-frame 40x40+40+10
obraz-ramka.png.

Proponuję poeksperymentować, dodając
do tej komendy dodatkowe opcje -border-
color
oraz -mattecolor z wartością rgb poda-
ną za pomocą trzech liczb, jak w przykła-
dzie wcześniejszym. Ciekawe efekty można
uzyskać również podając opcję -frame wie-
lokrotnie. Oczywiście, gdy już wypracuje-
my sobie ładną ramkę, możemy powtórzyć
operację jej tworzenia dla wszystkich pli-
ków przy pomocy find.

Umieszczając zdjęcia w internecie, bar-

dzo często je podpisujemy. Choć istnieją
programy z GUI, które potrafią to wykonać
szybko dla wielu zdjęć, jeśli użyjemy narzę-
dzi z pakietu ImageMagick, otrzymamy bar-
dzo szerokie możliwości często dostępne
gdzie indziej.

Przykładowe komendy robią się jed-

nak dosyć długie, dlatego dla zwiększenia
czytelności podaję je w kilku liniach, z któ-
rych każda – za wyjątkiem ostatniej – koń-
czy się odwrotnym ukośnikiem „\”. Wpisu-
jąc te komendy w konsoli, możemy robić to
w wielu liniach ze znakiem „\”, tak jak po-
niżej albo w jednej linii, pomijając wtedy
znak „\”.

Poniższy przykład zaczerpnięty z nie-

wielkimi zmianami z dokumentacji Image-
Magick
umieści na naszym obrazku biały
tekst z czarną obwódką, dzięki czemu będzie
on zawsze widoczny niezależnie od kolo-
rystyki.

W powyższym przykładzie obraz.jpg

oraz obraz-podpisany.jpg to oczywiście pliki
wejściowy i wyjściowy. Czcionka (której
wielkość w punktach określa następny para-
metr) została podana w postaci bezwzglę-
dnej ścieżki do pliku truetype – nie musi być
ona zainstalowana, a w każdym systemie
może znajdować się gdzie indziej. W ko-
lejnym parametrze określiliśmy położenie
napisu jako południowe (south), czyli u dołu
na środku. Alternatywnie możemy podać
NorthWest, North, NorthEast, West, Center,
East, SouthWest, SouthEast
. Podpis podaje-
my dwukrotnie taki sam, bowiem najpierw
będzie on napisany na czarno, a później na

Listing 2.

Przykładowe polecenia

jhead -model

"FinePix S9500"

-nffuji-%Y_%m_%d-%H_%M_%S *.jpg

jhead -model

"Canon PowerShot A60"

-nfcanon-%Y_%m_%d-%H_%M_%S *.jpg

background image

54

czerwiec 2007

praktyka

Praca z grafiką z linii komend

55

www.lpmagazine.org

praktyka

Praca z grafiką z linii komend

biało. Listę nazw kolorów w ImageMagick
można uzyskać poleceniem:

convert -list Color

Dokumentacja ImageMagick zawiera ogrom-
ną ilość bardzo zaawansowanych sposo-
bów użycia opcji rysowania i oznaczania
tekstem. Pisząc znacznie dłuższe polecenia,
możemy uzyskać dużo ładniej wyglądające
napisy. Jeśli jednak zależy nam na ładnym
oznaczeniu obrazków, często lepszym wy-
borem może być przygotowanie osobnego
pliku graficznego zawierającego tekst z na-
szym podpisem lub nasze logo. Następnie
możemy łatwym poleceniem nałożyć ten
plik na obrazek, tworząc coś w rodzaju pi-
sma wodnego. Najlepsze efekty uzyskamy
oczywiście wtedy, gdy plik z naszym zna-
kiem zawiera przezroczystość zamiast zwy-
kłego tła.

Zakładając, że mamy plik znak.png i chce-

my nałożyć go na obraz.jpg uzyskując ob-
raz-zaznaczony.jpg,
polecenie może wyglądać
następująco:

composite -watermark 30%
-gravity north znak.png
obraz2.jpg obraz-znaczony.jpg.

Podane 30% to oczywiście stopień „odci-
śnięcia” naszego znaku. Gdy chcemy, aby
nasza praca została zabezpieczona przed
kadrowaniem, możemy użyć samego -tile
zamiast -gravity north. Nastąpi wtedy wy-
pełnienie znakiem całego obrazu. Zamiast
-watermark możemy też wypróbować -dis-
solve.

Zarządzamy zbiorem zdjęć

Gdy posiadamy aparat cyfrowy, nasz dysk
w mniejszym czy większym tempie wypeł-
nia się plikami jpg. Korzystając z linii ko-
mend możemy podjąć różne zabiegi, aby
utrzymać w naszym zbiorze porządek.

Pierwszym problemem, jaki może się

pojawić w dużym zbiorze zdjęć są poja-
wiające się duplikaty, czyli te same zdję-
cia ściągnięte z aparatu wielokrotnie i znaj-
dujące się najczęściej w różnych katalogach
pod innymi nazwami. Programem, który
bardzo szybko potrafi odnaleźć takie pli-
ki nawet w ogromnym zbiorze jest fdupes.
Program ten oblicza sumy md5 wszystkich
badanych plików, w istocie więc ma ma-
ło wspólnego z grafiką komputerową po-
za faktem, że często przydaje się przy pli-
kach graficznych. Najczęstszy sposób jego
użycia to:

fdupes -r /home/user/
katalog-z-obrazkami.

Opcja -r spowoduje przechodzenie do pod-
katalogów. Jeśli dodamy opcję -d, program
będzie pytał, który z duplikatów zachować,
usuwając wszystkie pozostałe. Alternatyw-
nie możemy wywołać program z opcją -f
i przekierować jego wyjście do jakiegoś pli-
ku, np:

fdupes -r -f katalog >/tmp/lista.

W tym przypadku w pliku

/tmp/lista

bę-

dzie lista plików, które można bezpiecznie
usunąć. Można napisać skrypt, który z niej
skorzysta albo też korzystając z funkcji
znajdź i zamień w dowolnym edytorze tek-
stu dopisać tam przed każdą nazwą pliku
komendę rm i uruchomić ten plik polece-
niem:

sh /tmp/lista

Program fdupes działa bardzo szybko, ale
znajdzie tylko i wyłącznie pliki identyczne.
Na zupełnie innej zasadzie działa findima-
gedupes
, który analizuje wygląd obrazków,
w ten sposób znajdując pliki identyczne lub
całkiem podobne. Jeśli więc ten sam obraz
nagramy w różnych formatach, zostanie on
potraktowany jako duplikat. Z drugiej stro-
ny findimagedupes wymaga bardzo dużo cza-
su i pamięci, zwłaszcza na większych zbio-
rach plików. Zamiast z linii komend moż-
na go wywołać również z GUI programu
Gqview, jednak mi osobiście wcale nie wy-
dało się to wygodniejsze.

Po znalezieniu duplikatów możemy za-

stanowić się nad zmianą formatu przecho-
wywanych zdjęć. Konwersja między róż-
nymi formatami przy pomocy programów
z pakietu ImageMagick jest banalnie prostą
operacją. Na przykład polecenie:

mogrify -format jpg
-quality 90 '*.tif'

zamieni wszystkie TIFF-y w bieżącym kata-
logu na pliki JPEG z jakością kompresji 90
(domyślna jakość w ImageMagick to 75). Kon-
wersji można dokonywać też przy pomo-
cy programu convert – wystarczy w nazwie
pliku docelowego podać pożądane roz-
szerzenie – ImageMagick obsługuje ponad
100 różnych formatów. Najprostszy przyk-
ład:

convert plik.jpg plik.tif.

Ponadto przy pomocy opcji -quality z pro-
gramami mogrify lub convert możemy szyb-
ko zmienić stopień kompresji JPEG naszych
plików, np:

mogrify -quality 50 '*.jpg'

lub:

find . -name '*.jpg'
-exec convert
-quality 50 {} {} \;.

Jeśli jesteśmy przy tematyce konwersji
i rozmiarów zdjęć, nie można pominąć bar-
dzo ciekawego narzędzia o nazwie jhead.
Przy jego pomocy możliwe są operacje na
nagłówku EXIF (tworzonym przez cyfrowe
aparaty fotograficzne) oraz innych dodatko-
wych danych w plikach JPEG. Pierwszym
zastosowaniem, jakie może się przydać jest
usunięcie z plików wszystkich dodatko-
wych danych przy pozostawieniu same-
go obrazu. Można to wykonać dla wszyst-
kich obrazków w bieżącym katalogu pole-
ceniem

jhead -purejpg *.jpg

. W ten spo-

sób nie tylko zaoszczędzimy po nawet 10kb
na każdym zdjęciu, ale przede wszystkim
usuniemy dane, które możemy uznawać za
prywatne, czyli np. posiadany model apa-
ratu, data wykonania zdjęcia, parametry
ekspozycji itp.

To oczywiście nie jedyne zastosowanie

programu jhead. Doskonale potrafi on bowiem
zmienić nazwy plików, korzystając z zapisa-
nej w nagłówku EXIF daty wykonania zdję-
cia. Na przykład polecenie:

jhead -nfzdjecie-%Y_%m_%d
-%H_%M_%S *.jpg

uporządkuje nasze fotografie według daty.
Jeśli plik nie będzie miał nagłówka EXIF,
zostanie użyta data z systemu plików. Uży-
wając dodatkowo opcji -model, możemy po-
segregować zdjęcia na podstawie apara-
tów, którymi zostały wykonane. Na przy-
kład najpierw przy pomocy np.

head *.jpg

sprawdzamy, jakie różne wartości wystę-
pują u nas w polu Camera model. Następ-
nie, korzystając z nich, wprowadzamy róż-
ne nazwy plików. Przykładowo przy posia-
danych przeze mnie aparatach były to pole-
cenia (Listing 2).

Warto wiedzieć, że nagłówek EXIF, który

jest najczęściej usuwany podczas edycji pli-
ku w programach graficznych można przy-
wrócić, korzystając również z jhead. Oczy-
wiście pod warunkiem, że posiadamy ory-

background image

54

czerwiec 2007

praktyka

Praca z grafiką z linii komend

55

www.lpmagazine.org

praktyka

Praca z grafiką z linii komend

ginalny plik z nieuszkodzonymi danymi.
Następujące polecenie skopiuje nagłówek
z pliku oryginalny.jpg na zmodyfikowany.jpg:

jhead -te oryginalny.jpg
zmodyfikowany.jpg.

Oczywiście w ten sposób możemy „udawać”,
że zdjęcie zostało wykonane na innym sprzę-
cie lub w innych warunkach niż w rzeczy-
wistości. Dodatkowo w podręczniku pro-
gramu

man jhead

można znaleźć opis wy-

konania tego polecenia na wielu plikach
jednocześnie.

Inne operacje z linii komend

Jakie inne operacje warto umieć wykonać z li-
nii komend? Cóż, moim zdaniem ich lista jest
dosyć długa. Przede wszystkim nie wspo-
mniałem jeszcze o programie identify, który
drukuje na konsoli informacje o pliku graficz-
nym. Wystarczy wpisać:

identify [nazwa_pliku]

lub:

identify -verbose [nazwa_pliku].

W tym drugim przypadku poza typem, roz-
dzielczością i rozmiarem zobaczymy tak-
że wiele zaawansowanych danych, np. sto-
pień kompresji czy statystyki dotyczące ko-
lorów.

Znając rozmiar obrazka, możemy po-

dzielić go na kilka mniejszych przy pomocy
opcji -crop programu convert. Na przykła:

convert obraz.jpg
-crop 200x200+500+600
kawalek.jpg

stworzy plik kawalek.jpg o rozmiarach 200x
200 zawierający fragment obraz.jpg od piksela
o położeniu x=500 i y=600. Częściej niż dzie-
lenie obrazków przydaje się ich łączenie. Je-
śli obrazki mają być łączone poziomo od le-
wej do prawej, posługujemy się opcją -ap-
pend
, np:

convert 1.png 2.png 3.png
+append rzad1.miff.

Następnie przy łączeniu obrazków w pionie
używamy -append, np:

convert rzad1.miff rzad2.miff
-append calosc.tif.

Należy zwrócić uwagę na użyty tutaj for-
mat dla „tymczasowych” plików, miano-
wicie MIFF (The Magick Image File Format).
Jest to wewnętrzny format programów Ima-
geMagick
i zapisywanie do niego jest sto-
sunkowo najszybsze. Dla plików tymcza-
sowych możemy też używać innych forma-
tów bezstratnych, np. BMP czy TIFF. Nigdy
nie należy za to używać JPEG czy GIF, gdyż
wiązać się to będzie ze stratą czasu i ja-
kości.

Ostatnią operacją na plikach graficz-

nych, o której chciałbym wspomnieć jest
stworzenie filmu w formacie AVI ze wszyst-
kich zdjęć z danego katalogu. Przy użyciu
mencoder'a taki film z pokazem slajdów
utworzymy bardzo szybko nawet przy wie-
lu zdjęciach. Przykładowe polecenie przy
rozmiarze docelowym 640x480 i zmianie
klatki co pół sekundy może wyglądać na-
stępująco:

mencoder "mf://*.jpg" -mf fps=
0.5 -vf scale=640:480
-o wyjscie.avi -ovc lavc
-lavcopts vcodec=mpeg4.

Tak utworzony plik bez problemu obejrzy-
my na komputerze. Jeśli jednak chcemy
stworzyć pokaz MPEG, by zapisać go na pły-
cie DVD-Video, aby móc go obejrzeć w do-
wolnym sprzętowym odtwarzaczu DVD,
powinniśmy posłużyć się GUI programu Di-
giKam, gdzie wybieramy Narzędzia->Utwórz
pokaz slajdów MPEG
.

Przetwarzanie plików PDF

Pliki PDF (ang. Portable Document Format)
systematycznie zdobywają coraz większą
popularność jako stosunkowo niewielkie
i łatwe w tworzeniu, a także niezawodne
– w przeciwieństwie do wielu innych for-
matów zapisu danych praktycznie zawsze
wyglądają tak samo na różnych kompute-
rach i systemach operacyjnych. Choć Linux
nie jest dobrze wspierany przez firmę, któ-
ra stworzyła ten standard, w naszym syste-
mie mamy niezłe narzędzia do tworzenia
i modyfikacji plików PDF. W tym artyku-
le wspomnę o tych, których używam z linii
komend.

Na początek lista programów, które bę-

dą nam potrzebne. Zapewne mamy już za-
instalowany pakiet z ImageMagick, podob-
nie zresztą jak Ghostscript (pakiet o tej samej
nazwie, ewentualnie gs-gpl lub gs-esp). Przy-
dadzą nam się również pakiety xpdf-utils
lub poppler-utils oraz pdftk, czyli PDF Toolkit.
Do szybkiej konwersji obrazków na format

PDF bardzo polecam program Sam2p (http:
//www.inf.bme.hu/~pts/sam2p/
) – on jako je-
dyny nie trafił jeszcze do wszystkich dys-
trybucji (choć jest przynajmniej w Debianie
i Ubuntu). Można jednak łatwo zainstalo-
wać go nawet ze źródeł – po ściągnięciu
pliku sam2p-latest.tar.gz, rozpakowaniu
i przejściu do nowo utworzonego katalo-
gu (u mnie sam2p-0.45) wystarczą polece-
nia:

./configure –enable-lzw
--enable-gif; make;
make install.

Czynnością, którą najczęściej zdarza mi się
wykonywać z linii komend jest tworzenie
pliku PDF z wielu obrazków w JPEG lub
TIFF. Mogą to być skany jakiegoś dokumen-
tu albo nawet zwykłe zdjęcia – konwersja
do PDF jest niezłą metodą na wygodne
przesłanie ich do podglądu przez e-mail,
tym bardziej, że dostajemy łatwą kontrolę
nad rozmiarem pliku wynikowego.

Jak można utworzyć plik z jednym ob-

razkiem na stronę? Musimy rozpocząć od
konwersji każdego obrazka do osobnego
pliku PDF. Można to wykonać przy pomo-
cy omawianego już wcześniej programu co-
nvert
, na przykład wpisując

convert -page a5 foto.jpg strona1.pdf

Funkcja -page jest oczywiście opcjonalna,
a dodatkowo możemy użyć też omawia-
nych wcześniej -scale i -quality, dzięki cze-
mu będziemy mieli kontrolę nad rozmia-
rem tworzonego pliku PDF.

Zamiast convert do tworzenia PDF-ów

z obrazków możemy użyć programu sam2p.
Ma on co prawda zdecydowanie mniej op-
cji, jednak swoje zadanie wykonuje dosko-
nale, tworząc często mniejsze pliki i działa-
jąc wielokrotnie szybciej. Przykładowe je-
go użycie może wyglądać w ten sposób:

sam2p -c ijg:50 foto.jpg strona.pdf

Przy pomocy opcji -c ijg:50 ustawiamy jakość
kompresji JPEG (w przedziale od 1 do 100).
Program ten nie potrafi skalować plików, jed-
nakże sterowanie poziomem kompresji do-
skonale sprawdza się w osiąganiu pożąda-
nych rozmiarów plików PDF.

Aby szybko skonwertować wszystkie ob-

razki do plików PDF, możemy użyć progra-
mu find, podobnie jak w opisywanym wcze-
śniej punkcie „Operacje na wielu plikach”, na
przykład:

background image

56

czerwiec 2007

praktyka

Praca z grafiką z linii komend

57

www.lpmagazine.org

praktyka

Praca z grafiką z linii komend

find . -name '*.jpg'
-exec sam2p
-c ijg:50 {} {}.pdf ';'

Za to do operacji złączenia powstałych stron
PDF w jeden dokument użyjemy programu
pdftk:

pdftk *.pdf cat output
calosc.pdf.

Na jego stronie domowej można znaleźć wię-
cej przykładów wykonania tej operacji na
różne sposoby.

Gdy mamy już gotowy plik PDF, może-

my zapoznać się z narzędziami, które po-
trafią go podzielić, konwertować czy zmo-
dyfikować. Na początek jednak powinni-
śmy poznać dokładnie nasz materiał, naj-
lepiej przy pomocy programu pdfinfo. Po
wydaniu komendy pdfinfo [nazwa_pliku_
pdf] dowiemy się m.in. jaki program stwo-
rzył ten dokument, poznamy datę utworze-
nia, liczbę stron czy rozmiar papieru. Naj-
ważniejszą informacją będzie jednak wer-
sja standardu PDF (PDF version). Jeśli jest
to 1.6 lub 1.7, to niestety możemy spodzie-
wać się pewnych problemów z działaniem
niektórych narzędzi linuksowych. Starsze
wersje standardu powinny działać bez pro-
blemów.

Chcąc stworzyć plik PDF, który jest bar-

dziej „pewny” zarówno w obróbce jak i przy
oglądaniu na różnych komputerach, może-
my wygenerować go na nowo przy pomocy
programu ps2pdf. Wpisując np:

ps2pdf12 stary.pdf nowy.pdf

uzyskamy plik w nowy.pdf z tą samą zawar-
tością jednak stworzony przez dosyć „pew-
ne” narzędzie, a dodatkowo będący w jednej

z najstarszych wersji standardu PDF, czyli 1.2
(które odpowiada wersji 3.0 oprogramowa-
nia Adobe Acrobat). Analogicznie – przy pomocy

ps2pdf13

i

psd2pdf14

możemy tworzyć pliki

w nieco nowszej wersji standardu.

Pliki PDF można łatwo rozdzielić na

poszczególne strony przy pomocy komen-
dy np:

pdftk plik.pdf burst
output strona-%02d.pdf.

Wszystkie parametry po burst są opcjonalne
– program użyje wtedy domyślnych nazw
stron w postaci pg_#####.pdf. Zamiast wy-
dzielać wszystkie strony do osobnych pli-
ków możemy część dokumentu, np. strony
2-5, umieścić w osobnym pliku:

pdftk plik.pdf cat 2-4
output strony2-5.pdf.

Pliki PDF łączymy jeszcze prościej polece-
niem:

pdftk 1.pdf 2.pdf 3.pdf
cat output 123.pdf.

Jedną z ciekawszych możliwości pdftk
jest umieszczanie „znaku wodnego” w tle
wszystkich stron dowolnego pliku PDF.
Nasz „znak wodny” będzie doskonale wi-
doczny pod tekstem albo pod innymi czę-
ściowo przezroczystymi obiektami. Jeśli
jednak w pliku PDF występuje jakiś nie-
przezroczysty obiekt (np. zdjęcie), to ono
przykryje nasz dodatkowy znak. Zabawę
musimy rozpocząć od stworzenia jednej
strony PDF zawierającej nasz „znak wod-
ny” – najczęściej jakiś jasnoszary rysunek
lub tekst. Oczywiście możemy to zrobić
z linii komend, wygodniej chyba jednak bę-
dzie w OpenOffice, skąd można wyekspor-
tować szybko gotowy PDF. Jeśli nasz „znak
wodny” znajduje się w pliku znak.pdf, a plik,
który chcemy oznaczyć to nasz.pdf, to wpi-
sujemy następującą komendę:

pdftk nasz.pdf
background znak.pdf
output gotowy.pdf

Na zakończenie omawiania plików PDF
warto wspomnieć jeszcze o programie pdf-
tohtml
(część pakietu poppler-utils) – przy
jego pomocy można zapoznać się z teksto-
wą zawartością pliku PDF przy pomocy do-
wolnej przeglądarki – w tym również dzia-
łających z linii komend

lynx

czy

w3m

. Do

konwersji w drugą stronę można użyć
programu html2ps – wynik jego działania
można przekonwertować z Postscriptu przy
użyciu ps2pdf. Ciekawsze możliwości ma
jednak program e2ps, którego można uży-
wać np. w ten sposób:

cat /etc/apache/httpd.conf
| a2ps | ps2pdf14
- moj_apacz.pdf

W wyniku otrzymamy zaskakująco ładnie
sformatowany dokument.

Zakończenie

Programy działające z linii komend mogą do-
skonale przydać się nie tyko programistom
czy inżynierom oprogramowania, ale rów-
nież zwykłym użytkownikom, którzy chcą
na przykład zrobić ciekawe rzeczy ze swoimi
zdjęciami z wakacji.

Opisane tutaj możliwości w zakresie ob-

róbki grafiki z linii komend to w istocie tyl-
ko mała namiastka tego, co da się zrobić, ko-
rzystając z darmowych linuksowych narzę-
dzi. Dużo więcej interesujących przykładów
i bardziej zaawansowane opisy można zna-
leźć przede wszystkim na stronach projek-
tu ImageMagick, gdzie zapraszam wszystkich
zainteresowanych.

Gdy dużo zajmujemy się grafiką pod Linuk-

sem, na pewno mamy sporo plików XCF. Na-
wet jeśli nie mamy w systemie GIMP-a, korzy-
stając wyłącznie z linii komend, możemy przy
pomocy programu xcf2png spłaszczyć plik
XCF i skonwertować do formatu PNG. Wy-
starczy podać nazwę pliku źródłowego i po
opcji - o nazwę wyjściowego pliku PNG. Pro-
gram xcf2png znajdziemy w pakiecie xcftools.

Gdy już skończymy zabawę z obrazka-

mi, być może chcielibyśmy przesłać je pocz-
tą elektroniczną? To oczywiście też jest moż-
liwe z linii komend. Pomocny będzie pro-
gram biabam, dostępny w większości dys-
trybucji. Jego podstawowe użycie z jednym
plikiem i jednym adresatem może wyglądać
następująco:

biabam plik.jpg -s
"temat listu"
adres@odbiorcy.com.

Po wydaniu tego polecenia program popro-
si o wpisanie treści maila. Aby zakończyć, na-
leży w pustej linii (czyli po naciśnięciu [En-
ter
]) nacisnąć [Ctrl]+[d]. Poczta zostanie wy-
słana przy użyciu lokalnie dostępnego ser-
wera SMTP, który oczywiście musi być skon-
figurowany.

Rysunek 1.

Plik PDF wraz z dołączonym znakiem

wodnym


Wyszukiwarka

Podobne podstrony:
2008 06 Edytor grafiki wektorowej Inkscape [Grafika]
06 cwiczenie grafika1id 6272 ppt
MM 06 edyca grafiki nieruchomej(1)
2007 06 Amarok–wypasiony wilk [Poczatkujacy]
IPN 16 2007 06 01
06 Praca układu pomp odśrodkowych
2007 06 BO Egzaminid 25655
SIMR-RR-EGZ-2007-06-26b-rozw
2007 06 22 29 Stawiarski
2007 06 22 0703
Wypełnione, SpecyfikacjaWymagań 01 2007 06 13 MI, ARKUSZ ZLECENIA PROJEKTOWEGO
Układ pomp, 06. Praca układu pomp odśrodkowych - 4 (4.0)
06 Praca układu pomp odśrodkowych
Wypełnione, ZlecenieProjektowe 01 2007 06 13 MI, ARKUSZ ZLECENIA PROJEKTOWEGO
fizjologia pytania egzaminacyjne 2007.06.20, Fizjologia(1)
SIMR-ALG1-EGZ-2007-06-16b-rozw
06 praca energia w

więcej podobnych podstron