Automator: возможно ли изменить размер изображения до максимального размера файла?

2

Я искал метод Automator, в соответствии с которым размер файла изображения должен быть изменен (уменьшена высота и ширина) до определенного размера файла (в байтах) или близкой к нижней границе этого размера файла.

Это было бы очень полезно для быстрых действий MacOS Mojave, так как многие загрузки на сайт не принимают, например, полноразмерные изображения iPhone.

Моя интуиция заключается в том, что это довольно сложная проблема, которую Automator может решить даже с помощью сценариев bash и т. Д. Обычно даже такие приложения, как Adobe Photoshop, не способны предсказать окончательный размер файла после сжатия файла в JPG или PNG, и т. д. Возможно, он может постепенно уменьшать размеры изображения, пока не станет меньше максимального размера файла. Проще всего было бы, если бы для этого была полезная программа.

Поэтому я подумал спросить:

  • а) это выполнимо, и
  • б) Как это будет сделано?
Winterflags
источник
Чтобы уточнить, вы имеете в виду сжатие файла до того, как оно повлияет на изображение? Вы можете написать скрипт, чтобы определить, является ли изображение портретным или альбомным, изменить размер до безопасного размера, например 800px, а затем сжать.
ᴅ2ᴅ2
@ ʀ2ᴅ2 Спасибо, что спросил. Изменение размера изображения до фиксированного размера с помощью Automator рассматривается в различных руководствах в Интернете и не представляет трудностей. Я больше думал о том, чтобы изменить его размер, чтобы приблизиться к определенному размеру файла (например, оптимизировать размер до желаемого размера файла).
Winterflags

Ответы:

2

Меня немного смущает подход к правильному сжатию изображений, с которыми вы хотите работать. Как уже упоминалось, есть sipsрабочий пример, основанный на перетаскивании каталога изображений и пошаговом просмотре списка с изменением размера, если ширина не 800px:

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

Это всего лишь пример того, что вы можете сделать с шириной. Как упомянуто в комментарии, вы можете проверить, какая длина больше ширины или высоты и изменить размер оттуда. Если вы делаете man sipsв терминале, вы можете получить все виды информации. Приведенный выше код использует tail и cut для обрезки возврата. Изменение размера сделано с --resampleWidth. Вы можете пересчитать на основе высоты с --resampleHeight.

Что касается аспекта сжатия, если это PNG, вы можете использовать Optipng . Если вы хотите что-то, что вы можете запустить с PNG и JPG, вы можете использовать Trimage . AppleScript / Automater также может быть встроен в утилиту сжатия. Вам просто нужно позвонить из binпроверки, если сжатие существует:

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

Выше проверяется на OptiPNG. Если вы хотите проверить, установлено ли что-то с HomeBrew, вы можете использовать аналогичную команду /usr/local/Cellar.

Все вышеперечисленное может быть полностью сделано в скрипте оболочки. Это зависит только от того, что вы хотите и как вы хотите выполнить код.

ʀ2ᴅ2
источник
1
Рассмотрите возможность использования quoted form ofпри работе с путями к файлам. Это позволит избежать проблем с пробелами, именами файлов, содержащими кавычки, и escape-символами.
Грэм Милн
Первоначально он был там, но, похоже, я удалил его после взлома кода. будет редактировать.
ʀ2ᴅ2
1

Да, с помощью сценария оболочки

Вы можете написать сценарий оболочки, чтобы делать то, что вы хотите, и обернуть это в рабочий процесс Automator.

Только в Automator это невозможно. В Automator отсутствует логика ветвления, необходимая для определения момента остановки.

Я не знаю ни о каких ярлыках, кроме как изменять размеры и сжимать изображения разного размера, пока они не достигнут вашей цели.

Это можно сделать с помощью встроенных в MacOS инструментов, таких как sipsизменение размера изображения и bashлогика сценариев.

См. Уменьшение размера файла изображения до определенного размера для тесно связанного вопроса.

Грэм Милн
источник