2010-08-13 14 views
0

Comment supprimer une image (la déplacer dans la corbeille) à partir d'applescript en indiquant le nom de fichier et le chemin de l'image localisée sur le lecteur.Supprimer une image dans iPhoto ayant le nom de fichier (chemin d'accès compris)

Ce script sera démarré à partir du shell et pourra obtenir le nom de fichier (valide), y compris le chemin (taille ou autres propriétés si nécessaire) en tant que paramètre. Jusqu'à présent, j'ai réussi à sélectionner l'image par son nom (qui est généralement le nom du fichier) et à y ajouter un commentaire. Donc, je peux rechercher ce commentaire et supprimer toutes les images avec ce commentaire à la fois. Mais avec des noms d'images aléatoires, cela n'est pas possible parce que vous trouvez des images sans rapport avec le nom.

+0

Je l'ai déjà trouvé: enlever (toutes les photos de l'album « MyAlbum » dont le nom est l'image « pic1.jpg ») .. qui ne va pas aider parce que le nom est ambigu dans mon cas et je dois « preview » les résultats avant de trash (d'où le réglage du commentaire) – OderWat

Répondre

1

iPhoto stocke un chemin POSIX par opposition au chemin du Finder (c'est-à-dire délimité par ":"). Ainsi, si vous avez le nom et le chemin d'accès, vous pouvez utiliser la propriété image path de la classe photo pour la comparaison et supprimer la photo en cas de correspondance. iPhoto a une propriété de liste pour photos pour rendre cela facile. Vous devrez nettoyer le chemin que vous obtenez du shell avant de faire la comparaison avec le chemin d'image stocké dans iPhoto (supprimez les caractères d'échappement "\", principalement).

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 

Bien sûr, quand j'ai essayé cela, delete m'a donné une erreur -10000, ce qui signifie que le gestionnaire a échoué. (Je ne peux pas faire grand-chose à ce sujet.)

2

Philip a la bonne idée, mais rend les choses un peu plus difficiles qu'elles ne le devraient. :) Voici le tour est joué pour moi:

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 

Ce saisit le premier argument de ligne de commande et utilise comme le chemin du fichier que vous souhaitez supprimer. Étant donné qu'une photo dans iPhoto peut avoir une copie modifiée et une copie originale de chaque photo, le script teste à la fois le chemin d'accès original de la photo et son chemin d'image actuel lors de la recherche de la photo à supprimer. Notez cependant que la propriété "original path" n'existe que dans iPhoto 8.x, donc si vous possédez une version antérieure d'iPhoto, vous devrez extraire cette partie et fournir le chemin photo correct. (celui du dossier Modifié s'il y en a un, sinon le chemin dans le dossier Originals).

Aussi, la raison pour laquelle la commande "remove" fonctionne alors que "delete" ne l'est pas parce que iPhoto suce - "delete" devrait vraiment marcher!

+0

Fonctionne ... mais il est pénible de "trouver" une image de cette façon. Je peux devoir créer de toutes les images que je veux supprimer et travailler sur chacun d'eux simultanément. Je veux dire vérifier plusieurs chemins pour chaque image au lieu de courir plusieurs fois dans la bibliothèque. – 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