Open Source im professionellen Einsatz
Linux-Magazin 04/2003

Digitale Bilder mit Perl archivieren und verwalten

Digitale Plattenkamera

Der Schuhkarton als Archivbox für die Fotosammlung hat ausgedient: Bilder sind heute digital und landen auf der Platte. Ein kommandozeilenbasiertes Perl-Frontend kategorisiert und archiviert die Schnappschüsse und stöbert in der privaten Bildersammlung.

746

Neulich entdeckte ich, wie leicht Linux per USB die Bilder von einer Digitalkamera liest. Bei der Gelegenheit nahm ich mir vor, endlich Ordnung in alle neuen Schnappschüsse sowie die 5000 privaten Fotos zu bringen, die seit einigen Jahren als JPEG-Bilder auf meiner Festplatte herumlungern. Das Problem ist nur, die Files konsequent zu beschriften.

Wer aus dem Urlaub mit 500 Fotos heimkommt, setzt sich nicht hin, um alle mit Texten wie "Ich mit Blumenkette neben dem Mietauto auf Hawaii 2002" zu beschreiben. Meist landen alle Bilder unkommentiert in einem Verzeichnis. Vier Wochen später sind sie vergessen. Will man nach Jahren die Hawaii-Fotos von 2002 ansehen, geht die Sucherei los.

Programme wie iPhoto auf dem Mac oder das brandaktuelle Adobe Photoshop Album erfüllen zwar die meisten Aufgaben, aber grafische Oberflächen von proprietären Produkten sind schnell ausgereizt. Üblicherweise dauert es nur wenige Tage, bis ich an ihre Grenzen stoße und lautstark eine programmierbare Schnittstelle fordere.

Diese und die nächste Ausgabe des Perl-Snapshots zeigen eine programmierbare Bilderverwaltung mit allen Schikanen, die sich auch - aber nicht nur - von der Kommandozeile aus bedienen lässt. So kann man Abfragen in alter Unix-Tradition mit Pipes verknüpfen und filtern, dass es nur so schnackelt.

Die Namensfrage

Als Erstes war zu klären, wie die Bilder eindeutig zu bezeichnen sind, also welche ID jedes Foto erhält. Nach einigem Herumprobieren fand ich es am einfachsten, das genaue Datum und die Uhrzeit zu verwenden, an dem ein Bild aufgenommen wurde:

2002-03-01_22:13:01
2002-03-01_23:22:17
...
2003-02-13_11:07:13


Voraussetzung dafür ist allerdings, dass das Datum in der Kamera richtig eingestellt ist und man nicht mehr als ein Bild pro Sekunde schießt. Digicams speichern die Sekunden-genauen Informationen als Metadaten in der Bilddatei; Perl-Module wie »Image::Info« extrahieren die Daten wieder. So lassen sich auch Fotos richtig einordnen, die aus Versehen in falscher Reihenfolge archiviert wurden oder in einem alten Unterverzeichnis verstauben. Außerdem kann man blitzschnell feststellen, ob ein unbekannt aussehendes Bild schon in der Datenbank liegt oder nicht: Das Datum dient dabei als eindeutiger Stempel.

Es wäre mühsam, jede Datei einzeln zu beschreiben, gerade wenn sich viele Bilder stark ähneln. Praktischer sind daher Text-Tags, die auf einen Schlag gleich einem Schuhkarton voller Bilder zugeordnet sind. Ein Bild kann beliebig viele Tags erhalten, ein Tag kann beliebig vielen Bildern zugeordnet sein.

Die Bilder liegen - nach Datum sortiert - in Unterverzeichnissen auf der Festplatte, die beschreibenden Tags in einer MySQL-Datenbank. Abbildung 1 zeigt die Umsetzung. Das Beispiel verwendet Ober- und Unterkategorien: Alle Bilder, die Freunde zeigen, erhalten das Freunde-Tag; für Max und Schorsch gibt es zusätzlich ein eigenes Tag.

Abbildung 1: Bild »2002-03-01_22:13:01« (rot) gehört zu den Kategorien »Freunde« und »Max«. Dem zweiten Bild (grün) ist ebenfalls das »Freunde«-Tag zugeordnet, es gehört aber zusätzlich zur Kategorie »Schorsch«.

