Вопрос по – Apple's Automator: настройки сжатия для jpg?

9

Когда я запускаю Apple Automator, чтобы просто вырезать кучу изображений в их размере, Automator также снизит качество файлов (jpg), и они получаются размытыми.

Как я могу предотвратить это? Есть ли настройки, которыми я могу управлять?

Edit:

Или есть другие инструменты, которые выполняют ту же работу, но не влияют на качество изображения?

Ваш Ответ

4   ответа
6

s & # x201C; Обрезать изображения & # x201D; и & # x201C; Масштабировать изображения & # x201D; у действий нет настроек качества & # x2013; как это часто бывает в Automator, простота превосходит конфигурируемость. Тем не менее, есть еще один способ доступаCoreImageСредства манипулирования изображениями, не прибегающие к программированию Какао:Scriptable Image Processing System, что делает функции обработки изображений доступными для

the shell via the sips utility. You can fiddle with the most minute settings using this, but as it is a bit arcane in handling, you might be better served with the second way,

AppleScript via Image Events, a scriptable faceless background application provided by OS X. There are crop and scale commands, and the option of specifying a compression level when saving as a JPEG with

save <image> as JPEG with compression level (low|medium|high)

Use a “Run AppleScript” action instead of your “Crop” / “Scale” one and wrap the Image Events commands in a tell application "Image Events" block, and you should be set. For instance, to scale the image to half its size and save as a JPEG in best quality, overwriting the original:

on run {input, parameters}
    set output to {}
    repeat with aPath in input
        tell application "Image Events"
            set aPicture to open aPath
            try
                scale aPicture by factor 0.5
                set end of output to save aPicture as JPEG with compression level low
            on error errorMessage
                log errorMessage
            end try
            close aPicture
        end tell
    end repeat
    return output -- next action processes edited files.
end run

– for other scales, adjust the factor accordingly (1 = 100 %, .5 = 50 %, .25 = 25 % etc.); for a crop, replace the scale aPicture by factor X by crop aPicture to {width, height}. Mac OS X Automation has good tutorials on the usage of both scale and crop.

@Melros: я расширил свой ответ с помощью примера кода.
@melros: Действия Automator разработаны для простоты, а не для конфигурирования, что означает, что вы в основном зависите от решений разработчика действий относительно их реализации.
Спасибо за этот точный ответ, но, к сожалению, все эти вещи ничего мне не говорят. Я никогда не работал с AppleScript. Мне также интересно, почему это происходит в любом случае, потому что моя автоматизация ничего не требует сжатия. Melros
Спасибо за ваш подробный ответ! Это фактически привело меня на новый путь, который я обязательно открою для себя в будущем! Melros
6

как сказал Копишке, вам придется использоватьsips утилита, которую можно использовать в скрипте оболочки. Вот как это можно сделать в Automator:

Сначала получите файлы и настройку сжатия:

Passing files and compression settings to a shell script in Automator

Ask for Text действие не должно принимать какие-либо входные данные (щелкните правой кнопкой мыши по нему, выберите «Пропустить ввод»).

Убедитесь, что первымGet Value of Variable действие не принимает никаких входных данных (щелкните их правой кнопкой мыши, выберите «Пропустить ввод»), и что второеGet Value of Variable принимает вход с первого раза. Это создает массив, который затем передается сценарию оболочки. Первым элементом в массиве является уровень сжатия, который был задан скрипту Automator. Второй - это список файлов, которые скрипт выполнитsips команда на.

В опциях в верхней частиRun Shell Script действие, выберите & quot; / bin / bash & quot; в качестве оболочки и выберите «в качестве аргументов» для проходного ввода. Затем вставьте этот код:

itemNumber=0
compressionLevel=0

for file in [email protected]
do
    if [ "$itemNumber" = "0" ]; then
        compressionLevel=$file
    else
        echo "Processing $file"
        filename=$file
        sips -s format jpeg -s formatOptions $compressionLevel $file --out ${filename%.*}.jpg
    fi
    ((itemNumber=itemNumber+1))
done
osascript -e 'tell app "Automator" to display dialog "Done." buttons {"OK"}'

Если вы нажмете наResults внизу он скажет вам, над каким файлом он работает в настоящее время. Весело сжимая!

Ну вот:wikiupload.com/5Z3C6CITGTBFW4R
Спасибо, Эрик! Есть ли шанс, что у вас еще есть сценарий рабочего процесса?
2

но если имя файла изображения содержит пробел, этот рабочий процесс не будет работать (из-за пробела при обработке глотков будет нарушен сценарий оболочки). Для этого есть простое решение: добавить & quot;Rename Finder Item& Quot; в этом рабочем процессе. заменить пробелы на "_" или что угодно. тогда хорошо идти.

0

Чтобы избежать "пробела" Проблема в том, что менять IFS разумнее, чем переименовывать. Сделайте резервную копию текущего IFS и измените его только на \ n. И восстановить первоначальный IFS после цикла обработки.

ORG_IFS=$IFS
IFS=$'\n'
for file in [email protected]
do
    ...
done
IFS=$ORG_IFS

Похожие вопросы