Капля AppleScript для преобразования PSD и TIF ​​в JPG

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

  1. Это должна быть капля AppleScript. Я использую редактор сценариев (по какой-то причине Automator не может запустить для меня простую функцию перетаскивания капель).
  2. Выходная папка для JPG не должна запрашиваться пользователем ... но должна быть установлена ​​​​как переменная в коде, постоянно и легко изменяемая.
  3. Качество (сжатие) преобразованного JPG также должно быть легко настраиваемым в коде.
  4. Преобразованные файлы JPG при необходимости необходимо преобразовать в цветовой профиль Adobe RGB 1998.

Я знаю, что события изображения позволяют нам установить сжатие JPG, например:

save openedFile as JPEG with compression level (low|medium|high)

но, к сожалению, мне нужно больше настроек.

Сценарий оболочки поможет мне установить уровень от 10 до 100, но, к сожалению, я не могу правильно реализовать сценарий оболочки. Небольшая помощь, пожалуйста, по пунктам 3 и 4. Спасибо!

on run
    display dialog "Please drag image files to this script to turn them into JPEGs"
end run
on open draggeditems
    set End_Folder to "Macintosh HD:Users:zzz:Desktop:End"
    
    repeat with currentFile in draggeditems
        tell application "Image Events"
            set openedFile to open (currentFile as alias)
            set fileLocation to the location of openedFile
            set fileName to the name of openedFile
            set Path_to_Converted_File to (End_Folder & ":" & text 1 thru -5 of fileName & ".jpg")

            do shell script "sips --setProperty formatOptions 10 " & openedFile
            
    save openedFile as JPEG in Path_to_Converted_File
            --save openedFile as JPEG  with compression level low  in Path_to_Converted_File (low|medium|high)
            
            close openedFile
        end tell
    end repeat
end open

person OutOfTouch    schedule 04.06.2021    source источник


Ответы (2)


Смешение событий изображений и sips скорее сбивает с толку, чем полезно, а поскольку sips может выполнять различные функции, которые вы ищете (например, 3 и 4), имеет смысл использовать его для всего. Установка нескольких переменных для различных параметров позволит вам изменить их по мере необходимости, при добавлении настроек или чего-то еще. Страница руководства sips даст вам более подробную информацию о различных опциях; Я добавил комментарии для тех, которые используются в следующем скрипте:

on run
    open (choose file with prompt "Select image files to turn into JPEGs:" with multiple selections allowed)
end run

on open draggeditems
    set destination to (((path to desktop folder) as text) & "End:") -- folder path (trailing delimiter)
    set format to "jpeg" -- jpeg | tiff | png | gif | jp2 | pict | bmp | qtif | psd | sgi | tga
    set extension to ".jpg" -- extension to match format
    set compression to 10 -- low | normal | high | best | <percent>
    set profile to quoted form of "/System/Library/ColorSync/Profiles/AdobeRGB1998.icc" -- POSIX path to color profile
    repeat with thisFile in draggeditems
        set theName to justTheName for thisFile
        set originalFile to quoted form of POSIX path of thisFile
        set convertedFile to quoted form of POSIX path of (destination & theName & extension)
        do shell script "sips -s format " & format & " -s formatOptions " & compression & " -m " & profile & space & originalFile & " --out " & convertedFile
    end repeat
end open

on justTheName for filePath
    tell application "System Events" to tell disk item (filePath as text)
        set {fileName, extension} to {name, name extension}
    end tell
    if extension is not "" then set fileName to text 1 thru -((count extension) + 2) of fileName -- just the name part
    return fileName
end justTheName

Отредактировано для добавления: сценарий оболочки ожидает пути POSIX, поэтому псевдонимы, переданные обработчику open, принудительно и заключаются в кавычки, если они содержат пробелы.

