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

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

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

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


person OderWat    schedule 13.08.2010    source источник
comment
Я уже нашел: удалить (каждую фотографию альбома MyAlbum, имя файла изображения которой pic1.jpg) .. что не поможет, потому что в моем случае имя неоднозначно, и я должен предварительно просмотреть результаты перед удалением (отсюда установка комментария)   -  person OderWat    schedule 13.08.2010


Ответы (2)


У Филипа правильная идея, но он делает вещи немного сложнее, чем они должны быть. :) Следующее помогает мне:

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 отстой — «удалить» действительно должно работать!

person Brian Webster    schedule 13.08.2010
comment
Работает... но мучительно медленно находить изображение таким образом. Возможно, мне придется создать все изображения, которые я хочу удалить, и работать со всеми ими одновременно. Я имею в виду проверку нескольких путей для каждого изображения вместо того, чтобы несколько раз запускать библиотеку. - person OderWat; 18.08.2010

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, что означает сбой обработчика. (Я мало что могу с этим поделать.)

person Philip Regan    schedule 13.08.2010