Projekte

Fotomat

FotomatIhr kennt das, da hat man mit Freunden ein schönes Wochenende verbracht und alle haben mit ihren Smartphones viele Fotos gemacht. Nun gilt es aus der Fülle die schönsten Aufnahmen auszuwählen, diese zu bearbeiten und evtl. ins Internet zu stellen.

Schon 2013 habe ich begonnen diesen Prozess zu automatisieren. Über die Jahre ist das Python Skript 'Fotomat' entstanden, welches ich immer wieder erweitert und an meine Bedürfnisse angepasst habe.

In diesem Artikel möchte ich das Tool vorstellen und für euren eigenen Foto-Workflow empfehlen.

 

Einleitung

Fotomat ist ein ca. 250 Zeilen langes Python Skript ohne grafische Benutzeroberfläche. Es wird aus dem Bilder-Verzeichnis heraus gestartet und führt einen mittels Fragen durch die einzelnen Prozessschritte. Das Skript kann zwischendurch unterbrochen werden um z.B. den Bearbeitungsstand der Fotos zu überprüfen, einzelne Bilder zu löschen oder falls man das Skript nicht bis zum letzten Schritt benötigt. Fotomat eignet sich hervorragend für Programmieranfänger, die sich an einem einfachen Beispiel in die Programmiersprache Python einarbeiten möchten. Die Bearbeitung des Skripts ist fast Pflicht, weil es zur Zeit nur meinen persönlichen Foto-Workflow abbildet; die Anpassung an die eigenen Bedürfnisse bietet sich an.

 

Installation

Das Programm besteht aus zwei Dateien in einem ZIP-Archiv, das hier heruntergeladen werden kann: Download Fotomat

Die beiden Dateien heissen 'fotomat' und 'fotomat.py'. Erstere ist ein Shell-Skript mit folgendem Inhalt:

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

In dieser Datei muss die letzte Zeile angepasst werden. Dort muss der korrekte Pfad auf die Datei 'fotomat.py' stehen. Das Shell-Skript stellt sicher, dass Fotomat aus jedem beliebigen Verzeichnis heraus aufgerufen werden kann, ohne dass man jedes mal den Pfad eintippen und kennen muss. Nachdem ihr den Pfad angepasst habt, kopiert diese Datei bitte mit Root-Rechten in das Verzeichnis /usr/bin/

Die zweite Datei 'fotomat.py' enthält das eigentliche Python Programm. Diese Datei könnt ihr in ein beliebiges Verzeichnis ablegen. Wichtig ist, dass der Pfad den ihr vorhin im Shell-Skript eingegeben habt, dazu passt. Ein Beispiel für einen sinnvollen Pfad wäre: /home/dev/python/fotomat/fotomat.py

Nun gilt es auszuprobieren, ob alles stimmt. Öffnet dazu ein beliebiges Verzeichnis im Terminal und gebt 'fotomat' ein. Entweder meldet sich nun Fotomat oder ihr erhaltet eine Fehlermeldung, dass eine Datei nicht gefunden wurde; dann ist vermutlich der Pfad im Shell-Skript falsch.

Ein letzter Punkt ist noch zu überprüfen. Fotomat benötigt zwei weitere Programme, nämlich 'exiv2' und 'imagemagick'. Ersteres dient zur Ermittlung der Metadaten eines Fotos und das Zweite wird für die Fotobearbeitung gebraucht. Diese beiden Programme sind nicht zwingend auf jedem Linux Computer vorhanden und müssen evtl. erst installiert werden. Wir verschwenden hier keine Zeit mit der Prüfung, ob die Programme installiert sind, sondern installieren sie einfach. Dazu öffnet ihr ein Terminal (Ctrl+Alt+T) und gebt diese beiden Befehle ein (gilt für Ubuntu):

sudo apt install exiv2
sudo apt install imagemagick

 Soviel zur Installation.

 

Anpassung - Teil 1

Falls ihr Bilder via FTP auf euren Webserver publizieren möchtet, ist diese Anpassung Pflicht. Dazu öffnet ihr die Datei 'fotomat.py' in einem beliebigen Texteditor oder einer IDE wie z.B. Geany. Ziemlich weit oben seht ihr die Sektion 'Constants'. Dort gibt es vier Parameter für die FTP-Verbindung; gebt hier eure Daten ein:

