Kategorie Automator

Apple macOS: Mit dem Automator Bilder verkleinern

Mit dem Automator Bilder verkleinern

Die Herausforderung, wie man mehrere Bilder gleichzeitig drastisch verkleinert kennt mindestens jeder, der eine Online-Präsenz betreibt, aber auch viele, die einfach nur mal erlebte Momente oder eine wichtige Info per Mail o.Ä. verschicken wollen. Es gibt da natürlich etliche Möglichkeiten, die sich vom manuellen Verkleinern, also dem Öffnen jeder Datei, dem Verkleinern dieser über mehrere Menüschritte und dem schließlichen Abspeichern der Datei bis hin zu vollautomatisierten eigenen oder von anderen (Firmen) entwickelten Skripten erstrecken. Nun hat nicht jeder, der ein paar Fotos mit anderen zu teilen hat, die Expertise, sich Skripte selbst zu schreiben und nicht jeder die Zeit das zu tun. Allerdings ist es auch unglaublich unproduktiv, jedes Bild einzeln anzufassen.

Der in OS X bzw. macOS integrierte Automator ist für solche Aufgaben prädestiniert. Mit ihm lassen sich Arbeitsabläufe einfach automatisieren, ohne, dass man eine einzige Code-Zeile tippen muss. Er setzt logisches Denken voraus, weist aber auch oft auf fehlende Zusammenhänge hin.

Voraussetzungen

Für das Verwenden des Automators ist nur der Besitz eines Macs oder MacBooks mit OS X bzw. macOS und ein geringer Zeitaufwand notwendig. Der Automator wird bereits im Betriebssystem integriert ausgeliefert und braucht nur gestartet zu werden. Als Speicherort für die Automator-Projekte sollte je nach Präferenz ein eigener Projektordner erstellt werden oder die Dateien z.B. in der iCloud gespeichert werden. Wem die Workflows zuviele persönliche Informationen enthalten, der sollte möglichst lokal Workflows abspeichern.

Wie erstelle ich den Workflow?

Erst einmal muss ein neues Projekt erstellt werden. In diesem Projekt hat man nun links eine Auswahlleiste und rechts den Arbeitsbereich mit entsprechender Ausgabe darunter. Der Automator unterstützt Drag&Drop, wodurch sich schon die ersten Elemente in den Arbeitsbereich ziehen lassen. Zuerst müssen wir den Mac die Finder-Objekte, also Dateien und Ordner, einlesen lassen. Für die Bilder, die ich verkleinert haben will, habe ich mir nur dafür einen entsprechenden Ordner erstellt, damit ich nur die Dateien verkleinere, die ich kleiner haben möchte.

Nun fehlt noch die Aufgabe an sich: Das Verkleinern. Diese Aufgabe können wir über die Funktion in “Fotos” mit Namen “Bilder skalieren” realisieren. Damit der Automator einen Input zur Verarbeitung bekommt, müssen nun in der Funktion “angegebene Finder-Objekte abfragen” die Dateien auswählen, die wir verkleinert haben möchten. Das Skalieren der Bilder geht entweder mit einem fixen Größenwert oder über eine prozentuale Anpassung. Im Beispiel habe ich die Bilder auf 40% der eigentlichen Größe skaliert, damit ich sie per Mail versenden konnte.

Fertig ist unser Workflow! Über den Play-Button rechts oben kann der Workflow einmalig durchgeführt werden. Soll diese Aufgabe öfter ausgeführt werden, sollte der Workflow als Datei abgespeichert werden, damit man diesen nicht immer wieder neu erstellen muss – auch wenn er so einfach aufgebaut ist. Ich werde Bilder nun voraussichtlich gar nicht mehr händisch die Größe von Bildern anpassen, sondern den Automator arbeiten lassen. Und ihr?

Apple OS X: Scripten mit AppleScript

Hi@all! Der Automator unter Mac OS X ist eine schöne Sache – aber kommt auch an Grenzen. Das habe ich recht schnell feststellen müssen, als ich Laufzeitfehler und nervige Fehlermeldungen bezüglich nicht vorhandener Netzlaufwerke erhalten habe. Die Laufwerke waren tatsächlich nicht erreichbar, da das NAS aus war, allerdings ist es mir nicht gelungen, einen Timeout zu setzen, der die Zeit bis zur Fehlermeldung nach Nichterreichen einer Netzwerkressource unter Mac OS X kürzt.

