IPB

Bienvenue invité ( Connexion | Inscription )

 
Reply to this topicStart new topic
> Script pilotant des scripts photoshop [Résolu], scripts PS lancé selon le nom de l'image
Options
Speed Moock
posté 4 Sep 2016, 17:03
Message #1


Adepte de Macbidouille
*

Groupe : Membres
Messages : 42
Inscrit : 30 Aug 2016
Membre no 199 619



Bonjour,

J'ai des images classées dans des dossiers dont le nom est structuré, situé sur un serveur distant.
Exemple : 501__F5_SP3_SP3_P2
Les caractères F5, SP3 désignent des scripts photoshop nommés F5, SP3 etc. (ces scripts appliquent des recadrages de valeurs différentes sur les images)

Les images de ces dossiers ont dans leur nom un index ZP_1, ZP_2, ZP_3 etc.
Le script doit appliquer un script photoshop aux images comme suit :
- image contenant l'index ZP_1 => script F5 (premier nom de script photoshop trouvé dans le nom de dossier)
- image contenant l'index ZP_2 => script SP3 (second nom de script photoshop trouvé dans le nom de dossier).
etc.

Il y a 19 scripts photoshop nommés P1, P2, P3, P4, P5, P6, P7, F1, F2, F3, F4, F5, F6, F7, F8, SP1, SP2, SP3 et SP4
Mes dossiers ont toujours une structure de nom comme suit :
3 chiffres
double underscore
noms de scripts PS séparés par un underscore.

Mes images ont toujours une structure de nom comme suit :
Lettre G
Underscore
8 chiffres
underscore
2 ou 3 chiffres
underscore
ZP
underscore
indice (valeur 1 à 8)
6 chiffres
exemple : G_89279608_60_ZP_5_557298.jpg
Ces noms sont uniques et il n'y a pas de doublons dans les dossiers.


Dans les noms de dossiers ont peut retrouver plusieurs fois les mêmes scripts PS. Par exemple dans l'exemple 501__F5_SP3_SP3_P2 les images d'index ZP_2 et ZP_3 sont traitées avec le script SP3.
Règle de gestion : s'il y a des images d'indice supérieur au nombre de scripts écrits dans le nom de du dossier, le scrip appliqué par défaut est SP3.
Pour reprendre l'exemple 501__F5_SP3_SP3_P2, si le dossier contient une image d'indice ZP_5 on lui appliquera le script SP3

Par simplicité d'utilisation le script doit pouvoir tourner sur une série de dossiers que j'aurais sélectionnés.

Voilà, merci pour votre aide et à votre dispo pour toute question.

Speed Moock


Go to the top of the page
 
+Quote Post
PBell
posté 5 Sep 2016, 09:10
Message #2


Adepte de Macbidouille
*

Groupe : Membres
Messages : 183
Inscrit : 7 Dec 2013
Lieu : Ile de France
Membre no 188 169



Bonjour,
Je vais d'abord essayer de résumer ton besoin (la reformulation est le plus simple moyen pour toi de vérifier ce que j'ai compris de tes explications !).

