A
aspire_5652
Tripel-As
Hallo, ich möchte mein selbst geschriebenes Shellscript vorstellen. Dieses Script verkleinert Digitale Bilder im ".jpg" Format auf vordefinierte Größen. Inspiration war der Wunsch nach einem schmalen Programm was genau diesen Zweck erfüllt und sich an den Linux-Bordmitteln bedient. Kritik und Anregung sind willkommen.
Das Script kennt zwei Modi: Den textbasierten Kommandozeilenmodus und den GUI-Modus (Vorraussetzung: kde)
Hier das Script:
Das Script kennt zwei Modi: Den textbasierten Kommandozeilenmodus und den GUI-Modus (Vorraussetzung: kde)
Hier das Script:
Code:
#!/bin/bash
function cli (){
abort="false"
for package in convert zip
do
if [ $(which $package &> /dev/null; echo $?) -ne 0 ]
then
echo "'$package' nicht installiert"
abort="true"
fi
done
if [ ${abort} = true ]
then
echo "=> bitte fehlende Pakete nachinstallieren um fortzufahren"
exit 1
fi
echo "Welche Auflösung soll verwendet werden?
[1] 640x480
[2] 800x600
[3] 1024x768
[4] 1200x900
[5] 1600x1200"
read answer
case ${answer} in
1) RESOLUTION=640x480;;
2) RESOLUTION=800x600;;
3) RESOLUTION=1024x768;;
4) RESOLUTION=1200x900;;
5) RESOLUTION=1600x1200;;
*) echo "falsche Eingabe"; exit 1;;
esac
cd "$DIR"
echo "Bilder werden verkleinert, bitte Geduld"
len=$(find *.{JPG,jpg,JPEG,jpeg} -maxdepth 1 2> /dev/null | wc -l)
declare -i i
i=1
mkdir -p ./work
for IMAGE in $(find *.{JPG,jpg,JPEG,jpeg} -maxdepth 1 2> /dev/null)
do
echo "Bild $i von $len"
convert -resize ${RESOLUTION} "${IMAGE}" "./work/${IMAGE}"
i=$i+1
done
echo -e "Die Verkleinerung der Bilder ist nun abgeschlossen.\nSollen die Bilder zusätzlich komprimiert werden? (zip) [y/n]"
read answer
if [ $answer == y ]
then
cd ./work
zip images.zip *.{JPG,jpg,JPEG,jpeg}
cd ..
mv ./work/images.zip .
rm -r ./work
echo "Komprimierung abgeschlossen."
fi
cd $OLD_DIR
}
function gui () {
if [ $(which kdialog &> /dev/null; echo $?) -ne 0 ]
then
echo "'kdialog' nicht installiert"
echo "=> bitte fehlendes Paket nachinstallieren um fortzufahren"
exit 1
fi
abort="false"
for package in convert zip
do
if [ $(which $package &> /dev/null; echo $?) -ne 0 ]
then
missing_package="$missing_package '$package'"
abort="true"
fi
done
if [ ${abort} = true ]
then
kdialog --error "Folgende Pakete fehlen: $missing_package.\nBitte fehlende Pakete nachinstallieren um fortzufahren"
exit 1
fi
DIR=$(kdialog --getexistingdirectory "/windows/backup/Photos Fuji F31fd")
cd "$DIR"
RESOLUTION=$(kdialog --combobox "Bitte Auflösung wählen:" "640x480" "800x600" "1024x768" "1200x900" "1600x1200")
len=$(find *.{JPG,jpg,JPEG,jpeg} -maxdepth 1 2> /dev/null | wc -l)
mkdir -p ./work
dcopRef=$(kdialog --progressbar "${len} Bilder werden verkleinert, bitte Geduld." ${len})
dcop $dcopRef setAutoClose true
for IMAGE in $(find *.{JPG,jpg,JPEG,jpeg} -maxdepth 1 2> /dev/null)
do
convert -resize ${RESOLUTION} "${IMAGE}" "./work/${IMAGE}"
inc=$((`dcop $dcopRef progress` + 1))
dcop $dcopRef setProgress $inc;
done
dcop $dcopRef close &> /dev/null
kdialog --title "Vorgang abgeschlossen" --yesno "Die Verkleinerung der Bilder ist nun abgeschlossen.\n Sollen die Bilder zusätzlich komprimiert werden? (zip)"
if [ $? -eq 0 ]
then
ZIP_FILE=$(kdialog --getsavefilename . ".zip")
cd ./work
zip images.zip *.{JPG,jpg,JPEG,jpeg} &> /dev/null
cd ..
mv ./work/images.zip "${ZIP_FILE}"
rm -r ./work
kdialog --msgbox "Komprimierung abgeschlossen."
fi
}
if [ -z $1 ]
then
echo -e "bitte Modus wählen:\nGrafikmodus: '--gui'\nKommandozeilenmodus: '--cli' <Zielverzeichnis>\n"
exit 1
else
echo $2
if [ $1 == "--cli" ]
then
if [ -z $2 &> /dev/null ]
then
echo "Im '--cli' Modus bitte Zielverzeichnis mit übergeben, Abbruch."
exit 1
else
if [ ! -d "$2" ]
then
echo "$2 ist kein Verzeichnis, Abbruch."
exit 1
fi
fi
DIR="$2"
OLD_DIR=$(pwd)
fi
case $1 in
--gui) gui;;
--cli) cli;;
*) echo "falsche Eingabe"; exit 2;;
esac
fi