Inhalt

Bilder mit TinyPNG komprimieren, automatisiert mit MacOS Automator

Ich benutze im Alltag oft TinyPNG um Bilder zu komprimieren. Das geht auch über die Webseite, aber ich wollte das gerne automatisieren, da ich oft am MacBook sitze, für einen Artikel - meistens die Webseite meines Vereins - Bilder komprimieren muss und das sehr repetitiv ist.

MacOS bietet dafür den Automator an, eine einfache Anwendung zur Erstellung von Automatisierungen. Einfach ist es wirklich, aber die Optionen sind manchmal sehr tiefgehend; ich glaube es gibt kaum etwas, was dieses Programm nicht kann.

TinyPNG API Key

Zuerst wird ein API Key für TinyPNG benötigt. Dieser ist erstmal kostenlos, ist auf 500 Bilder pro Monat limitiert. Ich brauche die Automation recht oft, aber 500 Kompressionen erreiche ich dann doch nicht.

API Anmeldeformular
API Key beantragen – Name und E-Mail eingeben

Wie zu sehen, ist die Beantragung sehr einfach, nur Name und eine E-Mail Adresse wird benötigt.

Nach dem Bestätigen des Links in der E-Mail ist der API Key sofort verfügbar. Dort gibt es auch eine Übersicht über die Nutzung.

API Nutzungsstatistik
Nutzungsübersicht der API

Automator starten

Automator ist ein vorinstalliertes Programm, zu finden in den Dienstprogrammen. Dort erstmal einen neuen Workflow erstellen und in der Bibliothek nach Shell-Skript ausführen suchen.

Automator Workflow
Shell-Skript Eintrag im Automator

Shell-Skript einfügen

Jetzt kann im rechten Teil des Automators das Skript eingefügt werden, zunächst aber einige Grundeinstellungen. Hier wird eingestellt, dass dieses Skript nur Bilddateien aus dem Finder annimmt. Dann kann noch ein Icon und eine Farbe ausgewählt werden.

Automator Workflow Einstellungen
Grundeinstellungen für den Workflow

Bei dem Skript bitte die Shell auf /bin/zsh stellen und Eingabe auf als Argumente.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
set -e -o pipefail
export PATH="$PATH:/usr/local/bin"
APIKEY=XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
tinypng () {
	file_name="$1:t:r"
	file_ext="$1:t:e"
	file_dir="$1:h"
	compressed_url="$(curl -D - -o /dev/null --user api:$APIKEY --data-binary @"$1" https://api.tinify.com/shrink|grep location|cut -d ' ' -f 2|sed 's/\r//')"
	curl -o "${file_dir}/${file_name}_compressed.${file_ext}" "$compressed_url"
}

for f in "$@"
do
	if [ -f "$f" ]; then
		tinypng "$f"
	elif [ -d "$f" ]; then
		find "$f" -name "*.png" -o -name "*.jpeg" -o -name "*.jpg" | while read file_name; do
		tinypng "$file_name"; done
	fi
done

afplay /System/Library/Sounds/Submarine.aiff

Einfach den Code in den Automator kopieren, den API Key eintragen und das Skript speichern.

Erklärung des Skripts

Das Skript ist in Bash geschrieben und benutzt die TinyPNG API um Bilder zu komprimieren. Es wird zuerst eine Funktion tinypng definiert, die den Dateinamen, das Verzeichnis und die Dateiendung extrahiert und dann das Bild über die API komprimiert. Dann wird eine Schleife definiert, die alle Dateien im Finder ausliest und dann die Funktion tinypng aufruft. Am Ende wird noch ein Sound abgespielt, um zu signalisieren, dass der Vorgang abgeschlossen ist.

Mögliche Anpassungen wären z.B. das Ändern oder Entfernen des Sounds sowie das Anpassen des Zieldateinamens in Zeile 9. Bei mir wird der Name einfach mit dem Suffix _compressed versehen.

Automator Workflow testen

Jetzt kann der Workflow getestet werden, dazu einfach ein Bild auswählen, Rechtsklick und unter Schnellaktionen den Workflow auswählen.

Automator Workflow testen
Schnellaktionen im Finder