Le besoin :
Tu as des dossiers avec des noms de la forme: xxxx__S1_S2_S3_S4 (jusqu'à S8). Les S1,S2,...sont des noms de scripts Photoshop.

Dans chaque dossier, tu as des images dont le nom est de la forme: G_xxxxx_yyy_ZP_s_zzzzz.jpg
Dans ce nom d'image, le s désigne un indice de 1 à 8 qui est le numéro du script S1 à S8 issu du dossier. C'est ce script qui doit être utilisé pour l'image.
Si l'indice ne correspond à aucun script dans le nom du dossier, alors on applique le script SP3.

Exemple:
Dossier : xxxx__P6_F5_P1
- fichier image G_xxxx_yyy_ZP_2_zzzz.JPG -> indice 2 on applique le script N°2 du dossier -> script "F5"
- fichier image G_xxxx_yyy_ZP_1_zzzz.JPG -> indice 1 on applique le script N°1 du dossier -> script "P6"
- fichier image G_xxxx_yyy_ZP_4_zzzz.JPG -> indice 4 qui n'existe pas dans le dossier -> par défaut script "SP3"

Je suppose que cette reformulation est conforme à ton besoin pour la suite.


Le concept du programme
Le programme doit sélectionner un ou plusieurs dossiers.
Pour chaque dossier :
- il faut construire une liste des 8 scripts avec, par défaut, les valeurs "SP3".
- il faut extraire du nom du dossier tous les S1,S2,...et les mettre dans la liste, dans l'ordre.
- A ce stage, la liste des scripts associés au dossier exemple (xxxx__P6_F5_P1) sera P6,F5,P1,SP3,SP3,SP3,SP3,SP3
- il faut prendre tous les fichiers de ce dossier
- prendre leur nom et vérifier que ce nom a bien un format adéquat, puis en extraire l'indice (situé entre le 4ème et le 5ème "_").
- récupérer le script de même indice dans la liste des scripts du dossier. Pour reprendre l'exemple, l'indice 2 donnera le script F5.
- appliquer le script Photoshop ainsi déterminé au fichier, c'est à dire ouvrir l'image, appliquer le script, sauvegarder les changements et fermer l'image.


Le script
Le script ci-dessous correspond à cette description. Il comporte, comme d'habitude, des commentaires pour te permettre de mieux le comprendre.
Il fait appel à une sous-routine "PShopScript" qui applique le script SScript au fichier SFichier.
J'ai testé l'ouverture, l'enregistrement et la fermeture de l'image avec Photoshop.

La sous routine PShopScript
Dans cette sous routine, j'ai mis en commentaire la ligne "do action..." car je ne peux pas la tester:
1) je ne suis pas expert en scripts Photoshop !
2) ma version the Photoshop est sûrement plus ancienne que la tienne (il faut d'ailleurs que tu changes "Photoshop CS3" avec ta version)
3) il se peut que ta version Photoshop ne gère pas les actions comme la mienne
4) tu dois mettre le nom de ton dossier d'action Photoshop
Pour tester le reste, j'ai mis dans cette routine un display dialog après l'ouverture de l'image dans Photoshop ! il faudra supprimer ce display dialog !

