pre1

sips – Bildbearbeitung via Terminal

19. November 2007

Bildbearbeitung und Kommandozeile – auf den ersten Blick erscheint diese Kombination widersprüchlich. Auf den Zweiten kann jedoch fast jede Aktion, die es nicht erfordert, das Bild direkt zu sehen, über die Kommandozeile ausgeführt werden. Schnell, elegant und auf Wunsch automatisiert.
Ein relativ bekanntes Programm dafür ist ImageMagick, welches eine Fülle von Funktionen zum Bearbeiten und Erstellen von Bildern bietet. Weniger bekannt, aber dafür bereits im Installationsumfang von Mac OS X enthalten und um einiges schneller, ist sips (scriptable image processing system). man sips liefert eine umfangreiche, sips --help eine etwas kürzere Beschreibung der Möglichkeiten. Da das Lesen von man-Pages nicht unbedingt jedermanns Sache ist, will ich hier einige Funktionen zur Bildbearbeitung kurz vorstellen und erklären. (sips kann auch ColorSync ICC-Profile manipulieren – was ich aber einfach unterschlagen werde…)

Prolog

Alle folgenden sips-Aufrufe können für ein einzelnes (aImage.jpg) oder eine Reihe von Bildern (*.jpg) ausgeführt werden. Wenn kein Ausgabeverzeichnis (--out thumbs) oder -name (--out thumb.jpg) angegeben wird, überschreibt sips das aktuell bearbeitete Bild mit seiner neuen Version. Ein Ausgabeverzeichniss muss bereits existieren. Die allgemeine Syntax lautet

sips [image-modifications-functions] imagefile ... [--out result-file-or-dir]
Für fast jede Funktion gibt es sowohl einen kurzen als auch einen langen Parameter (Beispiel: -i oder --addIcon). Wo vorhanden verwende ich hier die Kurzform. Die man-Page liefert beide Versionen, wer lieber mehr tippen möchte dem steht es frei, die Langform einzugeben…

Größe ändern

Der Parameter -z ändert die Größe eines Bildes. Allerdings wird dabei evtl. das Seitenverhältnis verändert, so dass ein nicht passendes Bild gestreckt oder gestaucht wird. Um dies zu Verhindern kann -Z verwendet werden; weder Höhe noch Breite überschreiten damit die angegeben Größe. Als Nebeneffekt sind die Bilder dann aber ggf. nicht mehr quadratisch.

Bild zuschneiden

Um (in diesem Fall) wieder quadratische Vorschaubilder zu erhalten, kann das Bild entweder zugeschnitten (crop; -c) oder aufgefüllt (pad; -p) werden. Das Erstellen von 150*150 Pixel großen Thumbnails aus Bildern des aktuellen Ordners in den Unterordner thumbs funktioniert also folgendermaßen:

sips -Z 150 -p 150 150 *.jpg --out thumbs

Formate umwandeln

sips kann Bilder in anderen Formaten speichern. So ist es z.B. möglich, Screenshots im PDF-Format in beispielsweise ein JPG oder PNG umzuwandlen:

sips -s format jpg screenshot.pdf --out screenshot.jpg
Offiziell (d.h. laut man-Page) unterstützte Formate sind jpeg, tiff, png, gif, jp2, pict, bmp, qtif, psd, sgi und tga. Allerdings funktioniert es auch mit PDFs (siehe oben) und icns. Dies ist in sofern interessant, dass damit Programmicons als Bilddateien extrahiert werden können.

sips -s format png /Applications/TextMate.app/Contents/Resources/TextMate.icns --out ~/Desktop/TextMateIcon.png
speichert z.B. das TextMate-Icon als PNG auf dem Desktop.

Vorschau-Icons generieren

Eine ebenfalls sehr nützliche Funktion ist -i – sie erstellt eine Vorschau des Bildes als Icon. Um also allen Bildern aus dem aktuellen Ordner eine Vorschau als Bild-Icon hinzuzufügen reicht ein

sips -i *.jpg
Natürlich kann diese Funktion auch mit anderen kombiniert werden, z.B. bei der Umwandlung in ein anderes Format oder dem Zuschneiden von Thumbnails – einfach den Parameter -i hinzufügen…

Drehen und Spiegeln

Um ein Bild zu drehen, kann der Parameter -r verwendet werden.

sips -r 90 image.jpg
dreht das Bild um 90° im Uhrzeigersinn. -f horizontal dagegen spiegelt das Bild horizontal, -f vertical eben vertikal.

