Удалить изображение в iPhoto с именем файла (включая путь)
Как я могу удалить изображение (переместить его в корзину) из яблочного скрипта, указав имя файла и путь к изображению на диске.
Этот сценарий будет запущен из оболочки и может получить (допустимое) имя файла, включая путь (размер или другие свойства, если необходимо) в качестве параметра.
До сих пор мне удавалось выбрать изображение по имени (обычно это имя файла) и задать комментарий к нему. Поэтому я могу найти этот комментарий и удалить сразу все изображения с этим комментарием. Но со случайными именами изображений это невозможно, потому что вы найдете несвязанные изображения для имени.
3 ответа
У Филиппа правильная идея, но она делает все немного сложнее, чем нужно.:) Следующее делает трюк для меня:
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, вам нужно будет извлечь эту часть и указать правильный путь к фотографии (тот, который в измененная папка, если она есть, в противном случае путь в папке "Оригиналы").
Кроме того, причина, по которой команда "удалить" работает, а "удалить" - нет, в том, что iPhoto отстой - "удаление" действительно должно работать!
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, что означает, что обработчик не удалось. (Я мало что могу с этим поделать.)
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