Bilder automatisch verkleinern
Heute abend kommen Freunde zu Besuch um mit uns gemeinsam Silvester zu feiern. Um einen entspannten Abend zu haben, planen wir einen Diaabend mit Bildern unserer Urlaube. Unser Beamer schafft leider nur eine Aufloesung von 800×600 Pixeln. Das Ganze mit meinem Thinkpad R40 unter Kubuntu zum Laufen zu bekommen ist auch ein Thema, welches einen Artikel hier fuellen wird, aber dazu komme ich in einem der naechsten Artikel. Jedenfalls moechte ich die Bilder unserer Urlaube (aufgenommen meist digital mit Canon) auf 800×600 Pixel verkleinern, damit das Laden der Bilder nicht so lange dauert. Hierzu bediene ich mich der Tools jhead und mogrify, die dazu wirklich gut geeignet sind. Unsere Kameras speichern die Orientierung des Bildes (also ob es im Hoch- oder Querformat aufgenommen wurde) in den EXIF-Daten des Bildes ab. Normalerweise werden die Bilder automatisch beim Herunterladen von der Kamera auch gedreht. Zumindest mit digikam unter Linux. Leider habe ich aber auch Bilder die nicht gedreht wurden. Bei diesen wuerde das Verkleinern auf 800×600 zu einer Hoehe von 800px fuehren, was nicht wirklich in meinem Sinne waere. Also muss ich diese erst drehen. Der folgende Befehl dreht alle Bilder in die richtige Position:
jhead -autorot images/Spain/2007_02_27/*.JPG
Anschliessend muessen die Bilder nur noch verkleinert werden. Da ich diese Aktionen nicht auf den Originalbildern sondern im extra angelegten Ordner Diashow ausfuehre, kann ich getrost den Befehl mogrify nutzen, der die Images mit der geaenderten Version ueberschreibt. Moechte ich dies nicht, gibt es stattdessen den Befehl convert.
jhead -cmd “mogrify -resize 800×600\> &i” images/Spain/2007_02_27/*.JPG
Das Ganze kann man natuerlich auch rekursiv auf Unterverzeichnisse anwenden, wenn man mag. Könnte zum Beispiel so aussehen:
find . -type f -iname “*.jpg” -print0 | xargs -0 jhead -autorot
find . -type f -iname “*.jpg” -print0 | xargs -0 jhead -cmd “mogrify -resize 800×600\> &i”
Das habe ich allerdings nicht mehr ausprobiert, also auf eigene Gefahr. Dem Diaabend steht damit nichts mehr im Wege.
Fuer alle, denen die einzelnen Befehle nichts sagen:
find … findet Dateien im Filesystem
der Punkt gibt an, dass im aktuellen Verzeichnis gestartet werden soll. Es wird rekursiv gesucht.
“-type f” gibt an, dass nur Dateien (also keine Verzeichnisse untersucht werden
“-iname *.jpg” laesst find nur jpg-Dateien suchen und zwar case-insensitive
“-print0″ schreibt das Ergebnis in den Parameter 0xargs -0 … uebergibt den Parameter 0 als Argument an die nachfolgende Befehlskette
jhead … Paket zur Manipulaton von Bildern und EXIF-Daten
“-autorot” dreht das Bild, wenn laut EXIF notwendig
“-cmd” fuehrt die nachfolgende Befehlszeile aus (&i steht fuer die Datei die jhead bearbeitet)mogrify … Paket fuer die Bildmanipulation
“-resize” verkleinert / vergroessert das Bild “800×600\>” setzt die maximalen Werte fuer Weite und Hoehe fest. “\>” besagt, dass nur Dateien manipuliert werden, welche groesser als die maximalen Werte sind.
Das funktioniert auch, wenn man bestimmte immer wiederkehrende Dateien (z.B. Thumbs.db oder auch .svn) in allen Unterordnern loeschen moechte:
find . -iname “thumbs.db” -print0 | xargs -0 rm –




Posted under: