Automator: Ist es möglich, ein Bild auf eine maximale Dateigröße zu skalieren?

Ich habe mich nach einer Automator-Methode umgesehen, bei der eine Bilddatei auf eine bestimmte Dateigröße (in Bytes) oder eine Nähe der unteren Grenze dieser Dateigröße in der Größe geändert (reduzierte Höhe und Breite) werden soll.

Es wäre eine großartige Verwendung für die Quick Actions von MacOS Mojave, da viele Website-Uploads beispielsweise keine iPhone-Bilder in voller Größe akzeptieren.

Meiner Intuition nach ist dies für Automator selbst mit Hilfe von Bash-Skripten usw. ein ziemlich schwieriges Problem. Normalerweise sind selbst Anwendungen wie Adobe Photoshop nicht gut darin, die endgültige Dateigröße vorherzusagen, nachdem eine Datei in JPG oder PNG komprimiert wurde. usw. Vielleicht könnte es die Bildabmessungen schrittweise verringern, bis es niedriger als die maximale Dateigröße ist. Am einfachsten wäre es, wenn es dafür ein skriptfähiges Dienstprogramm gäbe.

Ich dachte daher zu fragen, ob:

  • a) Ist dies machbar, und
  • b) Wie würde es gemacht werden?
Zur Verdeutlichung beziehen Sie sich auf die Komprimierung einer Datei, bevor sie sich auf das Bild auswirkt? Sie könnten ein Skript schreiben, um zu erkennen, ob das Bild im Hoch- oder Querformat ist, die Größe auf eine sichere Größe wie 800 Pixel ändern und dann komprimieren.
@ʀ2ᴅ2 Danke der Nachfrage. Das Ändern der Größe eines Bildes auf eine feste Größe über Automator wird in verschiedenen Tutorials im Internet behandelt und ist nicht schwierig. Ich dachte eher daran, dass die Größe variabel geändert werden kann, um sich einer bestimmten Dateigröße anzunähern (zB die Größe auf die gewünschte Dateigröße zu optimieren).

Antworten (2)

Ich bin ein wenig verwirrt über den Ansatz, wie Sie die Bilder, mit denen Sie arbeiten möchten, richtig komprimieren. Wie bereits erwähnt, gibt es sipsein funktionierendes Beispiel, das darauf basiert, ein Verzeichnis mit Bildern zu ziehen und mit einer Größenänderung durch die Liste zu gehen, wenn die Breite nicht 800 Pixel beträgt:

property theWidth : 800

tell application "Finder"
    try
        ## Choose directory
        set imageDir to choose folder with prompt "Please select directory."

        ## Get list of items in diretory
        set the imageList to list folder imageDir without invisibles

        ## Step through images
        repeat with theImage in imageList

            ## Turn path to posix path
            set imagePos to quoted form of POSIX path of ((imageDir as text) & contents of theImage)

            ## Get image width
            set imgWidth to (do shell script "sips -g pixelWidth " & " " & imagePos & " " & "| tail -n1 | cut -d' ' -f4") as integer

            ## if not equal to set variable width resize
            if imgWidth ≠ theWidth then do shell script "sips --resampleWidth " & theWidth & " " & imagePos

        end repeat
    on error error_message
        display dialog error_message
    end try

Das ist nur ein Beispiel dafür, was Sie mit der Breite machen können. Wie im Kommentar erwähnt, können Sie überprüfen, welche Breite oder Höhe länger ist, und von dort aus die Größe ändern. Wenn Sie dies man sipsim Terminal tun, können Sie alle Arten von Informationen abrufen. Der obige Code verwendet tail und cut, um die Rückgabe zu kürzen. Die Größenänderung erfolgt mit --resampleWidth. Sie können basierend auf der Höhe mit Resampling durchführen --resampleHeight.

In Bezug auf den Komprimierungsaspekt können Sie Optipng verwenden, wenn es sich um PNGs handelt . Wenn Sie etwas möchten, das Sie mit PNGs und JPGs ausführen können, können Sie Trimage verwenden . AppleScript/Automater könnte auch per Skript zur Verwendung eines Komprimierungsdienstprogramms verwendet werden. binSie müssten nur von einer Überprüfung aus anrufen, ob eine Komprimierung vorhanden ist:

try
    set checkBin to "(ls usr/local/bin/optipng >> /dev/null 2>&1 && echo yes) || echo no"
    return do shell script checkBin
on error error_message
    return error_message
end try

Oben wird nach OptiPNG gesucht. Wenn Sie überprüfen möchten, ob etwas mit HomeBrew installiert wurde, können Sie einen ähnlichen Befehl für verwenden /usr/local/Cellar.

Alle oben genannten können vollständig in einem Shell-Skript ausgeführt werden. Es hängt nur davon ab, was Sie wollen und wie Sie den Code ausführen möchten.

Erwägen Sie die Verwendung quoted form of, wenn Sie mit Dateipfaden arbeiten. Dadurch werden Probleme mit Leerzeichen, Dateinamen mit Anführungszeichen und Escape-Zeichen vermieden.

Ja, mit einem Shell-Skript

Sie könnten ein Shell-Skript schreiben, um das zu tun, was Sie wollen, und es in einen Automator-Workflow packen.

Nur in Automator ist dies nicht möglich. Automator fehlt die Verzweigungslogik, die erforderlich ist, um zu bestimmen, wann gestoppt werden soll.

Mir sind keine Abkürzungen bekannt, außer Bilder unterschiedlicher Größe zu skalieren und zu komprimieren, bis sie Ihr Ziel erreichen.

Dies kann mit integrierten Tools erfolgen, die in macOS enthalten sind, z. B. sipszum Ändern der Bildgröße und bashzum Skripten der Logik.

Eine eng verwandte Frage finden Sie unter Bilddateigröße auf bestimmte Größe reduzieren .