Bildoptimierung mit Automator & ImageOptim

MacOS sieht einfach aus, aber wenn man sich etwas damit beschäftigt, bemerkt man, dass ungeahnte Möglichkeiten unter der Oberfläche schlummern. Beispielsweise ist die Pdf-Verarbeitung direkt im System integriert. Die Vorschau kann dementsprechend auch viel mehr als nur etwas anzuzeigen. Aber heute schauen wir uns an, wie man mit MacOS mehrere Pdfs oder Bilder im Finder auswählen kann und per Touchbar, Tastenkombination oder Mausklick automatisch umwandeln und abspeichern kann.

Automator: Arbeitsablauf erstellen

Wir möchten PNG-Covers aus de jeweilig ersten Seite einer Pdf-Datei erstellen und sie unter gleichem Namen woanders abspeichern:

  • Automator öffnen (Cmd-Leertaste, App-Name)
  • Neu / Schnellaktion
    • Dateien und Ordner in Finder
    • Finder Objekt filtern: Art = Pdf
    • Shell-Skript ausführen (Python-Skript, das die erste Seite des Pdfs extrahiert, siehe unten)

Erste Seite des Pdfs extrahieren (hier kommt Quartz zum Einsatz, ein Teil von MacOS):

#! /usr/bin/python
#
import sys
import os
import tempfile
from Quartz.CoreGraphics import *
from os.path import splitext
from os.path import basename
from os.path import join


def createPDFDocumentWithPath(path):
    return CGPDFDocumentCreateWithURL(CFURLCreateFromFileSystemRepresentation(kCFAllocatorDefault, path, len(path), False))

def main(argv):

    for input_pdf_filename in argv:
        doc = createPDFDocumentWithPath(input_pdf_filename)
        page_one = CGPDFDocumentGetPage(doc, 1)
        mediaBox = CGPDFPageGetBoxRect(page_one, kCGPDFMediaBox)
        if CGRectIsEmpty(mediaBox):
            mediaBox = None

        file_name, extension = splitext(basename(input_pdf_filename))
        output_path = join(tempfile.gettempdir(), file_name + extension)
        writeContext = CGPDFContextCreateWithURL(CFURLCreateFromFileSystemRepresentation(kCFAllocatorDefault, output_path, len(output_path), False), None, None)
        CGContextBeginPage(writeContext, mediaBox)
        CGContextDrawPDFPage(writeContext, page_one)
        CGContextEndPage(writeContext)
        CGPDFContextClose(writeContext)
        del writeContext

        print output_path

if __name__ == "__main__":
    main(sys.argv[1:])
    • Der nächste Teil ist, Pdf-Seiten als Bilder zu rendern:
      (Farbmodell: RGB, PNG, 200 dpi, mittlere Komprimierung)

    • Abschließend wird das Bild z.B. auf 700 Pixel maximallänge skaliert
    • in einem beliebigen Ordner gespeichert
    • und (optional) mit dem für MacOS kostenlos erhältlichen ImageOptim geöffnet (die Optimierung erfolgt im Anschluss an das Speichern aller Bilder automatisch)
  • Abspeichern unter beliebigem Namen

Schnellaktion ausführen

Beliebige Pdfs im Finder markieren. Anschließend:

  • per Maus: Rechtsklick, Schnellaktion, die eben erstelle Schnellaktion auswählen
  • Touchpad konfigurieren:
    • Einstellungen, Erweiterungen, Touchbar
      • Schnellaktionen auswählen.
      • Control Strip anpassen klicken und “Schnellaktionen” auf ein nicht benötigtes Symbol der Touchbar ziehen.
  • per Tastenkombination:
    • Einstellungen, Tastatur, Kurzbefehle
      • Unter Dienste / Dateien und Ordner die entprechende Schnellaktion auswählen
      • Doppelklick rechts in die Zeile und Tastatkombination festlegen. z.B. control+option+command+Taste. Die drei Steuerunstasten sind leicht gedrückt und man verhindert Doppelbelegungen.

ImageOptim-Einstellungen

Dieser Schritt ist optional, aber wenn geringe Dateigröße wichtig ist, sollte man ein paar Einstellungen überprüfen:

PNGOUT, Zopfli und vor allem Guetzli sind sehr rechenintensive Optionen, die man eher abwählen sollte.

Will man eine möglichst kleine PNG-Datei, kann man die Qualität bis auf 40% reduzieren. Dadurch werden auch die PNG-Farben reduziert.