Dzisiaj będzie trochę heavy codingu
Najpierw pokażę efekt, który będziemy się starali osiągnąć.
Miniaturka ustawiona w gconf-editor na 256 px (tutaj obrazki przeskalowane do 300 px szerokości):

a teraz takie samo 256 wygenerowane skryptem (zwróćcie uwagę na drzewa):

Skoro wiemy już do czego dążymy, możemy zabierać się do rzeczy. Dla utrudnienia, miniatury obrazów i PDFów będziemy generować za pomocą programu ImageMagick (a zatem konieczne jest zainstalowanie pakietu imagemagick: sudo apt-get install imagemagick). Podobno to wydajniejszy generator.
Skrypt będziemy pisać w Bashu. Gdyby nie kurs w Dragonia Magazine nic bym nie dał rady zrobić
Skrypt zdecydowałem się dokumentować w języku angielskim z tego względu, iż o ile wiem, nikt do tej pory nie zabierał się za coś podobnego. Dzięki temu może się przydać większej liczbie osób.
Od razu ostrzegam. Skrypt wprawdzie działa, ale po jakimś czasie wygenerowane przezeń miniaturki Nautilus zamienia i tak na swoje. Nie wiem dlaczego tak się dzieje
Poniżej będę omawiał poszczególne części pliku customthumbnailer.sh (programik nazwałem Nautilus Custom Thumbnailer). Plik możemy podzielić na 3 części: informacje wstępne o autorze i skrypcie, sprawdzenie parametrów i plików, część główna.
1. Informacje wstępne o autorze i skrypcie.
#!/bin/bash
#
# Nautilus Custom Thumbnailer
# script ver. 0.2
#
# Dawid "Spiechu" Spiechowicz
# spiechu(at)gmail.com
# http://spiechu.all.pl
#
# Usage: ./customthumbnailer.sh files_extension desired_size
#
# Supported extensions:
# - movie files: avi, mov, wmv
# - image files: jpg, png
# - PDF
#
# Tested thumbnail sizes:
# 160, 192, 256, 512
#
# Usage example:
# 1. copy script to directory which already contains standard thumbnails
# 2. run in terminal ./customthumbnailer.sh jpg 256
# 3. script will change all files in current directory with chosen file extension
# 4. open directory in Nautilus and watch the results
2. Sprawdzenie parametrów i plików.
Sprawdzamy czy podczas wywołania wprowadzono 2 paramety.
# Checking if 2 parameters were entered
if [ $# -ne 2 ]; then
echo "No parameters! Enter files_extension and desired_size"
exit 1
fi
Następnie sprawdzamy czy podano obsługiwane typy plików.
# Checking extension type
if [ $1 = "jpg" ] || [ $1 = "jpeg" ] || [ $1 = "png" ] || [ $1 = "pdf" ]; then
filetype="image"
extension=$1
elif [ $1 = "avi" ] || [ $1 = "mov" ] || [ $1 = "flv" ] || [ $1 = "wmv" ]; then
filetype="movie"
extension=$1
else
echo "wrong extension type, look at documentation in script"
exit 1
fi
Zanim wygenerujemy cokolwiek, musimy sprawdzić czy w katalogu, w którym mamy plik customthumbnailer.sh znajdują się jakieś pliki z wybranym rozszerzeniem.
# Checking directory if it contains files with entered extension
file_count=$( ls *.$extension|wc -l )
if [ $file_count = 0 ]; then
echo "No files with "$extension" extension"
exit 1
else
echo "Found "$file_count" file(s) with "$extension" extension"
fi
3. Część główna.
Zmienna savedir przechowuje ciąg ze ścieżką dostępu do katalogu, w którym Nautilus trzyma miniaturki.
# Thumbnail save dir, standard directory in Gnome Nautilus
savedir=~/.thumbnails/normal/
Pętla for wykonująca powtórzenia dla każdego pliku zadanego typu.
# Iterating all files with entered extension
for file_to_thumb in *.$extension; do
Zmienna filename_with_path przechowująca tzw. absolutne URI do pliku.
# Creating full path to file
filename_with_path="file://"$( pwd )"/"$file_to_thumb
Próba zamiany każdej spacji w nazwie pliku na znak %20 (tylko wtedy suma kontrolna jest liczona prawidłowo i Nautilus daje się „nabrać”). Niestety działa tylko wtedy, gdy odstęp wynosi 1 spację. Tutaj przydałaby się pomoc osoby z większym „stażem” w Bashu.
# Replacing every space with %20 (work with single space gap only
help needed here)
truncated=$( echo $filename_with_path | awk '{gsub(" ","%20")}; 1' )
Liczenie sumy kontrolnej md5 z absolutnego URI
# Creating md5 file hash from full path
md5hash=$( echo -n $truncated | md5sum | cut -f1 -d ' ' )
Zmienna md5hash_with_savedir zawierająca ciąg ze ścieżką dostępu do ~/.thumbnails/normal + nazwę pliku + png.
# Merging md5 with savedir, adding png extension to name
md5hash_with_savedir=$savedir""$md5hash".png"
Jeżeli wybranym typem plików jest obraz to użyj ImageMagick. [0] jest potrzebne po to aby PDFy były tworzone z pierwszej strony.
if [ $filetype = "image" ]; then
echo "Creating thumbnail for $file_to_thumb"
# Using ImageMagick convert to deal with image and PDF files
thumbnail=$( convert -resize $2 "$filename_with_path[0]" $md5hash_with_savedir )
Jeżeli typem plików są filmy to użyj standardowego gnome-video-thumbnailer
elif [ $filetype = "movie" ]; then
echo "Creating thumbnail for $file_to_thumb"
# Using gnome-video-thumbnailer to deal with various movie files
thumbnail=$( gnome-video-thumbnailer -s $2 "$filename_with_path" $md5hash_with_savedir )
Zakończenie pętli.
else
# Small possibility to end up here, but who knows ![]()
echo "Something just went wrong
"
fi
done
Skrypt jest na tyle prosty, że nie ma potrzeby robienia jakiś procedur, przełączników itd. Jeżeli coś idzie nie tak, to wyświetlany jest komunikat błędu, a exit 1 powoduje natychmiastowe zakończenie działania skryptu.
Na pewno znalazłoby się parę rzeczy do dodania/poprawienia, np. wyłapywanie czy ktoś podał liczbę w drugim parametrze albo działanie niezależnie od wielkości liter rozszerzenia (Jpg, JPG, jpG itd.) Nie mam ochoty narazie z tym się aż tak bawić. Ważne, że działa
Zapraszam do testów (zobaczcie sobie jak wyglądają „miniatury” 512 pikselowe
Tutaj macie link do pliku w całości.