Also habe ich mich etwas mit AppleScript auseinandergesetzt und siehe da: Es funktioniert sogar. Zumindest in einem kleinen, selbst geschriebenen Dienst, der die Konnektivität zum Internet prüft und im Falle eines Ausfalls Alarm schlägt.

Hier mein erstes, kleines Script zum Prüfen, ob die Internetverbindung noch aktiv ist:
on run {input, parameters}
set internetconnect to 1
repeat while internetconnect is 1
try
do shell script “ping -c 4 8.8.8.8”
delay (3)
set internetconnect to 1
on errorset internetconnect to 0
say “You have been disconnected”
delay (10)
set internetconnect to 1
end try
end repeat
return input
end run

Workflow im Automator
In diesem Script werden ICMP-Pakete an Google (IP 8.8.8.8) gesendet, um die Verfügbarkeit zu gewährleisten. Treten dabei Fehler auf, wird die Variable internetconnect dem Wert 0 zugeordnet, was die While-Schleife unterbricht. Aus diesem Grund wird hier eine Audioausgabe mit dem Befehl “say” aufgerufen, um den Nutzer zu informieren, dass die Verbindung nicht mehr aktiv ist. Danach wird der Variable wieder der Wert 1 zugeordnet, damit die Bedingung der While-Schleife erfüllt ist und weitere Pings gen Google abgesetzt werden. Um mein eigentliches, ursprüngliches Problem zu lösen, brauchte ich etwas mehr Zeilen, bin aber dennoch mit dem Ergebnis ganz gut zufrieden. Nun werde ich über eine kurze Benachrichtigung in der Mitteilungszentrale über den Verbindungsstatus informiert – je nach Erfolg des Mountens. Wenn ein Verbindungsaufbau nicht zustande kommt, muss nun nicht mehr ein Timeout per default abgewartet werden – zumindest nicht für jedes Share, sondern nur insgesamt, da im Finder-Aufruf jedes Share einzeln in einer If-Schleife verkettet ist, die nur den Aufruf beinhaltet und nicht die Serverabfrage, die in OS X in dem Mountprozess integriert ist. Das verkürzt die Wartezeit erheblich.

Hier der Quelltext (IP-Adressen und Anmeldeinformationen geändert):

on run {input, parameters}
## Verzögerung von 5 Sekunden nach Start 
## (Entlastung der Startprozesse beim Systemstart)
delay 5
try
## ping Richtung NAS 
set thePing to do shell script “/sbin/ping -o -c 5 192.168.66.6”
## Aufruf der Anwendung Finder
tell application “Finder”
## gemountete Laufwerke werden in mounted_Disks als String aufgeführt
set mounted_Disks to list disks
–display dialog result as string
–set to every disk whose (ejectable is true)
## Der String mounted_Disks wird auf Übereinstimmung mit Shares geprüft
if mounted_Disks does not contain “media” then
mount volume “smb://AnnaNAS/media” as user name “User” with password “usrkey”
end if
if mounted_Disks does not contain “bilder” then
mount volume “smb://AnnaNAS/bilder” as user name “User” with password “usrkey”
end if
if mounted_Disks does not contain “share” then
mount volume “smb://AnnaNAS/share” as user name “User” with password “usrkey”
end if
if mounted_Disks does not contain “daten” then
mount volume “smb://AnnaNAS/daten” as user name “User” with password “usrkey”
end if
if mounted_Disks does not contain “bilder” then
mount volume “smb://AnnaNAS/bilder” as user name “User” with password “usrkey”
end if
if mounted_Disks does not contain “backup” then
mount volume “smb://AnnaNAS/backup” as user name “User” with password “usrkey”
end if
## Benachrichtigung in Mitteilungszentrale mit Text, Titel und Untertitel,
## Verbindung erfolgreich
display notification “Alle eigenen Shares sind jetzt verfügbar.” with title “AnnaNAS verbunden” subtitle “Protokoll: smb User: $user”
end tell
on error
## Benachrichtigung in Mitteilungszentrale mit Text, Titel und Untertitel,
## Verbindung nicht erfolgreich
display notification “AnnaNAS kann nicht verbunden werden.” with title “AnnaNAS verloren” subtitle “Protokoll: ICMP”
end try
return input

