Page tree

Wenn sie zu dieser Seite Bemerkungen haben klicken sie bitte hier: Kontaktformular

Skip to end of metadata
Go to start of metadata

Allgemeines

Bei der Bearbeitung größerer Mengen Fotos bietet es sich an Verfahren zu automatisieren.

Dies war in dem Programm iPhoto sehr viel einfacher, da der seit Generationen auf Mac-Systemen vorhandene "Automator" speziell für iPhoto leistungsstarke Funktionen hatte.

Leider wird iPhoto seit Jahren nicht mehr weiterentwickelt und spätestens seit der Einführung von OS Catalina ist iPhoto nicht mehr verfügbar, weil es als 32-bit Anwendung auf OS Catalina nicht mehr ausgeführt wird.

Für die "neue" Anwendung "Fotos.app" stehen im Automator weniger Funktionen bereit u.a. fehlt die sehr wichtige Funktion "selektierte Fotos" im Automator zu behandeln.

Daher besteht eine Lösung nur noch über die Einbindung von AppleScript Funktionen im Automator, da AppleScript die Funktion der selektierten (ausgewählten) Fotos ermöglicht.

Das hier dargestellt Beispiel demonstriert die grundsätzliche Funktionsweise.
Kenntnisse in AppleScript sind von Vorteil, können jedoch leicht über youtube-Tutorials erworben werden.

Automator Workflow anlegen

Starten sie die "Automator.app" und wählen im ersten Dialog "Schnellaktion" (Zahnradsymbol)

Vergeben sie den Namen "Fotos_get_info.workflow"

Wählen sie im linken Teil "Bibliothek", dann in der Liste der Funktionen "AppleScript ausführen" und ziehen diesen Eintrag in den rechten Teil des Arbeitsbereichs.

In den "Header"-Einstellungen des Workflows wählen sie

"Arbeitsablauf empfängt "Automatisch" in Fotos.app"
"Bild" ==> "Aktion", Farbe schwarz.

Die Einstellung "Arbeitsablauf empfängt" ist sehr bedeutend und bestimmt u.a. in welchen Anwendungen dieser Dienst verfügbar sein wird !!!

AppleScript Quellcode eingeben

In das AppleScript-Quellcode-Fenster fügen sie folgenden Code ein:


Hinweis: In der aktuellen Version von OS Catalina bestehen Probleme bei der Auswahl von Fotos in sogenannten "intelligenten Alben". Die auf dieser Seite dargestellten AppleScripts funktionieren nur fehlerfrei wenn sie aus einem "normalen" Album gestartet werden.


AppleScript Quellcode zum Workflow Fotos_get_info
on run {input, parameters}
	tell application "Photos"
		set allLocation to ""
		set currentSelection to the selection
		repeat with cc from 1 to count of currentSelection
			set output to "Eigenschaft des Bildes"
			set thisDescription to ""
			set allKeywords to ""
			set allLocation to ""
			set thisItem to item cc of currentSelection
			set thisFavorite to the favorite of thisItem
			set thisId to the id of thisItem
			set thisFilename to the filename of thisItem
			set thisWidth to the width of thisItem
			set thisHeight to the height of thisItem
			set thisSize to the size of thisItem
			set thisLocation to the location of thisItem
			repeat with q from 1 to the count of thisLocation
				set thisLOtmp to ""
				set thisLOtmp to item q of thisLocation
				set thisLOtext to ""
				set thisLOtext to do shell script "sed 's|,|.|g' <<< " & thisLOtmp
				set allLocation to allLocation & thisLOtext & ", " 
			end repeat
			
			
			set thisAltitude to the altitude of thisItem
			set thisKeyword to the keywords of thisItem
			repeat with q from 1 to the count of thisKeyword
				set thisKWtmp to item q of thisKeyword
				set allKeywords to allKeywords & thisKWtmp & ", " 
			end repeat
			set thisDate to the date of thisItem
			set thisDescription to the description of thisItem
			set thisName to the name of thisItem
			set output to output & "\nId: " & thisId & "\nFilename: " & thisFilename & "\nFavorite: " & thisFavorite & "\nWidth: " & thisWidth & "\nHeight: " & thisHeight & "\nSize: " & thisSize & "\nLocation: " & allLocation & "\nAltitude: " & thisAltitude & "\nKeywords: " & allKeywords & "\nDate: " & thisDate & "\nDescription: " & thisDescription & "\nName: " & thisName 
			display dialog output
		end repeat
	end tell
	return input
end run

Danach sollte das Fenster so aussehen:

Speichern sie den Workflow z.B. durch Tastenkombination <command> + s und schließen sie den Automator

Dienst konfigurieren

Öffnen sie die Fotos.app und wählen sie im Menü "Fotos", "Dienste", "Dienste-Einstellungen"

Weisen sie dem Workflow "Fotos_get_info" eine Tastenkombination zu, in diesem Beispiel <option> + <command> + t

Ergebnis der Workflow-Aktion

Öffnen sie den normalen Arbeitsbereich der Fotos.app und markieren sie ein oder mehrere Fotos.

Nach Betätigung der zuvor festgelegten Tastenkombination sehen sie für jede ausgewählte Bilddatei einen solchen Infodialog.

Die hier dargestellten Attribute einer Bilddatei stellen die grundsätzliche Möglichkeit einer Bildbearbeitung mit AppleScript dar und sind die Grundlage für unsere weitere Entwicklung.
Es handelt sich um die Eigenschaften des Datenobjekts "Media Item"

Weiteres Beispiel: "GPS-Koordinaten eingeben/ändern"

Im vorherigen Abschnitt haben wir die Eigenschaften des Datenobjekts "Media Item" kenn gelernt.
Diese lassen sich nicht nur auslesen, sondern auch verändern.