FTP_SERVER = 'eigene_Daten'             # FTP server name
FTP_USER = 'eigene_Daten'               # FTP user name
FTP_PASSWORD = 'eigene_Daten'           # FTP password
FTP_IMAGE_DIR = 'eigene_Daten'          # Root image directory on your webserver

 

Bedienung

Die Bedienung von Fotomat ist kinderleicht, da man nur auf die Fragen des Skripts antworten muss. Zu Testzwecken empfehle ich, ein Verzeichnis anzulegen und dort ein paar Fotos hinein zu kopieren. Nun öffnet ihr in diesem Verzeichnis ein Terminal. In Ubuntu kann man im Dateimanager die rechte Maustaste drücken und auf 'Im Terminal öffnen' klicken.

Jetzt gebt ihr 'fotomat' ein, gefolgt von der Eingabetaste (RETURN) und schon läuft Fotomat los. Im Folgenden werde ich die verschiedenen Prozessschritte erläutern. Als Erstes seht ihr das hier (oder ähnlich):

 

ralf@ralf:~/Bilder/Januar$ fotomat
===== Fotomat 0.13 - 17.01.2020 =====
Bist du im richtigen Bilderverzeichnis?
/home/ralf/Bilder/Januar
Ist das Verzeichnis korrekt (j/n)? 

Fotomat fragt, ob ihr euch im richtigen Verzeichnis befindet. Das ist eine Sicherheitsabfrage um zu verhindern, dass ihr aus Versehen Bilder verändert, die ihr gar nicht ändern möchtet. Beantwortet die Frage mit ja (j) oder nein (n).

 

Im Ordner befinden sind 3 jpg-Fotos und 0 andere Dateien.
Sollen die Bilder in ihr Aufnahmedatum umbenannt werden (j/n)?

In diesem Schritt wandelt Fotomat alle JPG-ähnlichen Endungen in die Kleinschreibweise 'jpg' um prüft, ob sich artfremde Dateien im Verzeichnis befinden. Auch dies ist ein Sicherheitsmassnahme, die das unbewusste Verändern von Nicht-Fotos verhindern soll. Fotomat fragt jetzt, ob die Dateinamen der Fotos geändert werden sollen. Diese Frage kann man eigentlich immer mit 'ja' beantworten, ausser man hat den Fotos bereits sprechende Namen gegeben, z.B. 'Tante-Erna.jpg'. Der tatsächliche Sinn dieser Umbenennung liegt in der chronologischen Sortierbarkeit der Bilder. Dies ist wichtig, wenn Aufnahmen von verschiedenen Geräten in eine zeitliche Reihenfolge gebracht werden sollen.

 

Soll die Bildqualität verbessert werden (j/n)?

Nun geht es ins Eingemachte. Die Bildqualität ist ein Punkt, der vom subjektiven Empfinden, der Originalqualität der Bilder und dem Sujet abhängt. Für die Bildverbesserung gibt es keine allgemeingültige Lösung; alles was man macht, ist ein Kompromiss. Moderne Kameras und Smartphones schiessen Bilder in sehr guter Qualität und führen meist selbst eine Bildoptimierung durch. Schaut euch die Bilder an und beurteilt die Bildqualität. Falls ihr damit zufrieden seid, dann gebt bei dieser Frage 'nein' ein. Wenn ihr euch für 'ja' entscheidet, macht Fotomat eine 1%ige Kontrasterweiterung über den RGBA-Farbraum und stellt die JPG-Komprimierung auf 85% ein. Diese Optimierung ist ziemlich moderat; teilweise erkennt man gar keine Änderung in der Bildqualität.

Bei der Bildoptimierung lohnt es sich zu experimentieren. Hier sind ein paar Kommandos, die ihr im Terminal auf eure Bilder zu Testzwecken loslassen könnt:

aufhellen       convert orig.jpg -sigmoidal-contrast 4,0% heller.jpg
normalize       convert orig.jpg -normalize normalized.jpg
gamma           convert orig.jpg -auto-gamma gamma.jpg
stretch         convert orig.jpg -channel 'RGBA' -contrast-stretch 1% -quality 85 stretch.jpg