Ab in die Datenbank

Image Database (kurz »idb«) heißt das im Folgenden vorgestellte Kommandozeilen-Frontend für das neue System. Gerade von den Bahamas zurückgekommen hänge ich die Kamera an meine Linux-Kiste und tippe:

$ idb --import --tag "Bahamas 2003"   /mnt/cam/dcim/100_fuji


Schon wandern alle JPEGs aus dem Kameraverzeichnis »100_fuji« in die Datenbank. Liegen die Bilder verstreut über einige Verzeichnisse auf dem Laptop, ist auch das kein Problem. Sogar die länglichen Optionen lassen sich abkürzen:

$ idb -i -t "Tirol 2002" /samba/laptop/fotos/*


Die Shell ersetzt das Sternchen durch alle Dateien und Unterverzeichnisse in »/samba/laptop/fotos/«; das »idb«-Kommando liest daraus alle Bilder und beschriftet sie mit dem Tag »Tirol 2002«.

Manchmal tauchen beim Durchforsten des Verzeichnis-Waldes alte JPEGs auf, die man nicht mühsam durchsehen und mit Tags beschreiben will. Obwohl Tags später hilfreich sind, ist niemand gezwungen gleich eins anzugeben. Also erst mal nur archivieren:

$ idb -i uralt.jpg
2002-03-01_23:22:17


Jeder »--import«-Aufruf gibt die neuen ID(s) der archivierten Fotos aus. Auch nachträglich lässt sich noch ein Tag an ein Bild hängen, wenn man die ID angibt. Statt der ID genügt auch der Name der Datei, denn »idb« wird den Zeitstempel auslesen, zur Datenbank gehen, die ID ermitteln und das Tag anhängen:

$ idb -t "Freunde" 2002-03-01_23:22:17
$ idb -t "Schorsch" uralt.jpg


Pro Bild sind beliebig viele Tags erlaubt, im vorliegenden Fall ist das Bild sowohl mit »Freunde« als auch mit »Schorsch« verknüpft. Die List-Funktion zeigt nun für »uralt.jpg« zwei Tags an:

$ idb -l uralt.jpg
uralt.jpg: Freunde, Schorsch

Linux-Magazin kaufen

Einzelne Ausgabe
 
Abonnements
 
TABLET & SMARTPHONE APPS
Bald erhältlich
Get it on Google Play

Deutschland

Ähnliche Artikel

  • Foto-Labor

    Gimp, das GNU Image Manipulation Program, verbessert und manipuliert digitale Bilder mit anspruchsvollen Filterfunktionen. Statt immer wieder die gleichen Manöver mit der Maus auszuführen, lassen sich die Vorgänge mit Gimps Perl-Schnittstelle sogar automatisieren.

  • Ozapft is

    Neben Google, Amazon und Ebay bietet neuerdings auch Yahoo eine Programmierschnittstelle zu einigen seiner Dienste an. Drei einfache Perl-Skripte stöbern heute damit Tippfehler, Internetbildchen und verschollen geglaubte Klassenkameraden auf.

  • Farbenspiel

    Oft benötigen ganze Serien digitaler Bilder dieselben Korrekturen, was den Fotografen zu immer gleichen Schritten in Gimp zwingt. Viel bequemer kommt zum Ziel, wer die Retusche automatisiert.

  • Bilder-Zauberer

    Das Java-SDK bietet in der aktuellen Version einige Möglichkeiten für die Bildbearbeitung. Einfacher und performanter geht es aber mit JMagick, dem Java-API für das bekannte Image-Magick-Toolkit.

  • Alter geht vor Schönheit

    Das Fotomanipulationsprogramm Gimp hilft nicht nur dabei, Fotos optisch aufzubrezeln, es beherrscht auch den umgekehrten Fall: Aus brandneuen Digitalbildern macht es nostalgisch angehauchte Fotos mit dem typischen Gelbstich.

comments powered by Disqus

Stellenmarkt

Artikelserien und interessante Workshops aus dem Magazin können Sie hier als Bundle erwerben.