Меня немного смущает подход к правильному сжатию изображений, с которыми вы хотите работать. Как уже упоминалось, есть 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
.
Все вышеперечисленное может быть полностью сделано в скрипте оболочки. Это зависит только от того, что вы хотите и как вы хотите выполнить код.