end run

Und so sah das Endergebnis aus: Entweder verbunden und eine positive Meldung oder nicht verbunden und eine Info, dass keine Verbindung zum NAS möglich war. Hier seht ihr die positive Benachrichtigung und die eingebundenen Shares.

Erfolgreicher Verbindungsaufbau: Laufwerke gemountet und Benachrichtung in Mitteilungszentrale über den Erfolg. So wünscht man sich das! ©2014 by nugaxstruxi
Andere Lösungsansätze? Schreibt´s in die Kommentare! In der Programmierung gibt es keinen falschen Code, solange er funktioniert. Unterschiede ergeben sich nur in Design, Umfang und  den teils sehr unterschiedlichen Ressourcenanforderungen an die Hardware.

Euer

nugaxstruxi
Eingefügte Screenshots sind vom Autor erstellt und unterliegen dem Copyright. 
© by nugaxstruxi


Apple OS X: Workflows und Apps mit dem Automator erstellen

Hallo und ein frohes Neues an alle Leser! Heute habe ich mich notgedrungen mit der Automator-App in Apples OS X befasst. Diese Anwendung dient dazu, Workflows, also Arbeitsabläufe zu vereinfachen. Es bietet auch Anwendern, die wenig bis keine Kenntnisse im Bereich Applescript vorweisen können, grafisch aufbereitet eine Möglichkeit, eigene, personalisierte Anwendungen zu entwickeln, die auf Standardprozessen des Mac OS basieren.
Automator darf den Mac steuern
Bevor man mit dem Automator den ersten Testlauf starten kann, muss man nach Freigabe der Systemeinstellungen durch Passworteingabe die Checkbox des Automators unter Systemeinstellungen – Sicherheit – Privatsphäre – Bedienungshilfen aktivieren, damit der Zugriff vom Automator auf den Mac erlaubt wird. Dies ist standardmäßig aus Sicherheitsgründen deaktiviert. Nutzt man den Automator nicht mehr, sollte der Haken wieder entfernt werden, um einen unerwünschten Zugriff im Keim zu ersticken.
Ist der Zugriff einmal erlaubt, kann das Workflow-Erstellen beginnen. Meine Intention, die mich zum Automator gebracht hat, war einen automatisierten Ablauf zu erstellen, mit dem meine Freigaben (Shares) auf meinem NAS bei der Anmeldung am Mac gemountet werden, ohne dass ein Finder-Fenster pro Share aufgeht. Wenn man wie ich vorerst provisorisch die smb-Freigaben nur als Anmeldeobjekt einrichtet, passiert das nämlich leider. Man kann das zwar mit [Alt] + [Klick auf rotes X] (alle Finder-Fenster schließen) oder [cmd] + [W] (jedes Fenster einzeln schließen) bei jedem Systemstart wieder beenden, auf Dauer nervt das allerdings doch ziemlich. 

Mit dem Automator kommt eine recht üppige Bibliothek an Standardprozessen daher, die einem auch schnell weiterhelfen kann, wenn man weiß, was man sucht. In meinem Fall wollte ich im Workflow folgende Punkte haben:

1. Abfrage angegebener Server
Da das NAS zeitgesteuert hoch- und runterfährt, ist eine Abfrage sinnvoll, ob das Laufwerk überhaupt antwortet. Kommt eine Antwort, wird der zweite Step gestartet. Wenn das NAS nicht erreichbar ist, erscheint ein Fenster, was über eine fehlgeschlagene Automator-Anwendung informiert. Zudem gibt OS X aus, dass das Share nicht gefunden wurde.

2. Mit Servern verbinden
Nach erfolgreicher Abfrage werden nun die abgefragten Server mit dem Mac verbunden (Mounten der Laufwerke).

3. Mitteilung anzeigen
Bei erfolgreichem Mounten möchte ich eine kurze Information bekommen, die mir das Gefühl gibt, dass alles Okay ist und ich beruhigt arbeiten kann.

Per Drag & Drop kann man die einzelnen Prozesse in das rechte Feld des Automators ziehen, ein paar Einstellungen zur Personalisierung vornehmen und die Datei nach erfolgreichem Test speichern. 