Als Beispiel soll hier die Eingabe neuer GPS-Koordinaten dienen.

Los geht´s: Wie weiter oben beschrieben legen sie im Automator eine neue Schnellaktion (Zahnradsymbol) an und konfigurieren sie die den Eingabebereich.

Wählen sie im linken Teil "Bibliothek", dann in der Liste der Funktionen "AppleScript ausführen" und ziehen diesen Eintrag in den rechten Teil des Arbeitsbereichs.

Als Quellcode fügen sie folgendes ein:


Hinweis: In der aktuellen Version von OS Catalina bestehen Probleme bei der Auswahl von Fotos in sogenannten "intelligenten Alben". Die auf dieser Seite dargestellten AppleScripts funktionieren nur fehlerfrei wenn sie aus einem "normalen" Album gestartet werden.


Quellcode zum Script set_GPS_to_image
property GPSString : "" -- his property will remember last entry

on run {input, parameters}

	tell application "Photos"
		set allGPS to {}
		set currentSelection to the selection
		set dialogMessage to "Bitte die neue GPS-Koordinate eingeben:"
		display dialog dialogMessage default answer GPSString with icon 1 buttons {"Cancel", "OK"} default button 2

		copy the result to {button returned:buttonPressed, text returned:GPSString}
		if buttonPressed is "OK" then
			set AppleScript's text item delimiters to ","
			set allGPS to every text item of GPSString

			repeat with cc from 1 to count of currentSelection
				set thisItem to item cc of currentSelection
				set thisId to the id of thisItem
				set location of thisItem to allGPS
				tell application "Terminal"
					do script "/Users/IHRNAME/sct/set_GPS_to_image_photos.sh \"" & thisId & "\" \""  & allGPS & "\" ; exit" in front window
				end tell
			end repeat
		end if
	end tell
	
	return input
end run

Shellscript zur Änderung der Originaldatei

Innerhalb des AppleScripts wird ein Shellscript ausgeführt.
Warum??

Sollten sie ihre Fotos.app so konfiguriert haben, dass neue Fotos beim Import in die Mediathek kopiert werden, bewirkt die Änderung der GPS-Koordinaten nicht die Änderung der Originaldatei.

Das ist aber sehr wünschenswert, z.B. wenn man zukunftskompatibel sein möchte und damit rechnet später mal einen anderen Foto-Organizer zu verwenden.

Hier gibts aber einige Probleme:

  • In der Mediathek wird der ursprüngliche Pfad zur Originaldatei nicht gespeichert.
  • Haben sie den Import von mobilen Medien (USB-Stick o.ä.) oder direkt aus dem Handy oder Kamera durchgeführt gibt es die Originaldatei u.U. gar nicht mehr.
  • Sie importieren aus ständig wechselnden Ordnerstrukturen?

Wie auch immer: Bei mir bleiben die Originaldateien immer auf der lokalen Festplatte und immer im gleichen Stammpfad.
Lediglich der Unterordner der praktisch für das Ereignis steht variiert.

So kann man aus dem Ordnerpfad den gesamten Pfad zur Originaldatei wiederherstellen (smile)

Bitte beachten sie dass die Tools exiftool und sqlite3 extern sind und separat installiert werden müssen.

Quellcode zum Shell-Script set_GPS_to_image_photos.sh
#!/bin/bash

ZUUID=`echo $1|cut -d'/' -f 1`
GPS=`echo $2 |sed -e "s/\n//g"`


#Der Pfad zur Mediathek muss ggf. angepasst werden
cd /Users/IHRNAME/Pictures/Fotos.photoslibrary/database/
#Ebenso der Name der Datenbank Photos.sqlite muss ggf. angepasst werden
ERGEBNIS=`sqlite3 Photos.sqlite "select ZAA.ZORIGINALFILENAME,ZAL.ZTITLE from ZADDITIONALASSETATTRIBUTES ZAA, ZGENERICASSET ZGA, ZGENERICALBUM ZAL, Z_26ASSETS Z26 where ZAA.ZASSET = ZGA.Z_PK and ZGA.ZUUID = '"$ZUUID"' and Z26.Z_34ASSETS = ZGA.Z_PK and ZAL.Z_PK = Z26.Z_26ALBUMS;"`

FILE=`echo $ERGEBNIS|cut -d'|' -f 1`
FOLDER=`echo $ERGEBNIS|cut -d'|' -f 2`

IMAGE=/Users/IHRNAME/Bilder-2/$FOLDER/$FILE
LATITUDE=`echo $GPS|sed -e 's/ //g'|cut -d',' -f1`
LONGITUDE=`echo $GPS|sed -e 's/ //g'|cut -d',' -f2`
LA=`echo $LATITUDE|cut -d'.' -f1`
LO=`echo $LONGITUDE|cut -d'.' -f1`
[ $LA -ge 0 ] && LATITUDEREF=N
if [ $LA -lt 0 ] || [ "$LA" = "-0" ]
then
        LATITUDEREF=S
fi
[ $LO -ge 0 ] && LONGITUDEREF=E
if [ $LO -lt 0 ] || [ "$LO" = "-0" ]
then
        LONGITUDEREF=W
fi

if [ -f "$IMAGE" ]
then
        exiftool -exif:gpslatitude=$LATITUDE -exif:gpslatituderef=$LATITUDEREF -exif:gpslongitude=$LONGITUDE -exif:gpslongituderef=$LONGITUDEREF "$IMAGE"
        RC=$?
        rm -f ${IMAGE}_original
else
        RC=1
fi

echo "$IMAGE | $GPS | $RC " >>/Users/IHRNAME/Documents/set_GPS_to_image.log
  • No labels