Aus aktuellem Anlass hier ein kleines Tool zum Skalieren von Bildern, eine Aufgabe, die immer mal wieder anfällt, insbesondere dann, wenn man ein wenig Webdesign betreibt.
In stark reduzierter Form existierte das schon lange in meinem Fundus, aber zuletzt war es mir dann doch zuviel geworden, den Einzeiler für jeden Anwendungsfall neu anzupassen .
(Und ja, ich weiss: es gibt prima GUI Tools für diese Aufgabe, die ich auch gerne einsetze, insbesondere z.B.
SIR
- aber manchmal ist man auf der Kommandozeile einfach schneller…).
Und, ganz wichtig, eine Option, alle Bilder nicht nur ‘auf einen Schlag’, sondern auch so zu konvertieren, dass sie nachher alle die gleiche Höhe (oder Breite, je nach Wunsch) haben, auch wenn sie vorher jeweils ein anderes Breite/Höhe Verhältnis haben. Das ist nützlich z.B. für Fotogalerien oder Slider. Der langen Rede kurzer Sinn - hier ist der Source-Code:
#!/bin/bash
# Werner Joss, 17.02.2018
# resize Images using ImageMagick convert (not restricted to jpg format)
# defaults are: file pattern=*.jpg, width=1024, height=768
# usage: jpg-resize.sh [-w width] [-h height] [-p pattern]
# will convert all files matching $pattern to $width x $height
# note: omitting -h or -w option will resize to same value for specified option !
# do not preset $width and $height here, see code after getopts block !
pattern="*.jpg" # default file pattern
prefix="c_" # Prefix for resized files - set to empty to replace original files!
while getopts ":w:h:p:" opt; do
case $opt in
w)
width=$OPTARG
;;
h)
height=$OPTARG
;;
p)
pattern=$OPTARG
;;
\?)
echo "Invalid option: -$OPTARG" >&2
exit 1
;;
:)
echo "Option -$OPTARG requires an argument." >&2
exit 1
;;
esac
done
if [ -z $width ] && [ -z $height ]; then # defaults go here
width=1024
height=768
fi
files=`ls $pattern`
for file in $files
do
newfile=$prefix$file
echo resizing $file - $newfile
if [ -z $width ]; then
convert $file -resize x$height $newfile
else
if [ -z $height ]; then
convert $file -resize "$width"x $newfile
else
convert $file -resize "$width"x$height $newfile
fi
fi
done