#! /bin/bash
# Programm konvertiert hochformatige jpg-Bilddateien in eine Serie 
# querformatiger. Die Abbildungsgröße schrumpft und es wird seitlich
# mit schwarzem Hintergrund ergänzt. Die Operation wird mit einer 
# geforderten Anzahl von Stufen durchgeführt, so dass ein Zoom-out-Effekt
# entsteht.
# programmiert fuer GNU awk 3.1.0, GNU sed 3.02, GNU bash 2.05 
# und Kommandozeilen-Bildbearbeitungssoftware von www.imagemagick.org
# 2006-05-14
#   

echo "Diese Programm benötigt die awk-Datei trig01.awk und die Bildhintergrunddatei black.miff" echo echo -n "Eine jpg-Datei eingeben:" read inputfile if [ -e $inputfile ]; then # Kontrolle, ob es diese Datei gibt echo -n "Schrittanzahl bitte: "; read s g=$(identify $inputfile | awk '{print $3}') # Erfassen der Größe des eigengebenen Bildes" b=${g%%x*} h=${g##*x} echo "Bildbreite ist $b, Bildhöhe ist $h" convert -geometry "$h!x$b!" /home/hiereth/bin/grafik/black.miff /tmp/$$.miff # Anpassen der Größe des benötigten Hintergrunds" #identify /tmp/$$.miff q=$(echo "$h $b" | awk '{print $1/$2}') # Ermitteln des Seitenverhältnisses echo "Seitenverhältnis q = $h / $b = $q" echo "Es wird skaliert von $b x $h nach $h x $b" # Erfassen des Dateinamens und Anlegen eines gleichnamigen Unterzeichnisses directory=$(basename $inputfile .jpg) if [ -e $directory ]; then echo "$directory existiert, früher erzeugte Bilddateien werden entfernt" rm $directory/*.jpg else echo "Für die erzeugten Bilddateien wird Verzeichnis $directory angelegt" mkdir $directory fi # Berechnung der Grenzwerte des Skalierungsvorganges ha=$(echo "$h $q" | awk '{print $1*$2}') # Zwischenhöhe bei erstem i he=$(echo "$h $q" | awk '{print $1/$2}') # Zwischenhöhe bei letzem i ba=$(echo "$b $q" | awk '{print $1*$2}') # Zwischenbreite bei erstem i be=$(echo "$b $q" | awk '{print $1/$2}') # Zwischenbreite bei letztem i if [ $s -gt 0 ]; then # Erzeugen der größenveränderten Bilderserie i=0 while [ $[2*$i] -le $[2*$s] ] do echo # echo "Funktionswert 0,5*(1-cos(x)) nach Schritt $s" # Füttern der trigonometrischen Funktion für Funktionswerte # da nur Funktionswerte im Intervall [0;pi] benötigt werden # wird als Argument Schritt i und doppelte Gesamtschrittzahl # übergeben. j=$(echo "$i $[2*$s]" | trig01.awk) echo "$i. Bilderzeugung mit Skalierungsfaktor j = $j" # echo "$j $ha $he $ba $be" | awk '{print $1" "$2" "$3" "$4" "$5}' k=$(echo "$j $ha $he $ba $be" | awk '{print $2+($3-$2)*$1}') # echo "k = $k" # Entspriche Bildhöhe im aktuellen Schritt l=$(echo "$j $ha $he $ba $be" | awk '{print $4+($5-$4)*$1}') # echo "l = $l" # Entspricht Bildbreite im aktuellen Schritt m=$(echo "$k $b" | awk '{print 0.5*($1-$2)}') # echo "m = $m" # Entspricht Höhen-Offset im aktuellen Schritt" n=$(echo "$h $l" | awk '{print 0.5*($1-$2)}') # echo "n = $n" # Entspricht seitlichem Verschieben beim Zusammensetzen" # echo "-geometry breite x höhe = l x k = $l x $k" convert -geometry "$kx$l" $inputfile /tmp/$$a.miff # echo "-crop h x b + 0 + m = $h x $b + 0 + $m" convert -crop "$bx$h+0+$m" /tmp/$$a.miff /tmp/$$b.miff # echo "-composite + n + 0 = + $n + 0" if [ ${#i} -eq 1 ]; then composite -geometry "+$n+0" /tmp/$$b.miff /tmp/$$.miff $directory/00$i.jpg fi if [ ${#i} -eq 2 ]; then composite -geometry "+$n+0" /tmp/$$b.miff /tmp/$$.miff $directory/0$i.jpg fi if [ ${#i} -eq 3 ]; then composite -geometry "+$n+0" /tmp/$$b.miff /tmp/$$.miff $directory/$i.jpg fi i=$[i+1] done rm /tmp/$$.miff /tmp/$$a.miff /tmp/$$b.miff else echo "Schrittzahl muß natürliche Zahl sein" fi else echo "Diese Datei existiert nicht" exit 1 fi

###################################################################### # # awk-Anweisungen zum Errechnen von cosinus-Funktionswerten # #! /bin/awk -f {pi = 3.141592654} #{print "Funktionswert zu "$1"/"$2, 0.5-0.5*cos($1*2*pi/$2)} {print 0.5*(1-cos($1*2*pi/$2))}