person red_menace    schedule 05.06.2021
comment
Спасибо. Все очень хорошо написано, но, к сожалению, я не могу заставить это работать. Я изменил только: set destination to ((("/Users/zzz/Desktop/") as text) & "End") Результат: Картинки были перезаписаны в формате jpg с именем, например, xxx.psd. Я могу открыть их, только если .psd переименовать в .jpg. В папку End ничего не идет. И очень странно, что примененный цветовой профиль - sRGB, даже если путь правильно ведет к файлу цветового профиля AdobeRGB1998.icc. Я отладил переменные с помощью команды display dialog, и они выглядят нормально. - person OutOfTouch; 06.06.2021
comment
Не уверен, что происходит — я тестировал форматы .jpg, .png, .psd и .tiff, используя ExifTool и Spotlight для просмотра цветовых профилей и типов файлов, и все работает, как и ожидалось, в моей системе Big Sur. Файл будет перезаписан только в том случае, если он находится в той же папке назначения, и только в том случае, если он имеет то же расширение, что и преобразованный файл. Вы также можете посмотреть команду сценария оболочки, чтобы убедиться, что это нормально. Вам не нужно было менять пункт назначения, он будет использовать папку «Конец» на рабочем столе текущего пользователя — были ли внесены какие-либо другие изменения? - person red_menace; 07.06.2021
comment
Я на Сьерре, если это имеет значение. В строке «do shell» попробуйте заменить «-o» на «--out». Я также изменил формат переменной, так как получал ошибки. - person Mockman; 08.06.2021
comment
Хорошо, я запустил свою машину Sierra, и версия sips имеет другую функцию для опции -o. Изменение его на --out работает, поэтому я отредактировал свой ответ, чтобы использовать его. Похоже, вы можете использовать дополнение сценария, которое вводит конфликт терминологии (не может использовать дополнения в последних версиях ОС без некоторой гимнастики) - не должно быть проблем с изменением имен переменных, чтобы избежать чего-то подобного (или личных предпочтения). - person red_menace; 08.06.2021
comment
@OutOfTouch Я думаю, что ваша проблема в том, что существует конфликт с вашим «пунктом назначения» и строкой «set convertFile». Вы используете путь в стиле posix, но строка «set convertFile» начинается с пути HFS и преобразуется в стиль posix — обратите внимание на двоеточие, вставленное в эту строку. Поэтому попробуйте исходную строку «установить пункт назначения», поскольку она дает правильный вывод для подачи другой строки. Тем не менее, было бы понятнее, если бы двоеточие было добавлено после «Конец» в строке «Установить пункт назначения», а не там, где оно находится. - person Mockman; 09.06.2021
comment
@Mockman - хороший момент, хотя обычной практикой является использование встроенных путей, чтобы избежать жесткого кодирования имен пользователей. Я могу отредактировать это, если это имеет больше смысла. - person red_menace; 09.06.2021
comment
@red_menace Нет, я думаю, вы правы, поэтому я думаю, что OutOfTouch должен использовать вашу строку «путь к рабочему столу» (плюс это работает). Но если бы двоеточие было прикреплено к «End» в этой строке, это уточнило бы, что «End» — это каталог, а также уменьшило бы количество «&» в строке «set convertFile». Хотя это незначительный момент. - person Mockman; 09.06.2021
comment
@red_menace Mockman Спасибо, ребята. В итоге я использую версию red_menace, но, что более важно, я многое узнал о simp и о том, как его использовать. - person OutOfTouch; 12.06.2021

В вашем сценарии много неправильного. Непонятно, почему вы открываете файл для записи перед отправкой в ​​​​команду оболочки. sips не работает с открытыми ссылками на ФАЙЛЫ. sips нужно будет открыть файл из пути POSIX. Я думаю, что это может делать то, что вы хотите (вам нужно будет реализовать проверку ошибок и т.д.):

on open draggeditems
    set End_Folder to "~/Desktop/End/"
    repeat with currentFile in draggeditems
        do shell script "sips --setProperty formatOptions 10 " & quoted form of POSIX path of currentFile & " --out " & End_Folder
    end repeat
end open
person epooch    schedule 05.06.2021
comment
А цветовой профиль? - person Mockman; 08.06.2021
comment
@red_menace Извините, но мне нужно немного обновить этот конвертер. Я хотел бы, чтобы пути в исходном изображении сохранялись после преобразования файла. Есть ли способ сделать это ? - person OutOfTouch; 04.08.2021