Trier des photos Portraits et Paysages ?, Possible avec Apple Script ?? |
Bienvenue invité ( Connexion | Inscription )
Trier des photos Portraits et Paysages ?, Possible avec Apple Script ?? |
7 Jul 2011, 16:55
Message
#1
|
|
Adepte de Macbidouille Groupe : Membres Messages : 109 Inscrit : 11 Jan 2010 Membre no 148 488 |
Bonjour,
J'ai un dossier avec plus de 5000 photos à trier, je dois extraire les photos au format portrait dans un répertoire "portrait" et les photos "paysage" dans un répertoire "paysage", bref est-ce possible ?, il faudrait par exemple que le script puisse calculer si la hauteur et inférieur à la largeur de l'image = Paysage et si la hauteur et supérieur à la largeur = portrait.. Ah moin qu'il soit possible de faire cela sous Photoshop, mais rien n'y fait avec l'option adapter l'image.... Merci pour votre aide. |
|
|
Guest_EricaL**_* |
7 Jul 2011, 20:12
Message
#2
|
Guests |
Bonjour,
Si je comprends bien, tu voudrais déplacer les photos d'un dossier quelconque dans un autre dossier (portraits ou paysages ) selon le format de la photo. Voici un script qui prend (la largeur et la hauteur de l'image) dans les metadonnés "Spotlight"). Ce script ne déplacera aucun fichiers si la hauteur est null, c'est-à-dire que le fichier n'est pas indexé par "Spotlight" ou ce n'est pas une image. Ici, dans les metadonnés "Spotlight", la hauteur est toujours avant la largeur, ça ne doit pas avoir changé avec les différentes versions de OSX Code set dossier_portrait to quoted form of "déposerLeDossierIci" set dossier_paysage to quoted form of "déposerLeDossierIci" set dossier_source to quoted form of POSIX path of (choose folder with prompt "Sélectionner le dossier des photos à trier (portraits et paysages).") do shell script "cd " & dossier_source & " && for tFile in *;do if [ -f \"$tFile\" ];then r=$(/usr/bin/mdls -name kMDItemPixelWidth -name kMDItemPixelHeight \"$tFile\" | /usr/bin/awk ' /kMDItem/ { print $NF }' ORS=\" \") set -- $r if [ \"$1\" != \"(null)\" ]; then if [[ $2 -gt $1 ]]; then /bin/mv \"$tFile\" " & dossier_paysage & " else /bin/mv \"$tFile\" " & dossier_portrait & " fi fi fi; done" Si le volume du dossier des photos n’est pas indexé par "Spotlight". Remplace le do shell script par ceci. Code do shell script "cd " & dossier_source & " && for tFile in *;do if [ -f \"$tFile\" ];then r=$(/usr/bin/sips -g pixelWidth -g pixelHeight \"$tFile\" | /usr/bin/awk ' /pixel/ { print $NF }' ORS=\" \") if [ \"$r\" != \"\" ]; then set -- $r if [[ $1 -gt $2 ]]; then /bin/mv \"$tFile\" " & dossier_paysage & " else /bin/mv \"$tFile\" " & dossier_portrait & " fi fi fi; done" Dans le script supprimme le texte déposerLeDossierIci, glisse/dépose le dossier de destination entre les "" |
|
|
7 Jul 2011, 21:39
Message
#3
|
|
Adepte de Macbidouille Groupe : Membres Messages : 109 Inscrit : 11 Jan 2010 Membre no 148 488 |
Merci EricaL,
Oui c'est çà !!! Dans les grandes ligne , cela fonctionne, j'ai testé la version non spotligh, par contre comment faire pour mettre en route ce script quand j'ajoute mes images dans un répertoire ? une action de dossier en sommes... si possible même si je laisse des dossiers plein d'images, ce dossier et donc traitée et déplacé.... je sais pas si je suis très clair... Merci encore ! Ce message a été modifié par MacMame - 7 Jul 2011, 21:42. |
|
|
Guest_EricaL**_* |
8 Jul 2011, 01:32
Message
#4
|
Guests |
Bonjour,
ans les grandes ligne , cela fonctionne, j'ai testé la version non spotligh, par contre comment faire pour mettre en route ce script quand j'ajoute mes images dans un répertoire ? Voici le script qui fonctionne en action de dossier. J'ai ajouté la gestion des noms, un nombre sera ajouté au nom en cas de nom identique dans le dossier de destination Code property dossier_portrait : quoted form of "déposerLeDossierIci" property dossier_paysage : quoted form of "déposerLeDossierIci" on adding folder items to this_folder after receiving added_items repeat with aItem in added_items try my deplace_photo(aItem) end try end repeat end adding folder items to on deplace_photo(tFile) do shell script "tFile=" & (quoted form of POSIX path of tFile) & " if [ -f \"$tFile\" ];then r=$(/usr/bin/sips -g pixelWidth -g pixelHeight \"$tFile\" | /usr/bin/awk ' /pixel/ { print $NF }' ORS=\" \") if [ \"$r\" != \"\" ]; then name=${tFile##*/}; i=1; set -- $r if [[ $1 -gt $2 ]]; then dest=" & dossier_paysage & "; else dest=" & dossier_portrait & ";fi if [ -e \"$dest/$name\" ];then if [[ \"$name\" != *.* ]]; then ext=\"\"; base=\"$name\"; else base=${name%.*}; ext=.${name##*.};fi while [ -e \"$dest/$base$i$ext\" ];do ((i++)) done name=\"$base$i$ext\" fi /bin/mv \"$tFile\" \"$dest/$name\" fi fi" end deplace_photo Dans le script supprimme le texte déposerLeDossierIci, glisse/dépose le dossier de destination entre les "" Le script ne traite que les images ajoutées dans ce dossier. Pour les dossiers et les autres types de fichiers ajoutés dans le dossier ou les éléments existants, le script ne déplacera aucun de ces éléments. Important : une action de dossier n'est pas recommandée, si les fichiers ajoutés dans le dossier proviennent d'un téléchargement(internet) direct dans ce dossier, l'action de dossier va en oublier plusieurs. Ce message a été modifié par EricaL** - 8 Jul 2011, 01:37. |
|
|
8 Jul 2011, 12:20
Message
#5
|
|
Adepte de Macbidouille Groupe : Membres Messages : 109 Inscrit : 11 Jan 2010 Membre no 148 488 |
Le script ne traite que les images ajoutées dans ce dossier. Pour les dossiers et les autres types de fichiers ajoutés dans le dossier ou les éléments existants, le script ne déplacera aucun de ces éléments. Important : une action de dossier n'est pas recommandée, si les fichiers ajoutés dans le dossier proviennent d'un téléchargement(internet) direct dans ce dossier, l'action de dossier va en oublier plusieurs. Merci EricaL !! Ok je test dès que possible, en fait les fichiers ne seront pas téléchargé, il seront déposer directement dans le dossier. En fait , après réflexion... , j'aurais peut être du intégrer ce système de reconnaissance (portrait / paysage) dans le script que je t’avais demandé auparavant, par exemple exécuter un script PSD spécial "Paysage" pour les photos identifié comme tel et portrait pour la seconde possibilitée.. car actuellement ce que je fait, c'est d'avoir créer 2 répertoires, un rep (portrait) et un rep (paysage) ces 2 dossiers Action appel un script photoshop approprié (avec le fameux système de renommage mini etc.... Pense tu que cela soit possible ? en fait ce serais un script tout en un ?? Si cela est possible et si tu as le temps, j'oserais te copier mon script En tous les cas merci encore.. Ce message a été modifié par MacMame - 8 Jul 2011, 12:23. |
|
|
Guest_EricaL**_* |
8 Jul 2011, 15:33
Message
#6
|
Guests |
Bonjour,
En fait , après réflexion... , j'aurais peut être du intégrer ce système de reconnaissance (portrait / paysage) dans le script que je t’avais demandé auparavant, par exemple exécuter un script PSD spécial "Paysage" pour les photos identifié comme tel et portrait pour la seconde possibilitée.. Pense tu que cela soit possible ? en fait ce serais un script tout en un ?? Oui, c'est sans problème. Je crois que la différence sera les do action dans Photoshop, donc les modifications seront dans la fonction "on action1(tFiles)". Voici le début de la fonction Code on action1(tFiles) script ob -- seulement les actions Photoshop on PSD_process(this_path) set tFile to quoted form of POSIX path of this_path set t_dim to do shell script "/usr/bin/sips -g pixelWidth -g pixelHeight " & tFile & " | /usr/bin/awk ' /pixel/ { print $NF }' ORS=\" \"" if t_dim is "" or ((word 1 of t_dim) as integer) > ((word 2 of t_dim) as integer) then set isPortrait to false else set isPortrait to true end if tell application "Adobe Photoshop CS5" open alias this_path showing dialogs never tell the current document if isPortrait then --do action "MINI" from "decoup-Portrait" --do action "MED" from "decoup-Portrait" --do action "MAXI" from "decoup-Portrait" --do action "PDM" from "decoup-Portrait" else --do action "MINI" from "decoup-paysage" --do action "MED" from "decoup-paysage" --do action "MAXI" from "decoup-paysage" --do action "PDM" from "decoup-paysage" end if close saving no end tell end tell end PSD_process end script Il suffit de mettre les do action correspondant au portrait et au paysage. Edition : je n'avais pas pensé de vérifier les dimensions directement dans Photoshop. Donc, voici le début de la fonction Code on action1(tFiles) script ob -- seulement les actions Photoshop on PSD_process(this_path) tell application "Adobe Photoshop CS5" open alias this_path showing dialogs never tell the current document if width < height then -- format Portrait --do action "MINI" from "decoup-Portrait" --do action "MED" from "decoup-Portrait" --do action "MAXI" from "decoup-Portrait" --do action "PDM" from "decoup-Portrait" else --do action "MINI" from "decoup-paysage" --do action "MED" from "decoup-paysage" --do action "MAXI" from "decoup-paysage" --do action "PDM" from "decoup-paysage" end if close saving no end tell end tell end PSD_process end script Sinon, s'il y a d'autres différences, colle les deux scripts, je ferais les modifications. Ce message a été modifié par EricaL** - 8 Jul 2011, 16:05. |
|
|
12 Jul 2011, 15:31
Message
#7
|
|
Adepte de Macbidouille Groupe : Membres Messages : 109 Inscrit : 11 Jan 2010 Membre no 148 488 |
AAHH Ah ok oui voila, mais je pense te donner le code complet, car il y avais aussi le dispositif qui permettait d'attendre le téléchargement des fichiers dans le dossier, ainsi que d'autre choses, comme le renommage, donc je préfère te donner l'intégralité pour savoir ou imbriquer la fonction "portrait / paysage", je te met çà dès mon retour chez moi.
Merci encore pour ton aide. |
|
|
12 Jul 2011, 20:53
Message
#8
|
|
Adepte de Macbidouille Groupe : Membres Messages : 109 Inscrit : 11 Jan 2010 Membre no 148 488 |
Voici le code complet que j'utilise, à quel endroit e dois ajouter le code que tu viens de me fournir ?
Code property ajout : {}
property sous_dossiers : {} property masterFolder : "" property dossier_a_traiter : "" on idle -- collection Debut set dossier_a_traiter to "/Volumes/Rack-Pro/CANON/★AUTOMATOR/collection/PHOTOS-PORTRAITS" tell my rechercheFichiers(dossier_a_traiter) to if it is not "" then my action7(it) -- si des éléments sont trouvés, execute la fonction action7 set dossier_a_traiter to "/Volumes/Rack-Pro/CANON/★AUTOMATOR/collection/PHOTOS-PAYSAGES" tell my rechercheFichiers(dossier_a_traiter) to if it is not "" then my action8(it) -- si des éléments sont trouvés, execute la fonction action8 set dossier_a_traiter to "/Volumes/Rack-Pro/CANON/★AUTOMATOR/collection/PIC" tell my rechercheFichiers(dossier_a_traiter) to if it is not "" then my action9(it) -- si des éléments sont trouvés, execute la fonction action9 -- collection Fin return 30 -- 20 secondes avant la prochaine execution du idle end idle on quit continue quit end quit -- collection PORTRAIT DEBUT on action7(tFiles) script ob -- seulement les actions Photoshop on PSD_process(this_path) tell application "Adobe Photoshop CS5" open alias this_path showing dialogs never tell the current document do action "MINI" from "collection-portrait" do action "MED" from "collection-portrait" do action "MAXI" from "collection-portrait" do action "PRM" from "collection-portrait" close saving no end tell end tell end PSD_process end script set ajout to {"_mini", "_med", "_maxi", "_prm"} -- selon l'ordre des dossiers (dans la ligne suivante) set sous_dossiers to {"MINI", "MED", "MAXI", "PRM"} set masterFolder to "/Users/monmac/Pictures/RESULTAT" -- le dossier parent des sous dossier "MINI", "MED", "MAXI", "PRM" set dossiersDimages to {} repeat with f in tFiles -- boucle qui ne traite que les fichiers set this_path to (POSIX file f) as string if not my isDownloading(this_path as alias) then -- le fichier ou dossier ne se télécharge pas if ((alias this_path) as string) ends with ":" then -- c'est un dossier set end of dossiersDimages to contents of f -- on met le chemin du dossier dans une liste else ob's PSD_process(this_path) -- traite le fichier dans Photoshop my deplace(f) -- déplace le fichier dans le sous dossier "tempo" end if end if end repeat my renomme() set d to "" my deplace_images_creer("/Users/monmac/Pictures/RESULTAT/★ REGROUPEMENT/collection_recup", d) --<-- mettre ici le chemin du dossier de destination repeat with d in dossiersDimages -- boucle qui traite les dossiers d'images set tFiles to do shell script "/usr/bin/find " & (quoted form of d) & " -maxdepth 1 -type f \\! -name '.*'" if tFiles is not "" then repeat with f in (get paragraphs of tFiles) ob's PSD_process((POSIX file f) as string) -- traite le fichier dans Photoshop end repeat my deplace(d) -- déplace le dossier dans le sous dossier "tempo" my renomme() my deplace_images_creer("/Users/monmac/Pictures/RESULTAT/★ REGROUPEMENT/collection_recup", d) --<-- mettre ici le chemin du dossier de destination end if end repeat end action7 -- collection PORTRAIT FIN -- collection PAYSAGE DEBUT on action8(tFiles) script ob -- seulement les actions Photoshop on PSD_process(this_path) tell application "Adobe Photoshop CS5" open alias this_path showing dialogs never tell the current document do action "MINI" from "collection-paysage" do action "MED" from "collection-paysage" do action "MAXI" from "collection-paysage" do action "PRM" from "collection-paysage" close saving no end tell end tell end PSD_process end script set ajout to {"_mini", "_med", "_maxi", "_prm"} -- selon l'ordre des dossiers (dans la ligne suivante) set sous_dossiers to {"MINI", "MED", "MAXI", "PRM"} set masterFolder to "/Users/monmac/Pictures/RESULTAT" -- le dossier parent des sous dossier "MINI", "MED", "MAXI", "PRM" set dossiersDimages to {} repeat with f in tFiles -- boucle qui ne traite que les fichiers set this_path to (POSIX file f) as string if not my isDownloading(this_path as alias) then -- le fichier ou dossier ne se télécharge pas if ((alias this_path) as string) ends with ":" then -- c'est un dossier set end of dossiersDimages to contents of f -- on met le chemin du dossier dans une liste else ob's PSD_process(this_path) -- traite le fichier dans Photoshop my deplace(f) -- déplace le fichier dans le sous dossier "tempo" end if end if end repeat my renomme() set d to "" my deplace_images_creer("/Users/monmac/Pictures/RESULTAT/★ REGROUPEMENT/collection_recup", d) --<-- mettre ici le chemin du dossier de destination repeat with d in dossiersDimages -- boucle qui traite les dossiers d'images set tFiles to do shell script "/usr/bin/find " & (quoted form of d) & " -maxdepth 1 -type f \\! -name '.*'" if tFiles is not "" then repeat with f in (get paragraphs of tFiles) ob's PSD_process((POSIX file f) as string) -- traite le fichier dans Photoshop end repeat my deplace(d) -- déplace le dossier dans le sous dossier "tempo" my renomme() my deplace_images_creer("/Users/monmac/Pictures/RESULTAT/★ REGROUPEMENT/collection_recup", d) --<-- mettre ici le chemin du dossier de destination end if end repeat end action8 -- collection PAYSAGE FIN -- collection PIC DEBUT on action9(tFiles) script ob -- seulement les actions Photoshop on PSD_process(this_path) tell application "Adobe Photoshop CS5" open alias this_path showing dialogs never tell the current document do action "PIC" from "collection-pic-picmax" do action "PICMAX" from "collection-pic-picmax" close saving no end tell end tell end PSD_process end script set ajout to {"_pic", "_picmax"} -- selon l'ordre des dossiers (dans la ligne suivante) set sous_dossiers to {"PIC", "PICMAX"} set masterFolder to "/Users/monmac/Pictures/RESULTAT" -- le dossier parent des sous dossier "PIC", "PICMAX" set dossiersDimages to {} repeat with f in tFiles -- boucle qui ne traite que les fichiers set this_path to (POSIX file f) as string if not my isDownloading(this_path as alias) then -- le fichier ou dossier ne se télécharge pas if ((alias this_path) as string) ends with ":" then -- c'est un dossier set end of dossiersDimages to contents of f -- on met le chemin du dossier dans une liste else ob's PSD_process(this_path) -- traite le fichier dans Photoshop my deplace(f) -- déplace le fichier dans le sous dossier "tempo" end if end if end repeat my renomme() set d to "" my deplace_images_creer("/Users/monmac/Pictures/RESULTAT/★ REGROUPEMENT/collection_recup", d) --<-- mettre ici le chemin du dossier de destination repeat with d in dossiersDimages -- boucle qui traite les dossiers d'images set tFiles to do shell script "/usr/bin/find " & (quoted form of d) & " -maxdepth 1 -type f \\! -name '.*'" if tFiles is not "" then repeat with f in (get paragraphs of tFiles) ob's PSD_process((POSIX file f) as string) -- traite le fichier dans Photoshop end repeat my deplace(d) -- déplace le dossier dans le sous dossier "tempo" my renomme() my deplace_images_creer("/Users/monmac/Pictures/RESULTAT/★ REGROUPEMENT/collection_recup", d) --<-- mettre ici le chemin du dossier de destination end if end repeat end action9 -- collection_rouge PIC FIN on renomme() set n to 1 repeat with ceDossier in sous_dossiers -- chaque nom de dossier de la liste sous_dossiers set t_folder to quoted form of (masterFolder & "/" & ceDossier) do shell script "ajout=" & (quoted form of (item n of ajout)) & " cd " & t_folder & " && /usr/bin/find . -type f -maxdepth 1 \\! -name \"*$ajout.*\" \\! -name \"*$ajout\" \\! -name '.*' -print0 | while read -d $'\\0' f; do nom=${f%.*}; ext=${f##*.}; if [ \"$nom\" = \"\" ]; then /bin/mv -f \"$f\" \"$f$ajout\"; else /bin/mv -f \"$f\" \"$nom$ajout.$ext\"; fi done" set n to n + 1 end repeat end renomme on isDownloading(f) set s to size of (info for f) delay 6 return (size of (info for f)) < s end isDownloading on rechercheFichiers(d) -- recherche fichiers et dossiers set tFiles to do shell script "/usr/bin/find " & (quoted form of d) & " -maxdepth 1 -mindepth 1 \\! -name '.*' \\! -name 'tempo'" if tFiles is not "" then return paragraphs of tFiles return "" end rechercheFichiers on deplace(f) -- déplace le (fichier original ou le dossier contenant les fichiers originaux) dans le sous dossier "tempo" -- si un élément du meme nom existe deja dans le dossier de destination, un nombre sera ajouté au nom set destPath to quoted form of (dossier_a_traiter & "/tempo") do shell script "dest=" & destPath & ";f=" & (quoted form of f) & "; name=${f##*/}; i=\"\" if [[ \"$name\" != *.* ]]; then ext=\"\"; base=\"$name\"; else base=${name%.*}; ext=.${name##*.};fi while [ -e \"$dest/$base$i$ext\" ]; do ((i++)); done; /bin/mv \"$f\" \"$dest/$base$i$ext\"" end deplace on deplace_images_creer(d, dossier) -- déplace les images dans le dossier spécifié -- si un élément du meme nom existe deja dans le dossier spécifié, un nombre sera ajouté au nom if dossier is "" then -- ce sont des images qui ont été déposées set destPath to quoted form of d set thisFolder to (POSIX file d) as string else -- c'est dossier qui a été déposée set r to do shell script "d=" & (quoted form of dossier) & "; nom=${d##*/}; i=\"\" cd " & (quoted form of d) & ";while [ -e \"$nom$i\" ];do ((i++)) done /bin/mkdir \"$nom$i\"; echo \"$nom$i\"" -- création du dossier set destPath to quoted form of (d & "/" & r) set thisFolder to (POSIX file (d & "/" & r)) as string end if repeat with ceDossier in sous_dossiers -- chaque nom de dossier de la liste sous_dossiers set t_folder to quoted form of (masterFolder & "/" & ceDossier) do shell script "dest=" & destPath & " /usr/bin/find " & t_folder & " -type f -maxdepth 1 \\! -name '.*' -print0 | while read -d $'\\0' f; do name=${f##*/}; if [ -e \"$dest/$name\" ];then i=1; if [[ \"$name\" != *.* ]]; then ext=\"\"; base=\"$name\"; else base=${name%.*}; ext=.${name##*.};fi while [ -e \"$dest/$base$i$ext\" ];do ((i++)) done name=\"$base$i$ext\" fi /bin/mv \"$f\" \"$dest/$name\" done" end repeat tell application "Finder" to try -- étiquette verte set label index of document files of folder thisFolder whose name extension is in {"gif", "png"} and (name contains "_mini." or name contains "_pic.") and it's label index is not 6 to 6 end try end deplace_images_creer |
|
|
Guest_EricaL**_* |
13 Jul 2011, 03:36
Message
#9
|
Guests |
Bonjour,
OK, je ne suis pas sur. Selon moi, tu veux éliminer ces deux dossiers ("collection/PHOTOS-PORTRAITS" et "collection/PHOTOS-PAYSAGES"), pour n'avoir qu'un seul dossier, par exemple "collection/PHOTOS". Si c'est ça, voici le début du script: Les cinq lignes modifiées sont indiquées par --**** Les deux lignes ajoutées sont indiquées par --****+ Les lignes supprimées sont indiquées par --****- Code property ajout : {} property sous_dossiers : {} property masterFolder : "" property dossier_a_traiter : "" on idle -- collection Debut set dossier_a_traiter to "/Volumes/Rack-Pro/CANON/★AUTOMATOR/collection/PHOTOS" --**** tell my rechercheFichiers(dossier_a_traiter) to if it is not "" then my action7(it) -- si des éléments sont trouvés, execute la fonction action7 -- cette ligne qui finit par /PHOTOS-PAYSAGES" + les deux lignes suivantes ont été supprimées --****- set dossier_a_traiter to "/Volumes/Rack-Pro/CANON/★AUTOMATOR/collection/PIC" tell my rechercheFichiers(dossier_a_traiter) to if it is not "" then my action9(it) -- si des éléments sont trouvés, execute la fonction action9 -- collection Fin return 30 -- 20 secondes avant la prochaine execution du idle end idle on quit continue quit end quit -- collection PORTRAIT et PAYSAGE DEBUT on action7(tFiles) script ob -- seulement les actions Photoshop on PSD_process(this_path) set tCollection to "collection-paysage" --****+ tell application "Adobe Photoshop CS5" open alias this_path showing dialogs never tell the current document if width < height then set tCollection to "collection-portrait" -- format Portrait--****+ do action "MINI" from tCollection--**** do action "MED" from tCollection--**** do action "MAXI" from tCollection--**** do action "PRM" from tCollection--**** close saving no end tell end tell end PSD_process end script set ajout to {"_mini", "_med", "_maxi", "_prm"} -- selon l'ordre des dossiers (dans la ligne suivante) set sous_dossiers to {"MINI", "MED", "MAXI", "PRM"} set masterFolder to "/Users/monmac/Pictures/RESULTAT" -- le dossier parent des sous dossier "MINI", "MED", "MAXI", "PRM" set dossiersDimages to {} repeat with f in tFiles -- boucle qui ne traite que les fichiers set this_path to (POSIX file f) as string if not my isDownloading(this_path as alias) then -- le fichier ou dossier ne se télécharge pas if ((alias this_path) as string) ends with ":" then -- c'est un dossier set end of dossiersDimages to contents of f -- on met le chemin du dossier dans une liste else ob's PSD_process(this_path) -- traite le fichier dans Photoshop my deplace(f) -- déplace le fichier dans le sous dossier "tempo" end if end if end repeat my renomme() set d to "" my deplace_images_creer("/Users/monmac/Pictures/RESULTAT/★ REGROUPEMENT/collection_recup", d) --<-- mettre ici le chemin du dossier de destination repeat with d in dossiersDimages -- boucle qui traite les dossiers d'images set tFiles to do shell script "/usr/bin/find " & (quoted form of d) & " -maxdepth 1 -type f \\! -name '.*'" if tFiles is not "" then repeat with f in (get paragraphs of tFiles) ob's PSD_process((POSIX file f) as string) -- traite le fichier dans Photoshop end repeat my deplace(d) -- déplace le dossier dans le sous dossier "tempo" my renomme() my deplace_images_creer("/Users/monmac/Pictures/RESULTAT/★ REGROUPEMENT/collection_recup", d) --<-- mettre ici le chemin du dossier de destination end if end repeat end action7 -- collection PORTRAIT et PAYSAGE FIN Supprime la fonction "on action8(tFiles)" --> end action8 Le reste du script n'est pas modifié. |
|
|
18 Jul 2011, 14:01
Message
#10
|
|
Adepte de Macbidouille Groupe : Membres Messages : 109 Inscrit : 11 Jan 2010 Membre no 148 488 |
Salut !
Houla ! je suis largué l'action8 de mon ancien fichier je le colle ou ? dans celui que tu m'a remis ? sinon si j’exécute en double cliquant dessus (enregitrer en application) et que je met une image dans "PHOTOS" rien ne ce passe. Code property ajout : {}
property sous_dossiers : {} property masterFolder : "" property dossier_a_traiter : "" on idle -- collection Debut set dossier_a_traiter to "/Volumes/Rack-Pro/CANON/★AUTOMATOR/collection/PHOTOS" --**** tell my rechercheFichiers(dossier_a_traiter) to if it is not "" then my action7(it) -- si des éléments sont trouvés, execute la fonction action7 -- cette ligne qui finit par /PHOTOS-PAYSAGES" + les deux lignes suivantes ont été supprimées --****- set dossier_a_traiter to "/Volumes/Rack-Pro/CANON/★AUTOMATOR/collection/PIC" tell my rechercheFichiers(dossier_a_traiter) to if it is not "" then my action9(it) -- si des éléments sont trouvés, execute la fonction action9 -- collection Fin return 30 -- 20 secondes avant la prochaine execution du idle end idle on quit continue quit end quit -- collection PORTRAIT et PAYSAGE DEBUT on action7(tFiles) script ob -- seulement les actions Photoshop on PSD_process(this_path) set tCollection to "collection-paysage" --****+ tell application "Adobe Photoshop CS5" open alias this_path showing dialogs never tell the current document if width < height then set tCollection to "collection-portrait" -- format Portrait--****+ do action "MINI" from tCollection--**** do action "MED" from tCollection--**** do action "MAXI" from tCollection--**** do action "PRM" from tCollection--**** close saving no end tell end tell end PSD_process end script set ajout to {"_mini", "_med", "_maxi", "_prm"} -- selon l'ordre des dossiers (dans la ligne suivante) set sous_dossiers to {"MINI", "MED", "MAXI", "PRM"} set masterFolder to "/Users/monmac/Pictures/RESULTAT" -- le dossier parent des sous dossier "MINI", "MED", "MAXI", "PRM" set dossiersDimages to {} repeat with f in tFiles -- boucle qui ne traite que les fichiers set this_path to (POSIX file f) as string if not my isDownloading(this_path as alias) then -- le fichier ou dossier ne se télécharge pas if ((alias this_path) as string) ends with ":" then -- c'est un dossier set end of dossiersDimages to contents of f -- on met le chemin du dossier dans une liste else ob's PSD_process(this_path) -- traite le fichier dans Photoshop my deplace(f) -- déplace le fichier dans le sous dossier "tempo" end if end if end repeat my renomme() set d to "" my deplace_images_creer("/Users/monmac/Pictures/RESULTAT/★ REGROUPEMENT/collection_recup", d) --<-- mettre ici le chemin du dossier de destination repeat with d in dossiersDimages -- boucle qui traite les dossiers d'images set tFiles to do shell script "/usr/bin/find " & (quoted form of d) & " -maxdepth 1 -type f \\! -name '.*'" if tFiles is not "" then repeat with f in (get paragraphs of tFiles) ob's PSD_process((POSIX file f) as string) -- traite le fichier dans Photoshop end repeat my deplace(d) -- déplace le dossier dans le sous dossier "tempo" my renomme() my deplace_images_creer("/Users/monmac/Pictures/RESULTAT/★ REGROUPEMENT/collection_recup", d) --<-- mettre ici le chemin du dossier de destination end if end repeat end action7 -- collection PORTRAIT et PAYSAGE FIN |
|
|
Guest_EricaL**_* |
18 Jul 2011, 14:31
Message
#11
|
Guests |
Bonjour,
Houla ! je suis largué l'action8 de mon ancien fichier je le colle ou ? dans celui que tu m'a remis ? Il fallait le supprimer sinon si j’exécute en double cliquant dessus (enregitrer en application) et que je met une image dans "PHOTOS" rien ne ce passe. Vérifie que l'action de dossier du dossier "PHOTOS" est bien activé. Voici le script au complet. Code property ajout : {}
property sous_dossiers : {} property masterFolder : "" property dossier_a_traiter : "" on idle -- collection Debut set dossier_a_traiter to "/Volumes/Rack-Pro/CANON/★AUTOMATOR/collection/PHOTOS" --**** tell my rechercheFichiers(dossier_a_traiter) to if it is not "" then my action7(it) -- si des éléments sont trouvés, execute la fonction action7 -- cette ligne qui finit par /PHOTOS-PAYSAGES" + les deux lignes suivantes ont été supprimées --****- set dossier_a_traiter to "/Volumes/Rack-Pro/CANON/★AUTOMATOR/collection/PIC" tell my rechercheFichiers(dossier_a_traiter) to if it is not "" then my action9(it) -- si des éléments sont trouvés, execute la fonction action9 -- collection Fin return 30 -- 20 secondes avant la prochaine execution du idle end idle on quit continue quit end quit -- collection PORTRAIT et PAYSAGE DEBUT on action7(tFiles) script ob -- seulement les actions Photoshop on PSD_process(this_path) set tCollection to "collection-paysage" --****+ tell application "Adobe Photoshop CS5" open alias this_path showing dialogs never tell the current document if width < height then set tCollection to "collection-portrait" -- format Portrait--****+ do action "MINI" from tCollection--**** do action "MED" from tCollection--**** do action "MAXI" from tCollection--**** do action "PRM" from tCollection--**** close saving no end tell end tell end PSD_process end script set ajout to {"_mini", "_med", "_maxi", "_prm"} -- selon l'ordre des dossiers (dans la ligne suivante) set sous_dossiers to {"MINI", "MED", "MAXI", "PRM"} set masterFolder to "/Users/monmac/Pictures/RESULTAT" -- le dossier parent des sous dossier "MINI", "MED", "MAXI", "PRM" set dossiersDimages to {} repeat with f in tFiles -- boucle qui ne traite que les fichiers set this_path to (POSIX file f) as string if not my isDownloading(this_path as alias) then -- le fichier ou dossier ne se télécharge pas if ((alias this_path) as string) ends with ":" then -- c'est un dossier set end of dossiersDimages to contents of f -- on met le chemin du dossier dans une liste else ob's PSD_process(this_path) -- traite le fichier dans Photoshop my deplace(f) -- déplace le fichier dans le sous dossier "tempo" end if end if end repeat my renomme() set d to "" my deplace_images_creer("/Users/monmac/Pictures/RESULTAT/★ REGROUPEMENT/collection_recup", d) --<-- mettre ici le chemin du dossier de destination repeat with d in dossiersDimages -- boucle qui traite les dossiers d'images set tFiles to do shell script "/usr/bin/find " & (quoted form of d) & " -maxdepth 1 -type f \\! -name '.*'" if tFiles is not "" then repeat with f in (get paragraphs of tFiles) ob's PSD_process((POSIX file f) as string) -- traite le fichier dans Photoshop end repeat my deplace(d) -- déplace le dossier dans le sous dossier "tempo" my renomme() my deplace_images_creer("/Users/monmac/Pictures/RESULTAT/★ REGROUPEMENT/collection_recup", d) --<-- mettre ici le chemin du dossier de destination end if end repeat end action7 -- collection PORTRAIT et PAYSAGE FIN -- collection PIC DEBUT on action9(tFiles) script ob -- seulement les actions Photoshop on PSD_process(this_path) tell application "Adobe Photoshop CS5" open alias this_path showing dialogs never tell the current document do action "PIC" from "collection-pic-picmax" do action "PICMAX" from "collection-pic-picmax" close saving no end tell end tell end PSD_process end script set ajout to {"_pic", "_picmax"} -- selon l'ordre des dossiers (dans la ligne suivante) set sous_dossiers to {"PIC", "PICMAX"} set masterFolder to "/Users/monmac/Pictures/RESULTAT" -- le dossier parent des sous dossier "PIC", "PICMAX" set dossiersDimages to {} repeat with f in tFiles -- boucle qui ne traite que les fichiers set this_path to (POSIX file f) as string if not my isDownloading(this_path as alias) then -- le fichier ou dossier ne se télécharge pas if ((alias this_path) as string) ends with ":" then -- c'est un dossier set end of dossiersDimages to contents of f -- on met le chemin du dossier dans une liste else ob's PSD_process(this_path) -- traite le fichier dans Photoshop my deplace(f) -- déplace le fichier dans le sous dossier "tempo" end if end if end repeat my renomme() set d to "" my deplace_images_creer("/Users/monmac/Pictures/RESULTAT/★ REGROUPEMENT/collection_recup", d) --<-- mettre ici le chemin du dossier de destination repeat with d in dossiersDimages -- boucle qui traite les dossiers d'images set tFiles to do shell script "/usr/bin/find " & (quoted form of d) & " -maxdepth 1 -type f \\! -name '.*'" if tFiles is not "" then repeat with f in (get paragraphs of tFiles) ob's PSD_process((POSIX file f) as string) -- traite le fichier dans Photoshop end repeat my deplace(d) -- déplace le dossier dans le sous dossier "tempo" my renomme() my deplace_images_creer("/Users/monmac/Pictures/RESULTAT/★ REGROUPEMENT/collection_recup", d) --<-- mettre ici le chemin du dossier de destination end if end repeat end action9 -- collection_rouge PIC FIN on renomme() set n to 1 repeat with ceDossier in sous_dossiers -- chaque nom de dossier de la liste sous_dossiers set t_folder to quoted form of (masterFolder & "/" & ceDossier) do shell script "ajout=" & (quoted form of (item n of ajout)) & " cd " & t_folder & " && /usr/bin/find . -type f -maxdepth 1 \\! -name \"*$ajout.*\" \\! -name \"*$ajout\" \\! -name '.*' -print0 | while read -d $'\\0' f; do nom=${f%.*}; ext=${f##*.}; if [ \"$nom\" = \"\" ]; then /bin/mv -f \"$f\" \"$f$ajout\"; else /bin/mv -f \"$f\" \"$nom$ajout.$ext\"; fi done" set n to n + 1 end repeat end renomme on isDownloading(f) set s to size of (info for f) delay 6 return (size of (info for f)) < s end isDownloading on rechercheFichiers(d) -- recherche fichiers et dossiers set tFiles to do shell script "/usr/bin/find " & (quoted form of d) & " -maxdepth 1 -mindepth 1 \\! -name '.*' \\! -name 'tempo'" if tFiles is not "" then return paragraphs of tFiles return "" end rechercheFichiers on deplace(f) -- déplace le (fichier original ou le dossier contenant les fichiers originaux) dans le sous dossier "tempo" -- si un élément du meme nom existe deja dans le dossier de destination, un nombre sera ajouté au nom set destPath to quoted form of (dossier_a_traiter & "/tempo") do shell script "dest=" & destPath & ";f=" & (quoted form of f) & "; name=${f##*/}; i=\"\" if [[ \"$name\" != *.* ]]; then ext=\"\"; base=\"$name\"; else base=${name%.*}; ext=.${name##*.};fi while [ -e \"$dest/$base$i$ext\" ]; do ((i++)); done; /bin/mv \"$f\" \"$dest/$base$i$ext\"" end deplace on deplace_images_creer(d, dossier) -- déplace les images dans le dossier spécifié -- si un élément du meme nom existe deja dans le dossier spécifié, un nombre sera ajouté au nom if dossier is "" then -- ce sont des images qui ont été déposées set destPath to quoted form of d set thisFolder to (POSIX file d) as string else -- c'est dossier qui a été déposée set r to do shell script "d=" & (quoted form of dossier) & "; nom=${d##*/}; i=\"\" cd " & (quoted form of d) & ";while [ -e \"$nom$i\" ];do ((i++)) done /bin/mkdir \"$nom$i\"; echo \"$nom$i\"" -- création du dossier set destPath to quoted form of (d & "/" & r) set thisFolder to (POSIX file (d & "/" & r)) as string end if repeat with ceDossier in sous_dossiers -- chaque nom de dossier de la liste sous_dossiers set t_folder to quoted form of (masterFolder & "/" & ceDossier) do shell script "dest=" & destPath & " /usr/bin/find " & t_folder & " -type f -maxdepth 1 \\! -name '.*' -print0 | while read -d $'\\0' f; do name=${f##*/}; if [ -e \"$dest/$name\" ];then i=1; if [[ \"$name\" != *.* ]]; then ext=\"\"; base=\"$name\"; else base=${name%.*}; ext=.${name##*.};fi while [ -e \"$dest/$base$i$ext\" ];do ((i++)) done name=\"$base$i$ext\" fi /bin/mv \"$f\" \"$dest/$name\" done" end repeat tell application "Finder" to try -- étiquette verte set label index of document files of folder thisFolder whose name extension is in {"gif", "png"} and (name contains "_mini." or name contains "_pic.") and it's label index is not 6 to 6 end try end deplace_images_creer Ce message a été modifié par EricaL** - 18 Jul 2011, 14:34. |
|
|
18 Jul 2011, 15:08
Message
#12
|
|
Adepte de Macbidouille Groupe : Membres Messages : 109 Inscrit : 11 Jan 2010 Membre no 148 488 |
Oui mais, il n'y à pas besoin d'action de dossier non ? car il s'agit bien d'un script que tu exécute à partir du finder, ce derniers détecte un ajout de fichiers images ou répertoire comportant une/des images et il s’exécute.
C'est ce qui ce passe avec mon script de base. J'ai tout faux je parie Ce message a été modifié par MacMame - 18 Jul 2011, 15:08. |
|
|
18 Jul 2011, 15:24
Message
#13
|
|
Adepte de Macbidouille Groupe : Membres Messages : 109 Inscrit : 11 Jan 2010 Membre no 148 488 |
ah ok merci , j'ai repris ton code au complet et cela fonctionne, je sais pas ce que tu as fait , merci !
Il faut maintenant que je fasse de même pour mes autres collections d'image, soit je regroupe tous sur un seul fichiers script ou je fait plusieurs exécutable pour chaque collection, cela me semble plus facile, non ? la seconde solution me permettrait de les activer seulement si j'en aurait besoin. Le seul inconvénient ce serait peut être un embouteillage si je mettait une image dans plusieurs collections différentes |
|
|
Guest_EricaL**_* |
18 Jul 2011, 15:26
Message
#14
|
Guests |
|
|
|
18 Jul 2011, 15:58
Message
#15
|
|
Adepte de Macbidouille Groupe : Membres Messages : 109 Inscrit : 11 Jan 2010 Membre no 148 488 |
WWAHOO !!, en plus tu es multitâche !!
Merci ! |
|
|
Guest_EricaL**_* |
18 Jul 2011, 20:12
Message
#16
|
Guests |
Bonjour,
Il faut maintenant que je fasse de même pour mes autres collections d'image, soit je regroupe tous sur un seul fichiers script ou je fait plusieurs exécutable pour chaque collection, cela me semble plus facile, non ? la seconde solution me permettrait de les activer seulement si j'en aurait besoin. Le seul inconvénient ce serait peut être un embouteillage si je mettait une image dans plusieurs collections différentes J'aurais besoin de détails pour te donner la meilleure solution. Est-ce que les autres collections d'images seront dans le même dossier source ou dans un autre dossier, ou les deux ? Est-ce que Photoshop est capable d'exécuter simultanément des actions différentes dans deux documents ou il faut attendre que les actions se termine dans le premier document ? EX : tu exécute les actions ""collection-portrait" dans le document "x", tu sélectionnes le document "y", et tu exécutes les actions ""collection-paysage" Est-ce que Photoshop est capable d'exécuter deux droplets en même temps ? EX : tu déposes 10 images sur le droplet "X" et tu déposes 10 images différentes sur le droplet "y", Photoshop alterne les images des droplets ou Photoshop ouvre deux documents à la fois. -- Si oui, est ce que ça fonctionne sans erreur (c'est à dire qu'il ne mélange pas les actions, le fichier d'un droplet ne doit pas être traité avec les actions de l'autre droplet.) -- Si non, esr-ce que le deuxième droplet est exécuté après que le premier se termine ou il n'est jamais lancé. |
|
|
30 Sep 2011, 23:15
Message
#17
|
|
Adepte de Macbidouille Groupe : Membres Messages : 109 Inscrit : 11 Jan 2010 Membre no 148 488 |
Salut ErikaL,
J'avais réussi à faire ce script, le hic , c'est que je n'arrive plus à le refaire, en fait j'ai sauvé le script en application, résultat je n'arrive plus à l'éditer Y'a moyen de le récupérer ?? Car la je suis dégoutté, j'ai repris l'intégralité de ton script et çà ne fonctionne plus..?? je fait exécuter ou je l'enregistre en application , rien ne se passe, l'icon il ne reste même pas dans le dock.... comme c'était le cas avant.... Merci pour ton aide. Ce message a été modifié par MacMame - 1 Oct 2011, 00:12. |
|
|
Guest_EricaL**_* |
1 Oct 2011, 01:10
Message
#18
|
Guests |
J'avais réussi à faire ce script, le hic , c'est que je n'arrive plus à le refaire, en fait j'ai sauvé le script en application, résultat je n'arrive plus à l'éditer Si tu as enregistré ton application avec l'option "Exécutable uniquement", tu ne pourras plus l'éditer et je ne connais personne qui est capable de le décoder.Y'a moyen de le récupérer ?? Est-ce que tu as essayé d'ouvrir le contenu du paquet de l'application et d'ouvrir le script dans le dossier "/Resources/Scripts/" ? Est-ce que tu as changé quelque chose dans ta configuration (disques, système vers Lion ou changement de session) ? Car la je suis dégoutté, j'ai repris l'intégralité de ton script et çà ne fonctionne plus..?? je fait exécuter ou je l'enregistre en application , rien ne se passe, l'icon il ne reste même pas dans le dock.... comme c'était le cas avant.... Est-ce que tu as cochée l'option "Rester en arrière plan", c'est nécessaire pour le on idle ?Merci pour ton aide. Si le copier/coller du script dans le message #11 ne fonctionne pas, il est inutile de restaurer ton (script application) par "Time machine" ou le remplacer par celui d'une sauvegarde. Sinon : il reste à déboguer le script dans l'éditeur : Copie/colle le script du message #11 dans l'éditeur AppleScript. Copie/colle ces lignes avant la ligne on idle Code on run repeat idle -- le return 30 dans le idle ne fonctionnera pas si on execute le script dans l'éditeur delay 30 -- 30 secondes avant la prochaine execution du idle end repeat end run 1- Presse le bouton "Exécuter" 2- Si tu as un message d'erreur, Il suffit de corriger le problème selon le message. 3- Refaire le 1 et le 2 tant qu'il y aura des erreurs. Après que les erreurs seront corrigés, supprime le bloc on run .... end run. Enregistre le script en application avec l'option "Rester en arrière plan" cochée. Ce message a été modifié par EricaL** - 1 Oct 2011, 01:13. |
|
|
1 Oct 2011, 01:28
Message
#19
|
|
Adepte de Macbidouille Groupe : Membres Messages : 109 Inscrit : 11 Jan 2010 Membre no 148 488 |
Ouf ! c'est bon j'ai trouvé l'erreur....
|
|
|
21 Aug 2020, 14:54
Message
#20
|
|
Adepte de Macbidouille Groupe : Membres Messages : 109 Inscrit : 11 Jan 2010 Membre no 148 488 |
Bonjour à tous et toute !
alors, je sais que cela va faire une paire d’années, certains vont dire que ce script est maintenant obsolète, et ils auront raison, depuis que je suis passé sur SIERRA et El Capitaine, les script indique plein de messages d'erreur. "erreur de syntaxe, fin de ligne prévu mais indicateur trouvés". « fin de ligne » ne peut pas se trouver après « propriété ». Du coup, j'ai une question faut, il réécrire ce script ou y a t'il moyen de le "convertir" ?? Merci encore A EricaL pour son superbe script ! Ce message a été modifié par MacMame - 21 Aug 2020, 15:01. |
|
|
22 Aug 2020, 08:05
Message
#21
|
|
Macbidouilleur de bronze ! Groupe : Membres Messages : 264 Inscrit : 7 Dec 2013 Lieu : Ile de France Membre no 188 169 |
Bonjour,
Effectivement, depuis 9 ans des chemins d'accès et des autorisations ont été changés. Pour être franc, le script d'EricaL sur la partie shell dépasse un peu mes compétences en shell mais avec mes connaissances limitées en shell et en reprenant son action de dossier, j'ai repris une fonction que j'ai écrite il y a longtemps (qui fonctionne toujours) et permet de connaître l'orientation d'une image. Ma fonction peut renvoyer 0, 1, ou 2. Le 0 correspond simplement au fait que le fichier à traité n'est pas une image..donc n'est pas à transférer. Pour l'action de dossier, j'ai simplement repris la partie d'EricaL: merci à lui. CODE property dossier_portrait : quoted form of "déposerLeDossierIci" property dossier_paysage : quoted form of "déposerLeDossierIci" on adding folder items to this_folder after receiving added_items repeat with aItem in added_items set UnixItem to quoted form of (POSIX path of aItem) set Ftype to ImagePortrait(UnixItem) if Ftype > 0 then if Ftype = 1 then set Dest to dossier_portrait else set Dest to dossier_paysage end if try do shell script "mv " & UnixItem & " " & Dest end try end if end repeat end adding folder items to on ImagePortrait(localUpath) -- renvoie 0 ce n'est pas une image, 1 si mode portrait et 2 si mode paysage -- test si le type de fichier contient image if not ((do shell script "file -b " & localUpath) contains "image") then return 0 -- lit les dimensions de l'image set Dim to do shell script "sips -g pixelWidth -g pixelHeight " & localUpath & " | awk ' /pixel/ { print $2 }'" try if ((paragraph 1 of Dim) as integer) > ((paragraph 2 of Dim) as integer) then return 2 -- largeur > hauteur donc paysage else return 1 -- largeur <= hauteur donc portrait end if on error return 0 end try end ImagePortrait Tu commences par mettre tes dossiers portrait et paysage dans les 2 variables déclarées en lignes 1 et 2: il suffit de faire un glissé/déposé. Tu enregistres ce script dans ton dossier des actions de dossier : bibliothèque/scripts/Folder Actions Scripts Tu paramètres le dossier dans lequel tu vas ajouter les images comme étant lié à cette action de dossier. Une fois cela fait, à chaque fois que tu déposeras un ou plusieurs fichiers dans ce dossier, ils seront déplacés dans le dossier adéquat,...sauf si ce ne sont pas des images ! Cordialement -------------------- iiMac 24 M1 16Go/1To 13.5.1
iMac 27 i5 3,1GHz 8Go/1To 10.11.6 / 10.6.8 iMac 20 C.Duo 2,6Ghz 8Go/350Go 10.6.8 / 10.11 Mini C.Duo 2,0Ghz 2Go/500Go 10.6.8 |
|
|
Nous sommes le : 23rd April 2024 - 22:31 |