2010-08-13 2 views
0

Как я могу удалить изображение (переместить его в корзину) из applescript, указав имя файла и путь изображения на диске.Удаление изображения в iPhoto с именем файла (включая путь)

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

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

+0

Я уже нашел: удалить (все фото альбома «MyAlbum», образ которого имя файла «pic1.jpg») .. что не поможет, потому что имя неоднозначно в моем случае, и я должен «Предварительный просмотр» результаты перед обрывом (следовательно, установка комментария) – OderWat

ответ

1

iPhoto сохраняет путь POSIX, в отличие от пути Finder (то есть, «:» - с разделителем). Итак, если у вас есть имя и путь, то вы можете использовать свойство image path класса photo для сравнения и удаления фотографии, когда есть совпадение. iPhoto имеет свойство списка для photos, чтобы сделать это легко. Вам нужно будет очистить путь, который вы получаете от оболочки, прежде чем выполнять сравнение с пути изображения, хранящимся в iPhoto (удалите главным образом escape-символы «\»).

tell application "iPhoto" 
    set pathToFile to "/Users/username/Pictures/iPhoto Library/Originals/2007/Sep 10, 2007/genericImageName.jpg" 
    set lastPhoto to count photos 
    repeat with thisPhoto from 1 to lastPhoto 
     set thePhoto to photo thisPhoto 
     set pathToPhoto to image path of thePhoto 
     if pathToFile contains pathToPhoto then 
      try 
       delete thePhoto 
       exit repeat 
      on error the error_message number the error_number 
       display dialog "Error: " & the error_number & ". " & the error_message buttons {"Cancel"} default button 1 
      end try 
     end if 
    end repeat 
end tell 

Конечно, когда я попробовал это, delete дал мне ошибку -10000, что означает, что обработчик не удалось. (Не так много я могу сделать с этим.)

2

Philip имеет правильную идею, но делает вещи немного сложнее, чем нужно. :) Следующий делает трюк для меня:

on run (args) 
    set thePath to first item of args 
    tell application "iPhoto" 
     remove (every photo where image path is equal to thePath or original path is equal to thePath) 
    end tell 
end run 

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

Обратите внимание, что свойство «исходный путь» существует только в iPhoto 8.x, поэтому, если у вас установлена ​​более ранняя версия iPhoto, вам нужно принять эту часть и иметь возможность указать правильный путь к фотографии (тот, который находится в папке Modified, если таковой есть, иначе путь в папке Originals).

Кроме того, причина, по которой команда «удалить» работает, тогда как «удалить» не происходит, потому что iPhoto отстой - «удалить» действительно должно работать!

+0

Работает ... но это очень больно, чтобы «найти» изображение таким образом. Возможно, мне придется создавать все изображения, которые я хочу удалить, и работать над ними одновременно. Я имею в виду проверку нескольких путей для каждого изображения вместо того, чтобы многократно запускать через библиотеку. – OderWat

0
tell application "iPhoto" 
    set pathToFile to "/Users/username/Pictures/iPhoto Library/Originals/2007/Sep 10, 2007/genericImageName.jpg" 
    set lastPhoto to count photos 
    repeat with thisPhoto from 1 to lastPhoto 
     set thePhoto to photo thisPhoto 
     set pathToPhoto to image path of thePhoto 
     if pathToFile contains pathToPhoto then 
      try 
       remove thePhoto 
       exit repeat 
      on error the error_message number the error_number 
       display dialog "Error: " & the error_number & ". " & the error_message buttons {"Cancel"} default button 1 
      end try 
     end if 
    end repeat 
end tell 
Смежные вопросы