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

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

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

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

Ответы [ 3 ]

2 голосов
/ 14 августа 2010

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

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

1 голос
/ 13 августа 2010

iPhoto хранит путь POSIX в отличие от пути Finder (т. Е. ":" С разделителями). Таким образом, если у вас есть имя и путь, то вы можете использовать свойство image path класса photo для сравнения и удалить фотографию при совпадении. iPhoto имеет свойство списка для photos, чтобы упростить это. Перед сравнением с путем к изображению, сохраненному в iPhoto, вам нужно будет очистить путь, полученный из оболочки (в основном удалите управляющие символы "\").

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

0 голосов
/ 25 декабря 2014
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
...