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):

  1. skrypt usuwający nadmiarowe pliki (rdl.sh)
  2. skrypt zmieniający wielkości znaków w nazwach plików (rlo.sh)
  3. skrypt skalujący zdjęcia do pożądanej wielkości (rim.sh)
  4. skrypt znakujący zdjęcia napisem (rst.sh)
  5. skrypt generujący pliki galerii w formacie dokuwiki (rdw.sh)
  6. (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 ;-)

autorzy/narg/zdarzenia/20060214/skrypt.txt · ostatnio zmienione: 2006/03/02 20:54 przez Piotr Gapiński
 
 
©2005-2010 by Pijoter · powered by DokuWiki · hosting by Yupo.pl