Version imprimable du sujet
Forums MacBidouille _ Technologies Apple _ Trier des photos Portraits et Paysages ?
Écrit par : MacMame 7 Jul 2011, 16:55
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.
Écrit par : EricaL** 7 Jul 2011, 20:12
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
""
Écrit par : EricaL** 8 Jul 2011, 01:32
Bonjour,
Citation (MacMame @ 7 Jul 2011, 16:39)
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.
Écrit par : MacMame 8 Jul 2011, 12:20
Citation (EricaL** @ 8 Jul 2011, 01:32)
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..
Écrit par : EricaL** 8 Jul 2011, 15:33
Bonjour,
Citation (MacMame @ 8 Jul 2011, 07:20)
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 d
o 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.
Écrit par : MacMame 12 Jul 2011, 15:31
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.
Écrit par : MacMame 12 Jul 2011, 20:53
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
Écrit par : EricaL** 13 Jul 2011, 03:36
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 action8Le reste du script n'est pas modifié.
Écrit par : MacMame 18 Jul 2011, 14:01
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
Écrit par : EricaL** 18 Jul 2011, 14:31
Bonjour,
Citation (MacMame @ 18 Jul 2011, 09:01)
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
Citation (MacMame @ 18 Jul 2011, 09:01)
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
Écrit par : MacMame 18 Jul 2011, 15:08
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
Écrit par : MacMame 18 Jul 2011, 15:24
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
Écrit par : EricaL** 18 Jul 2011, 15:26
Citation (MacMame @ 18 Jul 2011, 10:08)
Oui mais, il n'y à pas besoin d'action de dossier non ?
Je me suis mêlé avec d'autres sujets
de ce matin, oui, c'est bien un script
Application qu'on lance dans le
Finder
Écrit par : MacMame 18 Jul 2011, 15:58
WWAHOO !!, en plus tu es multitâche !!
Merci !
Écrit par : EricaL** 18 Jul 2011, 20:12
Bonjour,
Citation (MacMame @ 18 Jul 2011, 10:24)
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é.
Écrit par : MacMame 30 Sep 2011, 23:15
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.
Écrit par : EricaL** 1 Oct 2011, 01:10
Citation (MacMame @ 30 Sep 2011, 18:15)
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 ??
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.
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) ?
Citation (MacMame @ 30 Sep 2011, 18:15)
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.
Est-ce que tu as cochée l'option "
Rester en arrière plan", c'est nécessaire pour le
on idle ?
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 idleCode
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.
Écrit par : MacMame 1 Oct 2011, 01:28
Ouf ! c'est bon j'ai trouvé l'erreur....
Écrit par : MacMame 21 Aug 2020, 14:54
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 !
Écrit par : PBell 22 Aug 2020, 08:05
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
Propulsé par Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)