Excepté cette sub-routine, le reste du script a été testé et il fonctionne.
Il accepte la sélection multiple de dossiers qui seront traités un par un.
Pour le nom du dossier, il doit au moins contenir 1 script (xxx__S1) sinon il y a une erreur (je n'ai pas géré cette erreur qui me semble peu probable).
Il vérifie que les scripts dans le nom du dossier existent, sinon, il met SP3.
Pour le nom des fichiers, il vérifie que le format de nom est bon et que l'indice situé après le 4ème "_" est entre 1 et 8. Sinon, le fichier n'est pas traité.

Voilà, je pense avoir été clair :

CODE
-- liste des scripts possibles pour vérification
set PSScripts to {"P1", "P2", "P3", "P4", "P5", "P6", "P7", "F1", "F2", "F3", "F4", "F5", "F6", "F7", "F8", "SP1", "SP2", "SP3", "SP4"}

set mesDossiers to choose folder with prompt "Sélectionner le dossier" with multiple selections allowed
repeat with unDossier in mesDossiers -- boucle sur chaque dossier sélectionné
    tell application "Finder" to set NDos to name of unDossier
    set AppleScript's text item delimiters to {"_"}
    set DScript to {"SP3", "SP3", "SP3", "SP3", "SP3", "SP3", "SP3", "SP3"} -- par défaut les 8 scripts sont SP3
    repeat with I from 3 to count of text item of NDos -- text item 1 = xxx, text item 2 est vide
        if text item I of NDos is in PSScripts then -- il faut que le script existe
            set item (I - 2) of DScript to text item I of NDos
        end if
    end repeat
    -- A ce stade, DSCript contient les scripts à lancer pour chaque indice de 1 à 8    
    tell application "Finder" to set MesImages to name of every item of folder unDossier
    repeat with uneImage in MesImages -- boucle sur chaque image du dossier
        set Indice to 0
        try
            set Indice to text item 5 of uneImage -- recherche de l'indice XX dans le format G_yyyyyyy_yy_ZP_XX_yyyyy.jpg
        end try
        if (Indice > 0) and (Indice < 9) then
            PShopScript(item Indice of DScript, (unDossier as string) & uneImage) -- applique le script
        end if -- test sur la validité de l'indice
    end repeat -- boucle sur l'image suivante du dossier
end repeat -- boucle sur le dossier suivant

return


on PShopScript(SScript, SFichier)
    -- applique le script Photoshop SScript au fichier SFichier
    log "Pshop=" & SScript & return & SFichier
    tell application "Adobe Photoshop CS3" -- à corriger avec ta version
        open SFichier
        -- do action SScript from "ton_dossier_d'actions"
        display dialog "process en cours"
        save current document
        close current document
    end tell
end PShopScript


Cordialement


--------------------
iMac 27 i7 2,8GHz 8Go/1To 10.6.8 /10.10 / 10.11
iMac 20 C.Duo 2,6Ghz 8Go/350Go 10.6.8 / 10.11
Mini C.Duo 2,0Ghz 2Go/500Go 10.6.8
Go to the top of the page
 
+Quote Post
Speed Moock
posté 5 Sep 2016, 11:33
Message #3


Adepte de Macbidouille
*

Groupe : Membres
Messages : 42
Inscrit : 30 Aug 2016
Membre no 199 619



Bonjour PBell

Parfait merci.
Je vais tester ça d'ici ce soir mais le besoin a bien été reformulé.

Merci d'avance,
Go to the top of the page
 
+Quote Post
Speed Moock
posté 5 Sep 2016, 21:47
Message #4


Adepte de Macbidouille
*

Groupe : Membres
Messages : 42
Inscrit : 30 Aug 2016
Membre no 199 619



Bonjour,

Alors j'ai deux soucis.
1er : le premier script PS lancé coince. Une fois celui passé (on fait ignorer les msg d'erreur) les autres tournent jusqu'au message d'erreur suivant :
2eme soucis : voir message d'erreur.

Je vous rajoute en PJ dans un second post un dossier test ainsi que mes scripts PS pour vous aider à tester.

Merci.Fichier joint  Capture_d___e__cran_2016_09_05_a___22.33.43.png ( 48.31 Ko ) Nombre de téléchargements : 10





et voici le dossier en PJ
Fichier(s) joint(s)
Fichier joint  500__F3_F5_SP3_P1.zip ( 911.23 Ko ) Nombre de téléchargements : 0
 
Go to the top of the page
 
+Quote Post
PBell
posté 5 Sep 2016, 21:57
Message #5


Adepte de Macbidouille
*

Groupe : Membres
Messages : 183
Inscrit : 7 Dec 2013
Lieu : Ile de France
Membre no 188 169



Bonsoir,
C'est bien ce que je craignais : le problème vient de la sous routine qui traite le fichier dans Photoshop.

Apparemment l'ouverture du fichier se fait bien, peut être même le script Photoshop.
L'erreur vient du "save". Il me semble avoir lu que sur les version suivantes de Photoshop (CS4, 5, 6..) les syntaxes d'ouverture et de fermeture ont changées par rapport à la CS3 que j'ai.

Essaye de changer le "save current document" par un "save SFichier"...?
Sans doute le même problème aussi pour le "close" qui suit.

Je ne peux pas t'aider plus sur cette partie car je n'ai pas Photoshop autre que le vieux CS3.
Provisoirement, tu peux mettre une trace plus explicite que "processus en cours" par exemple :
CODE
Display Dialog "fichier:" & SFichier & return & "Script:" & Script

Cela te confirmera que le reste du script fonctionne en affichant l'image en cours et son script.

Quant au fait que le premier script ne passe pas et les suivants oui, essaye d'ouvrir l'application Photoshop sans image AVANT de lancer le script.
Tiens moi informé de tes essais.
A+


--------------------
iMac 27 i7 2,8GHz 8Go/1To 10.6.8 /10.10 / 10.11
iMac 20 C.Duo 2,6Ghz 8Go/350Go 10.6.8 / 10.11
Mini C.Duo 2,0Ghz 2Go/500Go 10.6.8
Go to the top of the page
 
+Quote Post
Speed Moock
posté 5 Sep 2016, 22:11
Message #6


Adepte de Macbidouille
*

Groupe : Membres
Messages : 42
Inscrit : 30 Aug 2016
Membre no 199 619



Salut,

je viens de réaliser un truc : mes scripts PS sauvent et ferment le fichier... donc ton script cherche à sauver & fermer quelquechose qui l'est déjà.

J'essaye en supprimant la ligne save.

Bon.. un peu mieux mais je bloque toujours du coup sur la première instruction de mon script PS (voire copie écran).

Comme si le script PS se lançait mais sans fichier ouvert....

As-tu moyen de tester ?



Suite de mes essais :

Si je pré-ouvre dans PS tous les fichiers du dossier à traiter ça fonctionne.

Je regarde dans ton script où se fait l'ouverture...
Fichier(s) joint(s)
Fichier joint  Capture_d___e__cran_2016_09_05_a___23.06.09.png ( 48.69 Ko ) Nombre de téléchargements : 4
 
Go to the top of the page
 
+Quote Post
Speed Moock
posté 5 Sep 2016, 22:29
Message #7


Adepte de Macbidouille
*

Groupe : Membres
Messages : 42
Inscrit : 30 Aug 2016
Membre no 199 619



Bon et bien je vois bien dans la sous routine que le fichier Sfichier s'ouvre.
J'ai essayé de rajouter un open current document avant le lancement de la sous routine...

Mais ça fonctionne pas mieux.
Go to the top of the page
 
+Quote Post
PBell
posté 6 Sep 2016, 06:28
Message #8


Adepte de Macbidouille
*

Groupe : Membres
Messages : 183
Inscrit : 7 Dec 2013
Lieu : Ile de France
Membre no 188 169



Bonjour,
Effectivement, si tes scripts Photoshop enregistrent et ferment les fichiers, 2 instructions sont à retirer dans la sous Routine. : le save et le close.
Quant à l'erreur que tu as, elle est peut être due au fait que le "do action" se fait alors que Photoshop n'a pas encore fini d'ouvrir l'image.
Pour tracer l'erreur, j'ai modifié la sous routine en ajoutant des traces et surtout un délai d'attente.
J'ai aussi ajouté un activate juste avant le script Photoshop pour forcer l'application a être au premier plan avant le script PS.

Remplace juste la sous routine par celle ci-dessous.

CODE
on PShopScript(SScript, SFichier)
    -- applique le script Photoshop SScript au fichier SFichier
    display dialog "Script=" & SScript & return & "sur le fichier " & SFichier -- affiche le nom du script et celui du fichier
    tell application "Adobe Photoshop CS3" -- à corriger avec ta version
        open SFichier
        delay 2 -- attente de 2 secondes
        display dialog "le fichier doit être ouvert" -- vérifier avant de cliquer OK que l'image est bien ouverte
        activate
        do action SScript from "DROPLET RESIZE" -- le script sauvegarde et ferme l'image après traitement
        display dialog "Script exécuté !"
    end tell
end PShopScript


Fais le test sur un dossier avec seulement 2 ou 3 images car tu vas devoir cliquer OK 3 fois par image !

Tu dois avoir un dialogue avec le nom du script et celui de l'image : Cela te permet de bien vérifier que tout le reste du script fait l'association correcte script/image.
Ensuite il y a un délai de 2 secondes qui devrait être largement suffisant pour que Photoshop finisse d'ouvrir l'image.
Puis, un dialogue indiquant que le fichier doit être ouvert. A ce stade, le script Photoshop n'a pas encore démarré. Vérifie bien que l'image est effectivement ouverte à l'écran.
Enfin, un dialogue indiquant que le script PS est exécuté.

Ces 3 dialogues seront visibles pour chaque image. Tu dois cliquer OK à chaque fois et surtout bien mémorisé ceux que tu as vu avant que ça plante (si ça plante !).
Avec cette trace, on pourra trouver d'où vient le problème.

Pour m'aider, j'ai quelques questions :
- Quelle version de Photoshop as tu ?
- Quelle machine (type de mac, processeur, mémoire et version OS) ?

A+


--------------------
iMac 27 i7 2,8GHz 8Go/1To 10.6.8 /10.10 / 10.11
iMac 20 C.Duo 2,6Ghz 8Go/350Go 10.6.8 / 10.11
Mini C.Duo 2,0Ghz 2Go/500Go 10.6.8
Go to the top of the page
 
+Quote Post
Speed Moock
posté 6 Sep 2016, 23:08
Message #9


Adepte de Macbidouille
*

Groupe : Membres
Messages : 42
Inscrit : 30 Aug 2016
Membre no 199 619



Salut,

Désolé journée difficile et pas eu le temps de tester avant ce soir.

Donc résultat : msg d'erreur "l'image doit être ouverte" avant chaque image. Le problème est donc bien là, l'image n'est pas ouverte au moment où le script PS se lance.

Je suis sur un macbook pro sous OS 10.6.8 en version PS CS5.1

Merci d'avance,


Fichier(s) joint(s)
Fichier joint  Capture_d___e__cran_2016_09_07_a___00.05.23.png ( 36.74 Ko ) Nombre de téléchargements : 4
 
Go to the top of the page
 
+Quote Post
PBell
posté 7 Sep 2016, 06:31
Message #10


Adepte de Macbidouille
*

Groupe : Membres
Messages : 183
Inscrit : 7 Dec 2013
Lieu : Ile de France
Membre no 188 169



Bonjour,
Tu n'as pas précisé si, lors du lancement, tu avais bien le dialogue affichant le script et le nom du fichier ("Script=xxx sur le fichier yyyyy") .
Est-ce bien le cas ? merci de confirmer.

Si oui, l'erreur que tu indiques se produit-elle avant ou après le second dialogue ("le fichier doit être ouvert") ?

Il est important que, lorsque je mets des traces, tu m'indiques précisément celles que tu vois et celles que tu ne vois pas. Sinon, je ne peux t'aider !

Faute de ses informations, je vais supposer que c'est la commande Open qui ne marche pas sur la CS5 comme sur la CS3. Pour tester cela, voici le petit script ci-dessous que tu dois mettre dans un nouveau script, et qui teste juste l'ouverture d'une image sur Photoshop : Pense à corriger "CS3" and "CS5" !!

CODE
set F to choose file "sélection d'une image"
set SF to F as string

-- test 1
display dialog "test 1"
OpenPS(F)

-- test 2
display dialog "test 2"
OpenPS(SF)


on OpenPS(L)
    tell application "Adobe Photoshop CS3" -- à corriger avec ta version
        open L
        delay 2 -- attente de 2 secondes
        display dialog "le fichier doit être ouvert" -- vérifier avant de cliquer OK que l'image est bien ouverte
    end tell
end OpenPS


Il y a 2 lignes OpenPS, l'une avec le paramètre F, et l'autre avec SF. Lance ce script qui te demande de choisir une image (elle ne sera pas modifiée, pas de crainte).
Tu dois voir le dialogue "test 1", puis l'image doit s'ouvrir.
Si tu as une erreur, c'est que le premier "OpenPS(F)" ne fonctionne pas chez toi. Si tu n'as pas d'erreur, vérifie que l'image s'ouvre bien dans Photoshop. Tu auras alors le dialogue "test 2" et sans doute alors une erreur. Confirme moi.

Si, par contre, juste après l'affichage "test 1", tu as une erreur et que l'image ne s'est pas ouverte, corrige le script en supprimant la ligne "OpenPS(F)" et relance le script.
Tu devras alors avoir un dialogue "test1", puis "test2" et cette fois l'image doit s'ouvrir.

Sur la version CS3 que j'ai, c'est seulement le test 2 qui fonctionne et pas le 1. Cela signifie que la commande "open" de Photoshop CS3 a besoin du fichier en string et non pas de son alias. Mais il se peut que la version CS5 demande désormais l'alias et pas le string.

Plus tu sera précis dans ta réponse, plus je pourrai t'aider.

A+


--------------------
iMac 27 i7 2,8GHz 8Go/1To 10.6.8 /10.10 / 10.11
iMac 20 C.Duo 2,6Ghz 8Go/350Go 10.6.8 / 10.11
Mini C.Duo 2,0Ghz 2Go/500Go 10.6.8
Go to the top of the page
 
+Quote Post
Zeltron54
posté 7 Sep 2016, 09:01
Message #11


Adepte de Macbidouille
*

Groupe : Membres
Messages : 115
Inscrit : 15 Mar 2008
Lieu : Lorraine
Membre no 110 156



Bonjour,

Dans la version CS5 et CS6 pour ouvrir un fichier la commande est : open file "Chemin du fichier en string"
open ouvre le logiciel mais pas le fichier.


--------------------
Imac 27 I7 Fusion drive fin 2013 Ram 8Go Mac OS X (10.13.6)
MacBook Pro 15 pouces mi-2012 8Go Ram Mac OS X (10.13.6)
Go to the top of the page
 
+Quote Post
PBell
posté 7 Sep 2016, 17:28
Message #12


Adepte de Macbidouille
*

Groupe : Membres
Messages : 183
Inscrit : 7 Dec 2013
Lieu : Ile de France
Membre no 188 169



Merci Zeltron54 !

@Speed Moock : il faut donc ajouter le mot "file" entre le "Open" et le "SFichier" dans le script complet.

Compte tenu de l'aide de Zeltron54, le test avec le petit script envoyé ce matin n'est plus nécessaire.


--------------------
iMac 27 i7 2,8GHz 8Go/1To 10.6.8 /10.10 / 10.11
iMac 20 C.Duo 2,6Ghz 8Go/350Go 10.6.8 / 10.11
Mini C.Duo 2,0Ghz 2Go/500Go 10.6.8
Go to the top of the page
 
+Quote Post
Speed Moock
posté 7 Sep 2016, 21:52
Message #13


Adepte de Macbidouille
*

Groupe : Membres
Messages : 42
Inscrit : 30 Aug 2016
Membre no 199 619



Bonsoir,

Avec la précision apportée par Zeltron ça fonctionne à merveille wink.gif))))

