#!/bin/bash
# Skrypt thumbnails tworzący miniatury podanych obrazów.
# Umożliwia określenie wymiarów miniatur lub wielkość,
# której nie mogą przekroczyć.

convargs="-unsharp 0x.5 -resize"
count=0; exact=""; fit=""

usage()
{
  echo "Użycie: $(basename $0) (-e|-f) wielkość_miniatury obraz [obraz] [obraz]" >&2
  echo "-e  zmniejszenie do zadanych rozmiarów bez zachowania proporcji" >&2
  echo "-f  dopasowanie obrazu do zadanych rozmiarów z zachowaniem proporcji" >&2 
  echo "-s  usunięcie inf. EXIF (z obrazu do umieszczenia na stronie WWW)" >&2
  echo "    rozmiar należy określić w formacie SZEROKOŚĆxWYSOKOŚĆ (np. 100x100)" >&2
  exit 1
}

####################
## GŁÓWNA CZĘŚĆ KODU

if [ $# -eq 0 ] ; then
  usage
fi

while getopts "e:f:s" opt; do
  case $opt in
   e ) exact="$OPTARG";    ;;
   f ) fit="$OPTARG";      ;;
   s ) strip="-strip";     ;;
   ? ) usage;              ;;
  esac
done
shift $(($OPTIND - 1))  # Usunięcie przeanalizowanych argumentów.

rwidth="$(echo $exact $fit | cut -dx -f1)"   # Żądana szerokość
rheight="$(echo $exact $fit | cut -dx -f2)"  #  ... i wysokość.

for image
do
  width="$(identify -format "%w" "$image")"
  height="$(identify -format "%h" "$image")"

  # Utworzenie miniatury obrazu $image, szerokość=$width i wysokość=$height.
  if [ $width -le $rwidth -a $height -le $rheight ] ; then
    echo "Obraz $image ma mniejsze wymiary od żądanych. Obraz pominięty."
  else
    # Utworzenie nowej nazwy obrazu. 

    suffix="$(echo $image | rev | cut -d. -f1 | rev)"
    prefix="$(echo $image | rev | cut -d. -f2- | rev)"
    newname="$prefix-miniatura.$suffix"
   
    # Dodanie w razie potrzeby sufiksu "!" oznaczającego zignorowanie proporcji.

    if [ -z "$fit" ] ; then
      size="$exact!"
      echo "Tworzenie miniatury o dokładnych wymiarach ${rwidth}x${rheight}" \
           "obrazu $image."
    else
      size="$fit"
      echo "Tworzenie miniatury o maksymalnych wymiarach ${rwidth}x${rheight}" \
           "obrazu $image."
    fi

    convert "$image" $strip $convargs "$size" "$newname"
  fi
  count=$(( $count + 1 ))
done

if [ $count -eq 0 ] ; then
  echo "Błąd: brak obrazów do przetworzenia."
fi

exit 0
