14 Jan 2019

Bilder-to-go – Meine Fotoarchiv und ich!

Auf dem Surface Community Meeting 2019 hatte ich einen Beitrag darüber, wie ihr eure Fotosammlung gut verwalten könnt und gleichzeitig auch automatisiert eine Kopie via OneDrive als mobilen Datenbestand bereitstellen könnt.
Hier die ausführliche Beschreibung dazu…

Vor nunmehr 17 Jahren habe ich die digitale Fotografie für mich entdeckt und praktiziere diese als Hobby. Ihr könnt euch sicherlich vorstellen, wie viele Bilder da so im Lauf der Jahre zusammengekommen sind (bei mir sind es gut 60.000).

Und da stellen sich einem Hobbyfotograden automatisch zwei Fragen:

  1. Wie sorge ich bei so vielen Bildern für ein Backup?
  2. Wie kann ich einfach, kostengünstig und überall auf meine Fotosammlung zugreifen?

Die Antwort auf diese Fragen lautet:

Dies hat mehrere Gründe:

  • OneDrive ist bereits in Windows integriert und synchronisiert Daten zwischen meinem Rechner und der Cloud
  • Bietet mir OneDrive damit die Möglichkeit eine Sicherung meiner Bilder zu bekommen
  • Ist OneDrive bis zu einem Speichervolumen von 5 GB kostenlos, 50 GB kosten 2€/Monat, Office 365 Kunden bekommen 1 TB Speicherplatz auf OneDrive ohne Zusatzkosten (alle Preise: https://onedrive.live.com/about/de-De/plans/)

Natürlich kann auch jeder andere Clouddienst an Stelle von OneDrive verwendet werden oder aber auch ein lokales Verzeichnis auf einer externen Platte.

Was ich mich jedoch in diesem Zusammenhang gefragt habe:

  • Wie strukturiere ich meine Bildersammlung?
    Antwort: Hierarchisch nach Jahreszahlen und Themengebieten
  • Brauche ich wirklich ein 1:1 Abbild meiner Bildersammlung auf OneDrive?
    Antwort: Für mich heißt dabei die Antwort: „Nein“. Mir genügt nämlich eine verkleinerte Version der Bilder, welche mir dann einen schnellen, mobilen Zugriff gestattet.

Wichtig war mir eine gute Gliederung, damit ich meine Bilder auch schnell finden kann. Ich habe mich für eine Gliederung nach Jahreszahlen gefolgt von Hauptthemen und dann Unterthemen entschieden, das sieht dann z.B. so aus:

Von diesen Bilder liegt dann noch ein lokales Backup auf meinem Server, somit habe ich noch eine Kopie aller Originaldaten, die ich regelmäßig aktualisiere.

Zusätzlich habe ich dann meine Fotos mit IrfanView im Batch-Modus herunter skaliert und in meinem OneDrive-Ordner abgelegt.
Allerdings war mir der manuelle Abgleich mit IrfanView mit der Zeit zu aufwändig und auch nicht konstant genug. Denn wenn ich z.B. Bilder in der Quelle verschiebe, umbenenne oder gar lösche, dann muss das auch in der OneDrive-Struktur nachgezogen werden.

Und aus diesem Grund habe ich mich entschieden ein passendes PowerShell-Skript zu bauen, welches diese Aufgaben automatisch für mich erledigt. Und so präsentiere ich:

Sync-Pictures v2

Und was genau kann das Skript so alles? Da ist mit der Zeit viel zusammengekommen:

  • JPG-Files von einem Quellverzeichnis rekursiv einlesen, falls diese im Zielverzeichnis nicht vorhanden sind herunterrechnen und mit gleicher Ordnerstruktur ablegen.
  • Automatisch erkennen, wenn im Zielverzeichnis ein Bild vorhanden ist, welches in der Quelle fehlt, und dieses dann löschen.
  • Erkennen, wenn ein Bild in Quelle und Ziel vorhanden, aber in der Quelle neuer ist (z.B. nach einer Bearbeitung mit PhotoShop). Das Ziel wird dann aktualisiert.
  • Verzeichnisse auf Wunsch ignorieren (z.B. Verzeichnisse mit unerwünschten Bildern – diese heißen bei mir BACKUP).
  • Die Zielauflösung der Datei automatisch anhand der aktuellen Displayauflösung ermitteln (so habe ich immer die optimale Auflösung). Diese Werte kann man bei Bedarf aber auch manuell steuern.
  • Nur Hauptverzeichnisse synchronisieren, die mit einer Jahreszahl beginnen (Standard) oder aber auch alle.

Und was habt ihr davon?

Natürlich will ich euch von meiner Arbeit profitieren lassen und stelle euch das Skript zur Verfügung! Aber keine Angst, um es zu nutzen benötigt ihr keinerlei Programmierkenntnisse. Ihr bekommt alles geliefert, damit das Skript für euch möglichst einfach zu nutzen ist.

Installation

Voraussetzung:

  • Auf eurem System muss IrfanView in der 32bit Version installiert sein. Falls ihr das nicht habt könnt ihr es hier herunterladen: http://www.irfanview.net/
    Achtung: Nicht die Store-Version installieren, denn die lässt sich aus PowerShell nicht adressieren!
  • Auf eurem System muss die Ausführung von PowerShell-Scripts erlaubt sein, was standardmäßig nicht der Fall ist. Um die Ausführung zu erlauben müsst ihr eine PowerShell als Administrator ausführen (ruft Powershell.exe über das Windows Startmenü auf – rechtklick „Als Administrator ausführen“ nicht vergessen)  und folgenden Befehl eingeben:
    set-executionpolicy remotesigned -force

Die Installation ist denkbar einfach:

  • Ladet euch das ZIP-File SyncPicturesv2 herunter und entpackt es in ein beliebiges Verzeichnis
  • Öffnet den Explorer und geht in das Verzeichnis, in welches ihr das ZIP-File entpackt habt
  • Führt einen Rechtsklick auf die Datei install.ps1 aus und wählt im Menü Mit PowerShell ausführen
  • Es öffnet sich kurz ein PowerShell-Fenster und auf eurem Desktop erscheint ein Icon mit dem Namen Sync-OneDrive

Anpassung

Die Standardinstallation geht von folgenden Punkten aus:

  1. Das Quellverzeichnis ist das Bilderverzeichnis in eurem Profil (%userprofile%\pictures)
  2. Das Zielverzeichnis ist das Unterverzeichnis Bilder in eurem OneDrive-Ordner und dieser liegt in eurem Profil (%userprofile%)
  3. Die Bilder sind nach Jahreszahlen gegliedert (wie auf meinem Explorer-Screenshot)
  4. Nur Hauptordner mit Jahreszahlen sollen synchronisiert werden
  5. Ordnernamen, die den Begriff BACKUP, TRASH oder RAW enthalten oder genau so heißen werden ignoriert

Natürlich lässt sich das alles anpassen. Dazu müsst ihr nur die Datei syncpictures.ini aus dem Zielverzeichnis, in das ihr das ZIP-File entpackt habt in einen Editor laden. Das sieht dann so aus:

# Quellverzeichnis
$Source   = [environment]::getfolderpath(„mypictures“)
#Zielverzeichnis
$Target   = „$env:onedrive\Bilder“
# Zu filternde Dateien (Werte in doppelten Hochkommas, mit Komma getrennt)
$Filter   = „BACKUP,TRASH,RAW“
# horzizontale Auflösung in Pixeln
$xres     = (Get-WmiObject -Class Win32_videocontroller).currenthorizontalresolution
# vertikale Auflösung in Pixeln
$yres     = (Get-WmiObject -Class Win32_videocontroller).currentverticalresolution
# minimales Delta in Minuten, wenn ein Bild in der Quelle als aktualisiert betrachtet werden soll
$mindelta = 1
Anpassung:
  • Um Quell- bzw. Zielverzeichnis zu verändern müsst ihr lediglich die Variablen $Source bzw. $Target entsprechend anpassen. Diese werden als PowerShell-Befehle interpretiert, somit werden auch wie dargestellt Umgebungsvariablen verarbeitet. Wichtig ist, dass Pfade in doppelte Anführungszeichen gesetzt werden. Über $Target könnt ihr natürlich jedes x-beliebige Verzeichnis als Ziel angeben, das muss nicht unbedingt OneDrive sein!
  • Im Standard werden alle Dateien gefiltert, die in den Verzeichnissen BACKUP, TRASH und RAW liegen. Wollt ihr das ändern, so könnt ihr die Variable $Filter entsprechend anpassen, mehrere Einträge werden wie dargestellt mit Kommas getrennt.
  • Im Standard werden die Bilder auf die native Auflösung eures Systems heruntergerechnet, die enthaltenen WMI-Befehle lesen diese aus. Ihr könnt hier aber auch einfach absolute Zahlenwerte in die Variablen $xres bzw. $yres eintragen
  • Das Programm erkennt automatisch, ob sich ein Bild geändert hat. Hierfür werden die Dateizeiten in Quelle und Ziel verglichen. Weicht diese ab, weil das Bild z.B. in Photoshop bearbeitet wurde, so wird es im Ziel neu erzeugt. Die Variable $mindelta regelt dabei die minimale Abweichung in Minuten, ab der ein Bild neu erzeugt wird.

Nutzung

Die Nutzung ist sehr einfach. Zum Start müsst ihr nur das Icon Sync-OneDrive auf dem Desktop anklicken oder die Tastenkombination <Strg><Alt><S> (das kann in den Eigenschaften des Icons auf dem Desktop auch geändert werden) betätigen . Es öffnet sich ein Fenster, welches eine Jahreszahl abfrägt. Nun gebt ihr entweder die Jahreszahl ein, deren Bilder synchronisiert werden sollen (das wäre dann der Ordner mit der entsprechenden Jahreszahl) oder ihr gebt ab Stelle einer Jahreszahl einfach ALLE ein, dann werden alle Bilder synchronisiert.

Das war’s eigentlich schon, die Synchronisation der Ordner wird im Fenster angezeigt, noch nicht vorhandene Zielverzeichnisse werden automatisch angelegt. Je nach Umfang kann das natürlich recht lange dauern. Die Dauer hängt dabei von der Anzahl der Bilder, deren Auflösung und von der Systemleistung (CPU, Disks) sowie der verfügbaren Internetgeschwindigkeit für den Upload zu OneDrive ab.

Direkte Nutzung von Sync-Pictures

Natürlich kann das PowerShell-Skript auch direkt in einer PowerShell Commandline aufgerufen werden. Alternativ ändert ihr die Parameter in der Datei sync.cmd, mit der das Skript aufgerufen wird.

Das solltet ihr natürlich nur machen, wenn ihr mit der Nutzung von PowerShell-Skripten und Commandlets vertraut seit.

Folgender Befehl, ausgeführt im Verzeichnis, in dem das Skript liegt, zeigt euch eine ausführliche Hilfe an:

Get-help Sync-Pictures.ps1 -full

Wieder entfernen

Ihr habt das Tool getestet, habt aber keine weitere Verwendung dafür? Schade, aber natürlich kein Problem. Einfach das Icon auf dem Desktop löschen und den Ordner, in den ihr das ZIP-File entpackt hattet wieder löschen – fertig!

Und weiter?

Ich würde mich freuen, wenn ihr mir Feedback zu diesem kleinen Projekt geben würden. Auch sind Entwickler herzlich eingeladen das Skript weiter zu verbessern. Über eine Email mit euren Verbesserungen würde ich mich sehr freuen!

 

 

Über den Autor: Thomas Paatsch

Thomas Paatsch
Wie auch Ralf bin ich ein Fan der Surface Produktfamilie und bin neben ihm hier einer der Hauptverfasser von Artikeln zu diesem Themengebiet. Ich schaue aber auch gerne mal über den Rand und so ist aktuell mein Hauptgerät ein Toshiba Notebook. In meinem Haushalt gibt es aber auch ein Surface Laptop.