Weitere Eigenschaften

Die man-Page listet noch eine Reihe von weiteren Eigenschaften auf, welche mit -s gesetzt bzw. mit -g ausgelesen werden können. So setzt beispielsweise

sips -s model FooCam image.jpg
das verwendete Gerätemodell auf FooCam,

sips -s artist derJan image.jpg
den Fotografen auf derJan. Weitere Eigenschaften siehe Abschnitt Image property keys der man-Page sips(1).

sips automatisiert

sips besitzt ein AppleScript-Interface namens “Image Events”, welches aber nicht den vollen Funktionsumfang bietet. Folgendes Beispiel öffnet einen Dialog zum Auswählen eines Bildes, dreht es um 90° im Uhrzeigersinn und speichert es dann mit Vorschau-Icon wieder ab.

set anImage to choose file
try
tell application "Image Events"
-- Image Events starten
launch
-- Bild öffnen
set theImage to open anImage
-- Bild um 90° im Uhrzeigersinn drehen
rotate theImage to angle 90
-- Änderungen speichern
save theImage with icon
-- Bild wieder schließen
close theImage
end tell
on error error_message
display dialog error_message
end try

Desweiteren ist es natürlich möglich, sips aus anderen Skriptsprachen (Shell, Ruby etc.) heraus zu verwenden. Der Fantasie sind dort so gut wie keine Grenzen gesetzt.

Epilog

Ich hoffe, dieses doch etwas länger gewordene Tutorial (und gleichzeitig mein erster Beitrag hier auf apfelquak.de) hat seinen Sinn erfüllt, nämlich dem ein oder anderen ein nützliches, aber wenig bekanntes Tool näher gebracht, welches schon längere Zeit im Installationsumfang von Mac OS X enthalten ist. Anregungen und konstruktive Kritik bitte in die Kommentare.

{ 11 Kommentare… lese sie unten oder schreibe selbst einen }

Christoph November 19, 2007 um 19:54

Terminal sicher immer gut. Mehr davon….

Antworten

ad November 19, 2007 um 20:03

Klasse Beitrag. Mindestens 10 von 10 Punkte! :upten:

Antworten

niels November 19, 2007 um 22:15

wieder eine neue Perle entdeckt, klasse! :-)

Antworten

Rafael Bugajewski November 19, 2007 um 23:51

Mir hat der Beitrag auch sehr gefallen.

Antworten

wonko November 20, 2007 um 00:01

Super Artikel. Danke dafür, hatte bisher nicht die Musse mich in die Dokumentation der Befehle einzulesen, aber so ist es recht einfach nachzuvollziehen.

Es gibt übrigens noch eine Programm namens PhotoDrop, dass eine einfache GUI für SIPS bereitstellt. Zwar mit Weniger Manipulationsmöglichkeiten, aber dafür auch mal was für zwischendurch :-)

Antworten

dolce November 20, 2007 um 08:39

sehr gut – Es lebe die Shell ;-)

Antworten

Matt November 20, 2007 um 08:43

Sehr schönes Tutorial, sehr schönes Tool, leider nicht annähernd so mächtig wie ImageMagick und damit auch keine Lösung für mein Problem, aus eps-Daten mit Freisteller alphatransparente PNG-Dateien zu erzeugen…

Antworten

Stefan (der andere) November 20, 2007 um 09:51

Hmm… bei mir scheint die Manpage unvollständig zu sein:

” Image modification functions:

Special property keys:”

– da fehlt wohl was. Die Datei /usr/share/man/man1/sips.1 ist bei mir 3354 Bytes groß (OS 10.4.11, aktuell) — bei Euch auch??

Antworten

Matt November 20, 2007 um 09:57

Hier auch. Du kannst dir die Manpage aber auch direkt bei Apple anschauen:
http://developer.apple.com/documentation/Darwin/Reference/ManPages/man1/sips.1.html

Antworten

derJan November 20, 2007 um 10:01

Erstmal vielen Dank für die positiven Kommentare :)

@Stefan: /usr/share/man/man1/sips.1 ist bei mir (OS X 10.4.10) 4995 Byte groß. Ich hab dir die Datei unter http://derjan.devzero.de/public/sips.1.zip hochgeladen…

Antworten

Stefan (der andere) November 20, 2007 um 10:53

@Matt, derJan: Danke! :-)

Antworten

{ 2 Trackbacks }

Schreibe einen Kommentar

Smilies gefällig?

Previous post:

Next post: