2013-08-18 3 views
0

Я новенькая AppleScript, и я пытаюсь написать основной сценарий, который делает следующее:AppleScript: Организация изображений на основе размеров изображения

находит изображения (в форматах PNG) в папке ~/Dropbox/Camera Загружает ровно 640x1136 (скриншоты iPhone 5) и перемещает их в ~/Dropbox/Camera Uploads/Screenshots.

Это кажется довольно простым, но до сих пор я не мог понять это.

ответ

2

Вот как я бы это сделать. Я бы не стал беспокоиться о производительности. Я запустил раздел «События изображений» на 200 файлов, и он занял только 1 секунду.

set picFolder to alias "Path:to:Dropbox:Camera Uploads:" 
set screenshotFolder to alias "Path:to:Dropbox:Camera Uploads:screenshots:" 


tell application "System Events" 
    set photos to path of files of picFolder whose kind is "Portable Network Graphics image" 
end tell 

set screenshots to {} 
repeat with imgPath in photos 
    set imgAlias to alias imgPath 
    tell application "Image Events" 
     set img to open imgPath 
     if dimensions of img = {640, 1136} then 
      set end of screenshots to imgAlias 
     end if 
     close img 
    end tell 
end repeat 

tell application "Finder" 
    move screenshots to screenshotFolder 
end tell 
+0

Я получаю сообщение об ошибке: «Значение переменной pic не определено». – colindunn

+0

После того, как я очистил сценарий, появилась опечатка. Я отредактировал его. Попробуй это сейчас. –

+0

Хм. Теперь я получаю «Не могу сделать псевдоним» Macintosh HD: Пользователи: colind: Dropbox: Camera Uploads: 2013-08-21 12.19.04.png «приложения« События изображения »в ожидаемый тип». – colindunn

0

Вам необходимо иметь приложение AppleScript, которое может действовать в зависимости от размеров файла изображения. Я не думаю, что Finder может это сделать, несмотря на его способность показывать размеры изображений в представлениях Finder.

iPhoto должен быть в состоянии сделать это. Словарь iPhoto показывает, что «фотографии» имеют ширину и высоту изображений. Поэтому вы должны иметь возможность написать AppleScript, который сначала импортирует их в iPhoto, затем выбирает те, которые соответствуют вашим критериям, а затем сохраняет их в соответствующую папку Dropbox.

В зависимости от ваших потребностей вы также можете посмотреть Automator. Он содержит также действия iPhoto, в том числе один для «Фильтровать объекты iPhoto». Если вы создадите действие с папкой, вы сможете создать сценарий Automator, который запускается, когда что-то новое добавляется в вашу папку «Upload Camera», добавляет их в iPhoto, а затем копирует их в папку «Скриншоты».

В противном случае вы сможете использовать Image Events, чтобы получить все изображений в папке, а затем действовать только на те, которые соответствуют вашим критериям. Что-то вроде:

tell application "Image Events" 
    tell folder "Macintosh HD:Users:colin:Dropbox:Camera Uploads" 
     copy (files where kind is "JPEG image") to potentialScreenshots 
     repeat with potentialFile in potentialScreenshots 
      set potentialScreenshot to open potentialFile 
      set imageDimensions to dimensions of potentialScreenshot 
      if item 1 of imageDimensions is 640 then 
       set fileName to name of potentialFile 
       tell me to display dialog fileName 
      end if 
     end repeat 
    end tell 
end tell 

Там должен быть способ рассказать изображение События для смотреть только на файлы, размер которых соответствует тому, что вы хотите, но я не могу видеть это.

+0

Размеры доступны через окно Finder 'Get Info', поэтому должен быть способ получить их, не открывая каждое изображение. Хотя даже запрещая это, вы можете использовать команду 'файл' Bash. Не должно быть необходимости открывать все файлы, которые вы просматриваете (особенно если OP имеет 100+) – scohe001

0

Try:

set folderPath to POSIX path of (path to home folder) & "Dropbox/Camera Uploads" 
set screenshotsPath to POSIX path of (path to home folder) & "Dropbox/Camera Uploads/Screenshots" 

try 
    do shell script "mdfind -0 -onlyin " & quoted form of folderPath & " \"kMDItemPixelWidth == 640 && kMDItemPixelHeight == 1136\" | xargs -0 -I {} mv {} " & quoted form of screenshotsPath 
end try