Falls ihr dabei euren persönlichen Favoriten findet, könnt ihr das Optimier-Kommando in Fotomat entsprechend anpassen (siehe auch Kapitel 'Anpassen - Teil 2' weiter unten). Die Dokumentation von ImageMagick liefert dazu wertvolle Hinweise. Jetzt geht es weiter im Fotomat-Programmablauf:

 

Soll die Bildgrösse geändert werden (j/n)? j
a) 640  Pixel - Homepage klein
b) 1024 Pixel - Homepage gross
c) 1600 Pixel - Bildschirm
d) 1920 Pixel - Full HD
Wähle die Bildgrösse (a, b, c, d): 

Möchte man die Bildgrösse ändern, bietet Fotomat vier verschiedene Grössen an, die mit a, b, c, d gewählt werden können.

 

Soll die Bildorientierung korrigiert werden (j/n)? 

Manche Kameras oder Smartphone speichern die Metadaten zur Bildorientierung nicht oder falsch ab. In solchen Fällen erscheint ein Bild auf einer Webseite falsch herum gedreht; ein Portrait liegt auf der Seite usw. Fotomat versucht diesen Fehler zu beheben, was jedoch nicht immer gelingt. Hier kann man immer mit 'ja' antworten, weil bei dieser Korrektur nichts verschlechtert wird.

 

Möchtest du alle Bilder publizieren (j/n)? n
Dann lösche alle Bilder aus dem Verzeichnis, die nicht publiziert werden sollen.
Drücke eine Taste wenn du damit fertig bist.

An dieser Stelle im Prozess erhält man die Gelegenheit einzelne Bilder vom Publizieren auszuschliessen. Hier kann man in den Dateimanager wechseln um bestimmte Bilder aus dem Verzeichnis zu entfernen.

 

Sollen die Bilder aufs Web publiziert werden (j/n)? j
Aus welchem Jahr sind die Bilder? (z.B. 2020): 2020
Wie heisst das Event? (z.B. 07_Wanderung): 01_Winter

Hier wird die Entscheidung getroffen, ob die Bilder auf einen Webserver hochgeladen werden sollen. Bei einem 'Nein' ist der Prozess hier zu Ende. Bei einem 'Ja' kann ein Jahresverzeichnis auf dem Webserver angegeben werden. Falls dieses noch nicht besteht, wird Fotomat es anlegen. Danach wird man nach dem Verzeichnis für das Ereignis gefragt. Vorgeschlagen wird das Format 'Monat_Ereignisname'.

 

Kopiere 3 Bilder auf den Web-Server. Bitte warten...
1 2 3 
Der Ordner mit diesen Bildern kann jetzt gelöscht werden.
Gehe jetzt zu Joomla und mache folgendes:
Im Artikeltext den Bilderpfad so referenzieren: {galery}fotos/2020/01_Winter{/galery}

Nun werden die Bilder via FTP auf den Web-Server kopiert und man erhält ein paar Tipps, was als nächstes zu tun ist. Diese Tipps orientieren sich sehr an der jeweiligen Web-Umgebung und sollten auf die eigenen Umstände angepasst werden. Im Beispiel wird der Code gezeigt, mit dem die Bilder auf einer Webseite mit dem Joomla-Plugin Responsive Simple Image Gallery eingebunden werden.

Damit endet der halbautomatische Prozess.

 

Anpassung - Teil 2

Das Python Skript 'Fotomat' ist dafür gedacht, es an die persönlichen Anforderung anzupassen. Dazu öffnet ihr die Datei 'fotomat.py' in einem beliebigen Texteditor oder einer IDE wie z.B. Geany und verschafft sich einen groben Überblick über die Programmstruktur. Ganz unten im Skript findet man die Main-Function, in der die einzelnen Funktionen des Prozesses angesteuert werden. Die Funktionsnamen sind selbst sprechend und gut dokumentiert. Falls ihr Hilfe benötigt oder Verbesserungsvorschläge habt, könnt ihr euch gerne an mich wenden.