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:
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
Do zabawy będziemy potrzebowali kilku skryptów shell (Linux):
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ęć.
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
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
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
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
Dokument galerii Dokuwiki ma uproszczoną składnię (więcej na temat formatowania tekstu w dokuwiki można przeczytać tutaj) i składa się z:
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
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"
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
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:
W tym momencie trzeba całość materiału zapakować i wysłać do administratorów OSR do opublikowania w internecie. Proste