Désolé PBell pour ne pas avoir donné assez de détails, j'y songerai à l'avenir.

Merci Messieurs ! Je rajoute 2 unités à mon ardoise à bière.

A bientôt
Go to the top of the page
 
+Quote Post
calotype
posté 12 Dec 2016, 19:03
Message #14


Adepte de Macbidouille
*

Groupe : Membres
Messages : 139
Inscrit : 6 Oct 2012
Membre no 179 488



Bonjour,

Je viens de tomber sur ce post et il m'intéresse.
J'utilise moi aussi des scripts photoshops pour des lots d'images.
Cependant j'aimerais automatiser certaines taches en amont de l'utilisation des scripts.

Ma question principale est, est-il possible de savoir quand l'application d'un script est terminé ? Je ne parle pas du script en lui même mais l'application du script sur le lot d'image.

Pour plus de détail voila comment je procède actuellement:
En fait j'ai un dossier avec des images de références (brutes), je duplique ce dossier deux fois et applique un script1 à la première copie et une fois que c'est fini j'applique un script2 à la deuxième copie.
J'aimerais automatiser tout cela. Mais je pense que le premier point clé à résoudre est celui cité plus haut. Car on ne peut pas lancer deux scripts photoshop en même temps.
Voilà !

Si mon problème est simple à résoudre, j'ai aussi une autre étape importante à ajouter, c'est de rajouter un lettre à la fin de chaque fichier dont j'ai appliqué le script.( je n'ai pas trouvé comment inclure ce besoin dans le script photoshop lui même). Actuellement j'utilise un soft de renommage par lot mais cela devient pompeux malgré ça très grande aide.

Info technique:
- Photoshop CS6
- Maverick
- Les scripts sont sous forme de droplets enregistrés dans un dossier à la racine du disque pour aller les chercher facilement.
( au passage autre demande accessoire: avant, sous snow léopard, mes droplets étaient proposés automatiquement dans la fenêtre qui apparait en fesant clique droit sur un ficher, puis "ouvrir avec...".Ils apparaissaient alors en dessous des applications proposées pour ouvrir le fichier. C'était super pratique. Si vous savez comment rétabllir ceci je suis preneur)

En vous remerçiant !


Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 utilisateur(s) sur ce sujet (1 invité(s) et 0 utilisateur(s) anonyme(s))
0 membre(s) :

 



Nous sommes le : 19th August 2018 - 22:49