Image Resizer

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:

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
 

Ähnliche Themen

script sshpass

[gelöst] - for file in ... nur für bestimmte Endungen?

Crontab und Scripts - Problem

Shellscript unerwartetes Dateiende

Queue für copy Script

Zurück
Oben