Konwersja zdjęć do formatu dokuwiki
Zasady gry
Zamiast "wklikiwać" zdjęcia ręcznie do OSR/wiki można posłużyć się odpowiednim skryptem, który więszość trudnych (i czasochłonnych) zadań wykona za nas. By do tego doprowadzić trzeba jednak stosować się do kilku prostych zasad:
- pliki muszą być umieszczone w odpowiednich podkatalogach (o tym poniżej)
- nazwy katalogów i plików zdjęć muszą być zapisane małymi literami, bez polskich znaków i nie mogą rozpoczynać się od cyfry
- pliki muszą mieć rozszerzenie gif, jpg lub png (małe litery)
- jeżeli z jakiś względów chemy mieć plik w kolekcji na dysku ale nie chcemy poddawać do konwersji to jego nazwa musi rozpoczynać się od znaku "-" (myślnik)
Tak jak wspominałem powyżej - ważne jest umieszczenie plików w odpowiedniej strukturze katalogów na dysku. Dzięki temu będziemy mieli porządek i możliwość konwersji do różnych formatów wiki.
Preferowana struktura:
autor/obiekt/województwo/miejscowość/data/plik.jpg
na przykład:
narg/kosciol/wm/olsztyn/2002-09-21/img_0091.jpg narg/kosciol/kujawsko-pomorskie/inowroclaw/2005-07-09/p7090288.jpg
Warsztat pracy
Do zabawy będziemy potrzebowali kilku skryptów shell (Linux):
- skrypt usuwający nadmiarowe pliki (rdl.sh)
- skrypt zmieniający wielkości znaków w nazwach plików (rlo.sh)
- skrypt skalujący zdjęcia do pożądanej wielkości (rim.sh)
- skrypt znakujący zdjęcia napisem (rst.sh)
- skrypt generujący pliki galerii w formacie dokuwiki (rdw.sh)
- (opcjonalnie) skrypt wywołujące pozostałe skrypty we właściwej kolejności (all.sh)
Tak jak napisałem powyżej, skrypty będą dla systemu Linux. Użytkownicy Windows mogą skorzystać z odpowiedniego skryptu w języku Rebol, który zrealizuje zadania 2, 3 i 4 z listy powyżej. Skrypty do zadziałania wymagają zainstalowanego pakietu ImageMagick (pakiet ten znajduje się w większości dystrybucji systemu Linux).
WAŻNE!
Wszystkie skrypty działają bezpośrednio na plikach, nie wykonując wcześniej żadnych kopii roboczych! Pamiętaj o zabezpieczeniu oryginałów zdjęć.
Usuwanie zbędnych plików
Wcześniej wspomniałem o możliwości specjalnego traktowania plików, których nazwa zaczyna się od znaku "-" (minus). Chodzi o to, że w zbiorach zdjęć na dysku czasami warto mieć pliki, których nie chcemy potem umieszczać w internecie. Pliki takie są usuwane na początku procesu konwersji (pamiętaj o wykonaniu kopii plików zdjęć).
Plik: rdl.sh
#/bin/bash DIR=$1 if [ -z "$DIR" -o ! -d "$DIR" ]; then echo "Skrypt usuwający pliki zaczynające się od znaku - (minus)" echo "Utworzony na licencji GNU GPL" echo "(C) 2002-2005 Olsztyńska Strona Rowerowa" echo echo "konwencja wywołania: $0 katalog" else find $DIR -iname "-*" -exec rm -fr {} \; fi
Zmiana nazw plików
Dokuwiki wymaga by nazwy plików zdjęć były zapisane małymi literami.
Plik: rlo.sh
#/bin/bash DIR=$1 if [ -z "$DIR" -o ! -d "$DIR" ]; then echo "Skrypt zmieniający nazwy plików na małe litery" echo "Utworzony na licencji GNU GPL" echo "(C) 2002-2005 Olsztyńska Strona Rowerowa" echo echo "konwencja wywołania: $0 katalog" else find $DIR | egrep -i "(png|jpeg|jpg|gif)" | awk '{print "mv " $0 " " tolower($0)}' > tmp.$$ 2>/dev/null if [ -f tmp.$$ ]; then chmod a+x tmp.$$ . tmp.$$ 2>/dev/null rm tmp.$$ fi fi
Skalowanie zdjęć
Zdjęcia powinny być przeskalowane do formatu stosowanego w OSR/wiki (aktualnie 350x263 oraz 200x263 pix). Ograniczenie to wynika przede wszystkim z liczby zdjęć, które posiadamy - ponad 6 tys. Poza tym, dysponując plikami źródłowymi i odpowiednim skryptem można bardzo łatwo wygenerować pliki o innych parametrach.
Plik: rim.sh
#!/bin/sh DIR=$1 if [ -z "$DIR" -o ! -d "$DIR" ]; then echo "Skrypt skalujący zdjęcia do OSR/WIKI 350x263/200x263" echo "Utworzony na licencji GNU GPL" echo "(C) 2002-2005 Olsztyńska Strona Rowerowa" echo echo "konwencja wywołania: $0 katalog [JPEG=85]" else # parametry przekazywane do sktyptu JPEG=$2 if [ -z "$JPEG" ]; then JPEG=85; fi # domyslne sciezki programow do konwersji # convert_=`whereis -b convert | awk '{print $2}'` mogrify=`whereis -b mogrify | awk '{print $2}'` identify=`whereis -b identify | awk '{print $2}'` FILES=`find $DIR | egrep -i "(png|jpeg|jpg|gif)"` for FILE in $FILES; do echo $FILE WIDTH=`$identify -format "%w" $FILE` HEIGHT=`$identify -format "%h" $FILE` if [ $WIDTH -gt $HEIGHT ]; then # poziom $mogrify -size 350x263 -resize 350x263 -strip -quality $JPEG $FILE else # pion $mogrify -size 200x263 -resize 200x263 -strip -quality $JPEG $FILE fi done fi
Znakowanie zdjęć
Zdjęcia publikowane na OSR są znakowane tekstem "www.rowery.olsztyn.pl"
Plik: rst.sh
#!/bin/bash DIR=$1 if [ -z "$DIR" -o ! -d "$DIR" ]; then echo "Skrypt znakujący zdjęcia napisem 'www.rowery.olsztyn.pl'" echo "Utworzony na licencji GNU GPL" echo "(C) 2002-2005 Olsztyńska Strona Rowerowa" echo echo "konwencja wywołania: $0 katalog" else # domyslna sciezka programu do konwersji # convert=`whereis -b convert | awk '{print $2}'` mogrify=`whereis -b mogrify | awk '{print $2}'` FILES=`find $DIR | egrep -i "(png|jpeg|jpg|gif)"` for FILE in $FILES; do echo $FILE $mogrify -gravity southwest -region x18+0+4 -gamma 3 +dither $FILE $mogrify -gravity southwest -pointsize 16 -draw "text 10,4 'www.rowery.olsztyn.pl'" $FILE done fi
Generowanie plików WIKI
Dokument galerii Dokuwiki ma uproszczoną składnię (więcej na temat formatowania tekstu w dokuwiki można przeczytać tutaj) i składa się z:
- nagłówka H1 z nazwą miejscowości
- nagłówków H2 dla poszczególnych dat wykonania zdjęć
- plików zdjęć pogrupowanych względem daty wykonania
Poniższy skrypt generuje odpowiednie pliki i zapisuje w katalogu "out" pod nazwą miejscowości. Zdjęcia są grupowane po dacie wykonania i sortowane względem nazwy pliku (dzięki czemu można sterować kolejnością zdjęć).
Dużą wadą skryptu jest to, że wygenerowany nagłówek (nazwa miejscowości) nie będzie zawierał polskich znaków. Oznacza to iż po umieszczeniu galerii w internecie trzeba będzie "przeklikać" dodane pliki i spolszczyć napisy.
Plik: rdw.sh
#!/bin/bash DIR=$1 if [ -z "$DIR" -o ! -d "$DIR" ]; then echo "Skrypt znakujący pliki galerii dokuwiki" echo "Utworzony na licencji GNU GPL" echo "(C) 2002-2005 Olsztyńska Strona Rowerowa" echo echo "konwencja wywołania: $0 katalog" else mkdir -p $DIR/out find $DIR | grep -v out | awk -F/ ' O = "out" { if (NF == 3) { fout = O"/"$3".txt" print "====== "$3" ======" >> fout } if (NF == 4) { print "===== "$4" =====" >> fout } if ((NF >= 5) && (index($5,"-") != 1)) { print "{{miejsca:"$1":"$2":"$3":"$4":"$5"}}" >> fout } } ' fi
Bonus
Jeżeli komuś zależy na czasie i nie chce mozolnie wywoływać poszczególnych komend za każdym razem to powinien zainsteresować się poniższym skryptem, wywołującym poszczególne skrypty we właściwej kolejności.
Plik: all.sh
#!/bin/bash DIR=$1 if [ -z "$DIR" -o ! -d "$DIR" ]; then echo "Skrypt konwertujący zdjęcia na potrzeby WIKI" echo "Utworzony na licencji GNU GPL" echo "(C) 2002-2005 Olsztyńska Strona Rowerowa" echo echo "konwencja wywołania: $0 katalog" exit 1 fi . ./rdl.sh $DIR # usun zbedne pliki . ./rlo.sh $DIR # male litery . ./rim.sh $DIR # skalowanie . ./rst.sh $DIR # znakowanie . ./rdw.sh $DIR # generowanie plikow wiki echo "koniec"
Instalacja
Wszystkie skrypt powinny być umieszczone w tym samym, dowolnym katalogu i mieć status "wykonywalny" (+x). Jeżeli założymy, że skrypty umieściliśmy w katalogu domowym, w podkatalogu "wiki" to można posłużyć się poniższymi komendami shell
$cd $HOME && chmod +x wiki/*.sh
Konwersja
Na początek musimy mieć utwtworzoną odpowiednią strukturę podkatalogów dla plików zdjęć galerii. Powiedzmy, że przygotowaliśmy kolekcję zdjęć kościołów i umieściliśmy ją w katalogu "wiki". Katalog ten będzie więc zawierał skrypty i katalog ze zdjęciami:
$cd $HOME $ls -l wiki drwxr-xr-x 2 narg narg 16 2006-01-11 22:21 autor/ -rwxr-xr-x 1 narg narg 402 2006-02-14 19:03 all.sh -rwxr-xr-x 1 narg narg 354 2005-11-07 18:46 rdl.sh -rwxr-xr-x 1 narg narg 406 2005-08-14 22:38 rim.sh -rwxr-xr-x 1 narg narg 458 2006-02-14 19:01 rlo.sh -rwxr-xr-x 1 narg narg 681 2006-02-05 20:40 rst.sh -rwxr-xr-x 1 narg narg 855 2005-09-18 22:01 rdw.sh
Teraz możemy wywołać skrypt konwersji (na wszelki wypadek warto zrobić kopię bezpieczeństwa plików):
$cd $HOME/wiki $cp -Rp autor/ autor.kopia $./all.sh autor
Po zakończeniu działania skryptu:
- katalog "wiki/autor" zawiera zdjęcia gotowe do publikacji w internecie;
- katalog "wiki/autor/out" zawiera pliki dokumentów galerii w formacie dokuwiki
W tym momencie trzeba całość materiału zapakować i wysłać do administratorów OSR do opublikowania w internecie. Proste
Na skróty
Ostatnie zmiany
- Le Mans grób ppor. Józefa Franka
- Saint-Mandé utworzono
- Pantin utworzono
- Ivry-sur-Seine utworzono
- Talence utworzono
- I Wojna Światowa (1914-18r.) [Francja]
- Nowiny [Mogiła żołnierska]
- Kowale Oleckie [Pomnik poległych i cmentarz]
- Giżycko (Lec) [Spis poległych]
- Koszyce (Košice) [Pomnik Żołnierzy Armii Czerwonej]
- Rogojny [2024-10-26]
- Krysk Nekrologi, Ltn. Max Paluka
- Kłajpeda [Cmentarz wojenny]
- Kłajpeda (Klaipėda) [Cmentarz wojenny]
- Bolków [2015-08-17]