Fotomat

Di, 25. April 2023, Ralf Hersel

Vermutliche kennen viele von euch diesen Anwendungsfall: Ihr habt mit der Kamera oder dem Handy in den Ferien oder bei einem Event einen Haufen Fotos geknipst. Die möchtet ihr in ein Fotobuch giessen, auf eurer Webseite bereitstellen oder zu einem anderen Zweck aufbereiten. Häufig handelt es sich dabei nicht nur um eure eigenen Fotos, sondern ihr habt die Schnappschüsse von mehreren Personen (und verschiedenen Kameras) eingesammelt. Und schon steht ihr knietief im Thema Massenbearbeitung von Bildern.

In diesem Fall lohnt es sich, ein Shell- oder Phython-Skript zu schreiben, welches einem die Routinearbeit abnimmt. Ich habe für meine Zwecke schon vor vielen Jahren das Phython-Programm fotomat geschrieben und es schon unzählige Male eingesetzt. Es liegt (noch) nicht in meinem Codeberg-Repository, weil es sehr stark auf meine Bedürfnisse zugeschnitten ist. Trotzdem möchte ich euch die Abläufe und Verarbeitungsschritte vorstellen, damit ihr eine Idee für eure eigene Umsetzung bekommt.

Der Input für fotomat ist ein Verzeichnis, in dem sich alle Bilddateien (nur JPG) befinden. In der Regel haben die Bilder von anderen Leuten auch andere Namen und Zeitstempel, weshalb das Kopieren in einen einzigen Ordner keine Probleme mit Duplikaten bereitet.

Gestartet wird das Skript direkt aus dem Fotoverzeichnis. Damit das funktioniert, erstellt man ein kleines Shellskript mit dem Namen 'fotomat' und kopiert diese nach /usr/bin/. Das Skript macht nichts anderes, als das Phython-Skript aufzurufen. Da es in /usr/bin/ liegt, ist es als 'Befehl' aus jedem anderen Verzeichnis aufrufbar.

#!/bin/bash
# Copy me to /usr/bin/
python3 /home/ralf/dev/fotomat/fotomat.py

Zuerst fragt das Skript, ob man sich wirklich im richtigen Fotoverzeichnis befindet. Es wäre doch schade, wenn man im falschen Verzeichnis ist und sich aus Versehen andere Bilder versaut.

Dann schaue ich mir die Endungen aller Dateien an. Erlaubt sind nur jpg-Dateien, und zwar in genau dieser Schreibweise 'jpg'. Bei allen anderen Endungen (JPG, jpeg, JPEG) ändert das Skript diese in 'jpg'. Falls formatfremde Dateien im Verzeichnis entdeckt werden, weist das Skript darauf hin und bricht ab.

Im Schritt werden die Dateinamen in ihr Aufnahmedatum umbenannt. Dazu kommt das Werkzeug Exiv2 zum Einsatz. Das ist insbesondere dann wichtig, wenn man Bilder von verschiedenen Personen gesammelt hat. Durch die Umbenennung wird sichergestellt, dass sich alle Fotos in der chronologisch korrekten Reihenfolge befinden. Der Befehl lautet:

exiv2 -Fr %Y-%m-%d_%H-%M-%S rename *.jpg'

Jetzt biete ich die Verbesserung der Bildqualität an. Dieser Schritt kann übersprungen werden. Falls man sich dafür entscheidet, gibt es die Option, die optimierten Fotos unter einem neuen Namen zu speichern oder die Originale zu überschreiben. Entscheidet man sich für die erste Option, kann man nachträglich die Qualität des Originals mit der verbesserten Version vergleichen. Der Befehl dazu stammt aus dem ImageMagick-Repertoire:

convert original.jpg -channel 'RGBA' -contrast-stretch 1% -quality 85 improved.jpg

Bei diesem Befehlt lohnt es sich zu experimentieren. Eigentlich gibt es keinen Befehl, der für alle Bilder zu einer Verbesserung der Qualität führt. Deshalb sind die Parameter in meinem Beispiel sehr moderat gewählt. Hier ist ein Beispiel:

In diesem Beispiel halte ich die Verbesserung für gelungen. In vielen Tests stellte sich heraus, dass man entweder kaum einen Unterschied erkennen kann, oder sich das Bild leicht verbessert hatte. Eine Verschlechterung habe ich nur ganz selten gesehen.

Auf zum nächsten Schritt, der Änderung der Bildgrösse. Fotomat bietet vier Grössen an:

  • 640  Pixel - Homepage klein
  • 1024 Pixel - Homepage gross
  • 1600 Pixel - Bildschirm
  • 1920 Pixel - Full HD

Je nach Wahl werden die Bilder auf die entsprechende Grösse skaliert. Digitalkameras erzeugen meistens sehr grosse Bildformate. Da kann man sich die Frage stellen, welche Auflösung man tatsächlich benötigt. Für die Archivierung skaliere ich meine Fotos auf Full HD herunter. Für die Galerie auf meiner Homepage verwende ich das 1024er Format.

Weiter geht es mit der Bildorientierung. Jede:r hat diesen Effekt schon einmal gesehen; manche Bilder liegen auf der Seite, weil die Kamera oder eine Nachbearbeitung die Bildorientierung verkackt hat. Auch für diese Korrektur bietet ImageMagick ein Heilmittel:

mogrify -auto-orient *.jpg

Gut zu wissen, die ImageMagick-Befehle convert und mogrify machen funktional dasselbe. Bei convert bleibt das Original bestehen, bei mogrify wird das Original überschrieben.

Im nächsten Schritt bietet fotomat die Auswahl von Bildern für die Publikation an. Es kann ja sein, dass man alle Bilder archivieren, aber nur bestimmte publizieren möchte. Dazu gibt es jetzt die Gelegenheit.

Zum Schluss lade ich die zum Publizieren ausgewählten Fotos per FTP auf meinen Webserver hoch. Da ich Joomla mit dem sigplus-Modul für die Fotogalerie verwende, sind die Befehle von fotomat genau darauf angepasst. Ich frage nach dem Jahr und Eventnamen für die Fotoserie. Dann prüfe ich auf dem Server, ob es dieses Bilderverzeichnis schon gibt (z. B.: 2023_03_Rafting). Falls nicht, wird es erzeugt. Dann werden die Fotos auf den Server hochgeladen. Anschliessend zeige ich den Befehl an, der auf der Homepage beim Artikel für das Anzeigen der Fotostrecke eingegeben werden muss, z. B.:

{gallery}gallery/2023/03_Rafting{/gallery}

Das war es. Ich hoffe, ich konnte euch mit diesem Beitrag ein paar Anregungen für eure eigene Foto-Automatisierung geben.

Tags

Fotos, Bilder, Publizieren, Umwandeln, Exiv2, ImageMagick