Last active
August 29, 2015 13:56
-
-
Save Stefan-Wagner/9014389 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/bin/bash | |
# | |
# (c) GPLv3 | |
# | |
# schrumpf5.sh: Schrumpf ein Bild mit der Endung JPG auf 1/5 der Breite u. 1/5 der Höhe, | |
# also auf ein 1/25 der Fläche und benenne es von *JPG zu *jpg um dabei. | |
# | |
# Überschreibt eventuell schon existierende Dateien mit Namen jpg ohne Nachfrage | |
# | |
# Dateien mit falscher Endung (nicht JPG) werden überpedantisch zurückgewiesen. | |
# | |
# Verhalten für andere Grafikformate undefiniert | |
# | |
# Usage: | |
# schrumpf5.sh DSCF0001.JPG | |
# verkleinert die Datei auf beiden Achsen auf 1/5. | |
# Ein ganzes Verzeichnis verkleinern: | |
# find . -maxdepth 1 -name "*.JPG" -exec schrumpf5.sh {} ";" | |
# | |
# Depends: | |
# Hängt vom Programmpaket image-magick ab. | |
function abbruch { | |
case $1 in | |
1) echo "keine Datei" ;; | |
2) echo "Ungültiger x- oder y-Wert" ;; | |
3) echo "Dateiname endet nicht auf JPG" ;; | |
*) echo "falscher Fehler" ;; | |
esac | |
exit $1 | |
} | |
file=$1 | |
test -f "$file" || abbruch 1 | |
if [ ${file: -3:3} != "JPG" ]; then abbruch 3; fi | |
# klappt nicht bei Dateinamen mit blank, tab, linefeed u.a. Whitespace im Namen | |
arr=($file) | |
# Ein Dateiname der blanks enthält wird problematisch, wenn man das nicht berücksichtigt. | |
# Für eine Datei "Das Leben des Brian" wird len zu 4, der Wortzahl | |
len=${#arr[@]} | |
# echo ${#arr[@]} ${arr[0]} ${arr[@]} | |
pos=$((len+2)) | |
# echo -e len=$len"\n"pos=$pos | |
resolution=$(identify "$file" | awk "{print \$$pos}") | |
# echo resolution=$resolution | |
# Ausgabe identity: | |
# DSCF5700.JPG JPEG 2458x1524 2458x1524+0+0 8-bit DirectClass 1.488MB 0.000u 0:00.000 | |
# Ergbenis für resolution: 2458x1524 | |
# alles bis x inklusive löschen: | |
y=${resolution/*x/} | |
# 1524 | |
# alles ab x inklusive löschen: | |
x=${resolution/x*/} | |
# 2458 | |
# vor dem Dividieren /5 addieren wir 5, um zu einem akuraten Runden zu kommen, denn | |
# Integerarithmetik führt in der Shell nicht von selbst zum Runden, sondern zum Abschneiden. | |
# 14 und 16 durch 10 ergibt also jeweils 1, addieren wir vorher 5, so dividieren wir dann 19 o. 21 durch 10 | |
# und kommen zu 1 und 2. | |
# echo "x=$x y=$y" | |
xneu=$(((x+5)/5)) | |
yneu=$(((y+5)/5)) | |
((xneu < 10 || yneu < 10)) && abbruch 2 | |
# convert -resize 800x600 $file ${file/.JPG/.jpg} && rm $file | |
convert -resize ${xneu}x${yneu} "${file}" "${file/.JPG/.jpg}" # && rm $file |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment