Kategorien
Design Development Mac & iOS

Viele Bilder in unterschiedliche Größen exportieren zB. mit Lightroom

Die Problemstellung ist vielen (vor allem Webentwicklern) vertraut: Man hat eine Reihe Dateien und benötigt diese in verschiedenen Größen, zB. für eine Webgalerie. Oft übernehmen diese Aufgabe zum Glück scripte, aber ab und zu muss man doch selber ran. Hierbei handelt es sich dann häufig nur um ein-zwei Größen, in meinem Fall benötigte ich allerdings sieben verschiedene Größen.

Gesucht wurde also eine Lösung um eine große Anzahl Bilder (>40 Stk) in viele verschiedene Größen (> 5 Varianten) zu exportieren.

Mein schlussendlicher Lösungsansatz basiert primär auf Lightroom, lässt sich aber auch ohne Lightroom anweden, dazu später mehr.

Inhalt:

[sh_highlight ]Achtung! Dieser Beitrag ist eventuell etwas unübersichtlich! Daher hier die Struktur:[/sh_highlight]

  1. Vorstellen einer Lösungsvariante von Photowalkthrough
  2. Erklären des AppleScripts
  3. Präsentation von drei Script-Varianten
  4. Anwenungsbeispiele des Apple-Scripts mit Lightroom, Finder & Co

 


 

Lösungsvariante von Photowalkthrough

Über Google bin ich auf den Artikel: „Exporting multiple different sizes from Lightroom“ (Englisch) von  gestoßen. Er beschreibt hierbei ein Setup für einen Lightroom-Export, der anschließend von einem AppleScript abgearbeitet wird. Das folgende Video erklärt den Ablauf (in Englisch) und ist die Grundlage für mein etwas erweitertes Script.

Die hier vorgestellte Methode funktioniert wie folgt:

  1. Lightroom (oder eine andere Anwendung, s.u.) exportiert die größte Auflösung in einen Ordner
  2. Ein AppleScript (s. nächster Absatz) wird aufgerufen und legt für jede Größe eine Datei an

[sh_highlight ]Als Erstes möchte ich nun auf verschiedene Scriptvarianten eingehen, und danach die möglichen Anwendungen zeigen.[/sh_highlight]

 

Das AppleScript

Das Herzstück dieser Methode ist ohne Frage das AppleScript. Es erzeugt ein „Programm,“ das dann zB. über Lightroom aufgerufen werden kann. Um das AppleScript zu erstellen öffnet man den AppleScript Editor (zu finden in Programme/Dienstprogramme/AppleScript-Editor.app ) und kopiert einfach den Code (s. nächste 2 Absätze) in das Fenster. Nun speichert man das AppleScript als Programm ab.

PhotoResizer AppleScript erstellen

 

Ich habe hier nun drei Varianten des AppleScripts für verschiedene Anwendungen:

  • Photoresizer 1.0 – Originalscript. Ersetzt _fullsize  im Dateinamen durch die Pixelgröße, zB. _500 .
  • Photoresizer 1.1 – Ersetzt _fullsize  im Dateinamen durch die einen vorgegebenen Suffix, zB. _medium .
  • Photoresizer 2.0 – Fügt dem Dateinamen einen vorgegebenen Suffix an, ohne dass  _fullsize im Dateinamen vorhanden sein muss.

 

PhotoResizer 1.0 – Das Originalscript

Dieses tolle Script von John Day (@johneday) erweitert den Dateinamen jeweils um die Pixelgröße. Dabei ist es wichtig die Dateien mit dem Suffix _fullsize  zu exportieren (das macht er über Lightroom), da das Script diesen Suffix nun durch die Pixelgröße ersetzt, zB. wird dann aus „IMG3212_fullsize.jpg “ die neue 500px breite Datei „IMG3212_500.jpg “

on open of myFiles
	set newSizes to {1000, 2000}
	
	repeat with aFile in myFiles
		set filePath to aFile's POSIX path
		set bPath to (do shell script "dirname " & quoted form of filePath)
		tell application "System Events" to set fileName to aFile's name
		repeat with newSize in newSizes
			do shell script "sips " & quoted form of aFile's POSIX path & " -Z " & newSize & " --out " & quoted form of (bPath & "/" & rename(fileName, newSize) as text)
		end repeat
	end repeat
end open

on rename(fName, fSize)
	do shell script "sed 's/fullsize/" & fSize & "/' <<< " & quoted form of fName
end rename

In Zeile 2 können wir in der Liste newSizes  die gewünschten Pixelgrößen angeben.

 

PhotoResizer 1.1 – Erweiterte Variante mit Dateibenennung

Basierend auf dem Script von John Day (@johneday) habe ich eine kleine Erweiterung aufgebaut. Hierbei ersetze ich das  _fullsize  mit einer Liste an Suffixen. Somit wird zB. aus „IMG3212_fullsize.jpg “ nun die neue 500px breite Datei „IMG3212_medium.jpg “

Für meinen Verwendungszweck brauchte ich Dateinamen die einigen Varianten der Flickr-Namensgebung entsprachen, also:

  • „_t“ : thumbnail, 100px an der längsten Seite
  • „_m“ : small, 240px an der längsten Seite
  • „_n“ : small, 320px an der längsten Seite
  • „“ :  medium, 500px an der längsten Seite
  • „_z“:  medium 640, 640px an der längsten Seite
  • „_c“:  medium 800, 800px an der längsten Seite
  • „_b“:  large, 1024px an der längsten Seite

Das Script sieht nun folgendermaßen aus:

on open of myFiles
	set newSizes to {100, 240, 320, 500, 640, 800, 1024}
	
	repeat with aFile in myFiles
		set filePath to aFile's POSIX path
		set bPath to (do shell script "dirname " & quoted form of filePath)
		tell application "System Events" to set fileName to aFile's name
		
		repeat with counter from 1 to count of newSizes
			set newSize to item counter of newSizes
			do shell script "sips " & quoted form of aFile's POSIX path & " -Z " & newSize & " --out " & quoted form of (bPath & "/" & rename(fileName, newSize, counter) as text)
		end repeat
	end repeat
end open

on rename(fName, fSize, fCounter)
	set newSuffixes to {"_t", "_m", "_n", "", "_z", "_c", "_b"}
	set newSuffix to item fCounter of newSuffixes
	do shell script "sed 's/_fullsize/" & newSuffix & "/' <<< " & quoted form of fName
end rename

In Zeile 3 werden als „newSizes “ wie im Original die Größen angegeben, in Zeile 17 als „newSuffixes “ die dazugehörigen Dateinamen-Suffixe.

Aus „Image_fullsize.jpg “ wird also nun: „Image_t.jpg “ (100px), „Image_m.jpg “ (240px), „Image_n.jpg “ (320px), „Image.jpg “ (500px), „Image_z.jpg “ (640px), „Image_c.jpg “ (800px) und „Image_b.jpg “ (1024px).

[sh_highlight ]Damit dieser Code funktioniert muss der Dateiname der Datei _fullsize  enthalten.[/sh_highlight]

 

PhotoResizer 2.0 – Dynamische Dateiumbenennung

Mir persönlich war dieses Suchen und Ersetzen zu umständlich. Darum habe ich das Script so umgeschrieben, dass es nun an den existierenden Dateinamen eine Suffix anhängt ohne irgendetwas ersetzen zu müssen.  Somit wird nun aus „IMG3212.jpg “ nun die neue 500px breite Datei „IMG3212_medium.jpg “

Der neue Code sieht nun wie folgt aus:

on open of myFiles
	set newSizes to {100, 240, 320, 500, 640, 800, 1024}
	
	repeat with aFile in myFiles
		set filePath to aFile's POSIX path
		set bPath to (do shell script "dirname " & quoted form of filePath)
		tell application "System Events" to set fileName to aFile's name
		
		repeat with counter from 1 to count of newSizes
			set newSize to item counter of newSizes
			do shell script "sips " & quoted form of aFile's POSIX path & " -Z " & newSize & " --out " & quoted form of (bPath & "/" & rename(fileName, newSize, counter) as text)
		end repeat
	end repeat
end open

on rename(fName, fSize, fCounter)
	set newSuffixes to {"_t", "_m", "_n", "", "_z", "_c", "_b"}
	set newSuffix to item fCounter of newSuffixes
	
	set dotOffset to offset of "." in (reverse of characters in fName as text)
	set baseName to characters 1 thru -(dotOffset + 1) of fName as text
	set extension to characters -(dotOffset - 1) thru length of fName as text
	
	set newName to baseName & newSuffix & "." & extension
	
	return newName
end rename

Was macht dieses Script? Der Grundaufbau ist gleich: Jede Datei wird verarbeitet und für jede angegebene Größe in newSizes (Zeile 3) wird eine neue Datei mit dem entsprechend skaliertem Bild angelegt. Dazu bemächtigt sich das Script einem shell-Script sips  (Dokumentation). Um den Dateinamen zu bekommen ruft es nun die Funktion rename  auf.

Die Funktion rename erhält die Parameter fName  (Dateiname inkl. Endung), fSize  (Pixel-Größe) und fCounter  (Zähler-Variable der newSizes-Liste). Als erstes wird nun eine Reihe an Suffixen definiert. Hierbei ist wichtig, dass der erste Suffix zur ersten Größe in der newSizes -Liste (Zeile 3) passt usw. Als nächstes wird in newSuffix  mit Hilfe der counter-Variable die gewünschte Suffix gespeichert. Nun kommt die eigentliche Logik: in dotOffset  wird die Position des letzten Punktes gespeichert (deshalb das reverse). In baseName  der Dateiname ohne die Dateiendung (hierzu benötigen wir die gerade herausgefundene Position des Punktes). Nun wird zuletzt noch in extension  die Dateiendung gespeichert. Schlussendlich bauen wir in newName  einen neuen Dateinamen, der sich aus baseName + newSuffix + .Dateiendung  zusammensetzt. Hier könnte man nun zB. auch noch die Pixelgröße oder so mit angeben. Diese Variable geben wir dann zurück.

Download

Die Scripte befinden sich auf GitHub und können hier auch direkt gedownloaded werden:

 


 

Anwendungsbeispiele

Lightroom Export

Als erstes erstellen wir hierfür einen „Export-Dialog.“ Das geht am einfachsten indem man einige Bilder auswählt und dann auf „Exportieren“ oder ⇧⌘E  klickt. Im folgenden Dialog stellen wir zuerst als Ziel (Exportieren auf) die Festplatte ein, da wir die Dateien auf der Festplatte ablegen wollen. Als Speicherort (Exportieren in) legen wir fest, dass wir diesen Ordner später wählen sollen, Lightroom uns also beim Export danach fragen soll. Die Bildgröße stellt die größte Auflösungsvariante dar, die wir nachher haben werden. Entweder ihr exportiert das Original, oder wählt eine Maximalauflösung von zB. 1900px.

Zu guter letzt geben wir unter Nachbearbeitung unter „Nach Export“ an, dass Lightroom eine andere Anwendung öffnen soll. Hier geben wir unser Resizer-Programm an, das wir im im vorherigen Abschnitt erstellt haben.

Lightroom Export mit PhotoResizer

 

[sh_light_text ]Der hier gezeigte Arbeitsablauf bezieht sich auf Lightroom 5.5 als Teil der Creative Cloud. Für ältere (oder neuere) Versionen von Lightroom kann der Dialog abweichen.[/sh_light_text]

Was macht nun Lightroom also? Im Grund exportiert es ganz normal die Dateien in einen Ordner, skaliert dabei auf Wunsch noch die Dateien. Nach dem Export öffnet es alle Dateien in unserem Resizer-Programm was dazu führt, dass unser AppleScript die Bilder in entsprechende Größen skaliert.

„Öffnen Mit“ Dialog

Man kann eine beliebige Anzahl Bilder markieren, per Rechtsklick auf „Öffnen mit“ gehen und nun „Anderem Programm“ anwählen und das erstellte PhotoResizer-Programm wählen. Alle markierten Bilder werden nun durch das Programm skaliert.

Weitere Möglichkeiten

Die Einsatzmöglichkeiten sind vielschichtig. Möglich wäre zB noch das Einrichten eines Kontext-Menüs oder das automatische konvertieren über eine Ordneraktion usw. Für weitere Ideen ist in den Kommentaren sicher Platz.

Dank

Es sei nochmals erwähnt, dass diese Idee keineswegs von mir stammt sondern von . Ich habe ihm sowohl auf Goole+ als auch auf Facebook kontaktiert doch leider keine Antwort bekommen. Daher hoffe ich sehr ihm hier keinen Ruhm zu stehlen.

Dear John! I tried to contact you on Goole+ and Facebook a month ago but did never receive an answer. However, I did my best to credit your work properly and I hope I have not violated your copyright or „stolen“ your work. In case you’re reading this and you don’t want this version of your script to be online, please contact me.

Von Luke

Blogautor, Webdesigner, Programmierer, Tontechniker, Kameramann, Musiker, Christ, und vieles mehr

4 Antworten auf „Viele Bilder in unterschiedliche Größen exportieren zB. mit Lightroom“

hallo,
feine sache, ich habe das orginal script erstmal genommen, deine erweiterungen probiere ich gerne auch noch. Der datei name ist mir aber garnicht so wichtig. Was mich stoert ist das ein bild aus LR exportiert mit lange kannte 1024 ueber 400KB gross ist (in meinem beispiel). Wenn das script das gleiche bild auf gleiche groesse schrumpft weniger als 200KB.

Hallo,
ich verwende für den Export meiner Bilder drei verschiedene Presets. Die Bilder speichere ich dann in folgender Ordnerstruktur:
-Name Shooting
–Name Preset 1
–Name Preset 2
–Name Preset 3
Der Name der einzelnen Bilder bleibt dabei immer der gleiche.
Ist es möglich mit einem Script genau das zu bewerkstelligen? Dass ich nur einmal exportieren muss, die Ordner und Bilder dann automatisch erstellt werden?
Danke für deine Hilfe.

Beste Grüße

Schreibe einen Kommentar zu wilhelm schaefer Antworten abbrechen

Deine E-Mail-Adresse wird nicht veröffentlicht.