Achtung! 
Alle verwendeten Netzlaufwerke dürfen zum Testen nicht gemountet sein. Vorher über einen Rechtsklick auf die Laufwerke “”[Netzlaufwerkname]” auswerfen” die Laufwerke unmounten, denn was schon verbunden ist, kann ja nicht nochmals genauso verbunden werden.

Mein erster Workflow mit dem Automator: Automatisiertes Checken der Netzlaufwerke, Verbinden der Shares mit anschließendem Dialogfeld. Informativ, tut was es soll und es öffnen sich nach dem Mounten keine Finder-Fenster der einzelnen Shares
Über “Ablage – Sichern” oder die Tastenkombination [cmd] + [S] gelangt man zum Speicherdialogfeld. Dieses bietet das Sichern in zwei unterschiedlichen Formaten: Als *.workflow-Datei (Öffnen mit Automator) und als *.app-Datei, also eine ausführbare Anwendung. Die ausführbare Anwendung benötigt ihr, um sie im System (z.B. zum Systemstart) auszuführen, die Workflow-Datei, um diesen Workflow später zu bearbeiten. Ich habe mir beide Dateien gesichert und die App in den Ordner Programme kopiert. Danach habe ich sie als Anmeldeobjekt hinzugefügt und die alten smb-Anmeldeobjekte entfernt. Natürlich kann man mit dem Automator auch wesentlich komplexere Abläufe gestalten, aber für meinen Zweck reicht mir ein Ablauf in drei Schritten vollkommen aus. Auch andere Abläufe können im Automator realisiert werden. Wenn ich noch einmal einen solchen Ablauf benötige, stelle ich euch gerne den Weg vor, wie ich zum Ziel gekommen bin.

Ich hoffe, dass ich dem ein oder anderen weiterhelfen konnte. Wenn ihr ähnliche Abläufe umsetzen musstet, lasst es mich wissen. Vor allem interessiert mich eure finale Lösung.
Unter Windows lässt sich das automatische Mappen von Netzlaufwerken übrigens mit einem kurzen batch-Skript lösen. Die Dateiendung sollte *.bat oder *.cmd lauten. Der Dateiname selbst (alles vor .bat oder .cmd) ist für die Funktion irrelevant. Die Datei kann dann in den Autostart-Ordner kopiert und bei Bedarf um Parameter oder Befehlssätze erweitert werden.

Zum Verbinden von Netzlaufwerken unter Windows verwendet man folgende Skriptbestandteile:

net use Z: \TestserverShare

Zum Verbinden als User Peter an Domäne YZ verwendet man folgendes:

net use Z: \TestserverShare /user:YZPeter

Empfehlenswert ist eine vorherige Prüfung im Skript, ob das Laufwerk Z schon vorhanden ist. Das lässt sich wie folgt realisieren:

IF NOT EXIST Z:. net use Z: \TestserverShare /user:YZPeter

Über den Befehl

echo Laufwerk Z wurde erfolgreich verbunden.

wird eine Mitteilung im CMD-Fenster angezeigt, dass die Verbindung erfolgreich war. Nach echo kann ein beliebiger Text im ASCII-Format ohne Sonderzeichen eingefügt werden.  

Mit dem Befehl pause lassen sich Stopps einbauen, um z.B. eine solche Mitteilung anzuzeigen, bis der User sie mit Enter bestätigt. 

Am Ende des Skripts sollte ein

exit
als Ende der Operation angegeben werden.

Wer sich dafür interessiert, kann hier mehr zum Befehl net use lesen. Ansonsten mal Dr. Google fragen, der weiß meist Bescheid. Der Automator unter OS X macht das erheblich einfacher, wenn man weiß, was man erreichen möchte. Wer aber z.B. ein Start-Skript erstellen möchte, was komplexer ist, dem könnte der Automator zu wenig Funktionen bieten. In dem Fall hilft wohl nix – dann muss AppleScript gelernt werden, wenn man es in einer OS X Umgebung implementieren möchte.
Euer

nugaxstruxi

Eingefügte Screenshots sind vom Autor erstellt und unterliegen dem Copyright. 
© by nugaxstruxi
Skip to content