Bildschrumpfede

Hier hab ich ein Skript für imagemagick gefunden, das ein Bild so lange in den Abmessungen schrumpft, bis es eine bestimmte Größe in KB hat. Ich brauch aber meistens keine Größenanpassungen, sondern lediglich eine „Gewichtsreduktion“ schon in den Abmessungen angepasster Bilder.

Ein Script für die Anpassung der Größe einer einzelnen Datei, ohne die Abmessungen anzufassen, könnte so aussehen:

#!/bin/bash
if [ $# -ne 2 ]
then
echo -e „\nusage:  $0 <file size limit> <image>\n“
exit
fi
IMAGE_FORMAT=jpg
FILE_SIZE_LIMIT=$1
IMAGE_IN=$2
BASENAME=`echo ${IMAGE_IN} | cut -d‘.‘ -f-1 `
IMAGE_OUT=${BASENAME}.smaller.jpg
FILE_SIZE=`ls -sk $IMAGE_IN | cut -d‘ ‚ -f1`
if [ $FILE_SIZE -ge $FILE_SIZE_LIMIT ]
then
echo „reducing $IMAGE_IN from: $FILE_SIZE KB to $1 KB“
SIZE=`identify $IMAGE_IN | cut -d‘ ‚ -f7`
S=`echo $SIZE`
echo „SIZE: ${S}“
QUAL=100
while [ $FILE_SIZE -ge $FILE_SIZE_LIMIT ]
do
let QUAL=QUAL-1
echo „Current quality: ${QUAL}“
convert $IMAGE_IN -quality ${QUAL} $IMAGE_OUT
FILE_SIZE=`ls -sk $IMAGE_OUT | cut -d‘ ‚ -f1`
echo „Current filesize: $FILE_SIZE KB“
done
mv $IMAGE_OUT ${BASENAME}.${QUAL}.${IMAGE_FORMAT}
fi

Den obigen Codeschnipsel für eigene Versuche und Anpassungen in eine Textdatei einfügen (nennen wir sie filesize.sh) und diese ausführbar machen.

./filesize.sh 100 bild.jpg

macht dann bild.jpg 100kb groß und speichert das Ergebnis in der Datei

bild.qualitätsstufenangabe.jpg

Oft muss man aber gleich ganze Ordner bearbeiten – was mit dem Script oben auch ginge:

find /pfad/zum/ordner -iname „*.jpg“ -exec filesize.sh 100 {} \;

Meist ist das aber doch viel zu dick aufgetragen, denn ohne Script geht das schnell mal so:

for i in `ls *.jpg`; do convert -quality 80 $i conv_$i; done

Dann schau man sich das Ergebnis an

ls -l conv*.jpg

und schreibt, sollte es nicht passen, halt eine niedrigere Zahl hinter -quality, nachdem man den ersten Durchgang mit

rm conv*.jpg

gelöscht hat. So lange bis es passt. Schnell und dreckig.

Nachdem die Zeilen einmal eingegeben sind, stecken die in der History der Bash und können mit den Cursortasten nach Oben zügig aufgerufen oder noch Tage später mit [Strg] [R] gesucht und gefunden werden.