Sujet: Initiation à la programmation des scripts sous Photoshop

Modérateur: Modérateurs

Poster une réponse

Initiation à la programmation des scripts sous Photoshop

par Dormeur74 » Jeudi 18 Juillet 2013 9:43

Le tutoriel qui va suivre concerne Photoshop CS5. Le principe est le même depuis CS, mais le compilateur de CS5 n'est pas le même que celui de CS, si bien qu'un script écrit sous CS peut très bien ne plus fonctionner sous CS5.

Dans les traductions successives de Photoshop, il y a toujours eu une ambiguïté de taille entre les Actions et les Scripts. Si vous cliquez, dans la barre des menus sur Fichiervous verrez le sous-menu Scripts ; il s'agit de codes écrits dans un langage de scripts (AppleScript, VBScript ou JavaScript), alors que si vous allez dans le menu Fenêtre, vous verrez un sous-menu Scripts qui lui est destiné à mémoriser dans un fichier (au format .ATN) une séquence d'actions (macro-commande). Les deux n'ont strictement rien à voir.
Nous allons, dans ce tutoriel, nous intéresser aux scripts, en particulier aux scripts écrits sous Javascripts. Pourquoi Javascript ? Parce qu'AppleScript ne fonctionne que sur une plateforme Mac, VBScript sur une plateforme Windows et Javascript sur les deux.

Nous allons écrire un script au format JavaScript, sans rien connaître de ce langage ; ce script va nous permettre de renforcer une image JPEG d'un Nikon D3 (2832x4256 pixels) en utilisant la technique du filtre passe-haut.

1- Mise en place du plug-in ScripListener.8li
Sous CS5 en version GB, ce plug-in se trouve dans le dossier C:\Program Files\Adobe\Adobe Photoshop CS5\Scripting\Utilities. Copiez-le dans le dossier C:\Program Files\Adobe\Adobe Photoshop CS5\Plug-ins\Automate

2- Mise en place du logiciel ExtendScript ToolKit.exe
Créez un raccourci sur votre bureau avec cet exécutable. Dans la version GB, il se trouve en C:\Program Files\Adobe\Adobe Utilities - CS5\ExtendScript Toolkit CS5\ExtendScript Toolkit.exe. Si ce chemin vous semble barbare, effectuez une recherche sur le fichier ExtendScript Toolkit.exe.

Dès que PhotoShop aura été lancé, contrairement aux Actions, tout ce que vous ferez sous Photoshop sera désormais enregistré de façon séquentielle dans un fichier nommé ScriptingListener.Log. Ce fichier se trouvera sur votre bureau sous CS5 et à la racine de votre disque dur sous CS2. Contrairement à l'enregistreur d'actions (macro-commandes), le ScriptingListener enregistre tout, y-compris la sélection d'un outil.

Test :
1) On charge une photo sous Photoshop CS5, 2) on clique sur l'outil de Sélection, 3) puis sur la pipette et 4) on prélève la couleur d'un pixel dans la photo. Si on ouvre le fichier ScriptingListener.Log qui se trouve sur le bureau à l'aide de NotePad++ (par exemple), on doit trouver les 4 groupes d'instructions suivants :

1) Chargement de la photo
Code: Tout sélectionner
// =======================================================
var idOpn = charIDToTypeID( "Opn " );
    var desc13 = new ActionDescriptor();
    var idnull = charIDToTypeID( "null" );
    desc13.putPath( idnull, new File( "M:\\Photo\\Salon auto\\__poubelle\\_DSC2840.JPG" ) );
executeAction( idOpn, desc13, DialogModes.NO );


2) Choix de l'outil "Sélection"
Code: Tout sélectionner
// =======================================================
var idslct = charIDToTypeID( "slct" );
    var desc14 = new ActionDescriptor();
    var idnull = charIDToTypeID( "null" );
        var ref5 = new ActionReference();
        var idmarqueeRectTool = stringIDToTypeID( "marqueeRectTool" );
        ref5.putClass( idmarqueeRectTool );
    desc14.putReference( idnull, ref5 );
    var iddontRecord = stringIDToTypeID( "dontRecord" );
    desc14.putBoolean( iddontRecord, true );
    var idforceNotify = stringIDToTypeID( "forceNotify" );
    desc14.putBoolean( idforceNotify, true );
executeAction( idslct, desc14, DialogModes.NO );


3- Sélection de l'outil "Pipette"
Code: Tout sélectionner
// =======================================================
var idslct = charIDToTypeID( "slct" );
    var desc15 = new ActionDescriptor();
    var idnull = charIDToTypeID( "null" );
        var ref6 = new ActionReference();
        var ideyedropperTool = stringIDToTypeID( "eyedropperTool" );
        ref6.putClass( ideyedropperTool );
    desc15.putReference( idnull, ref6 );
    var iddontRecord = stringIDToTypeID( "dontRecord" );
    desc15.putBoolean( iddontRecord, true );
    var idforceNotify = stringIDToTypeID( "forceNotify" );
    desc15.putBoolean( idforceNotify, true );
executeAction( idslct, desc15, DialogModes.NO );


4- Prélèvement d'un pixel dans l'image
Code: Tout sélectionner
// =======================================================
var idsetd = charIDToTypeID( "setd" );
    var desc16 = new ActionDescriptor();
    var idnull = charIDToTypeID( "null" );
        var ref7 = new ActionReference();
        var idClr = charIDToTypeID( "Clr " );
        var idFrgC = charIDToTypeID( "FrgC" );
        ref7.putProperty( idClr, idFrgC );
    desc16.putReference( idnull, ref7 );
    var idT = charIDToTypeID( "T   " );
        var desc17 = new ActionDescriptor();
        var idRd = charIDToTypeID( "Rd  " );
        desc17.putDouble( idRd, 26.000000 );
        var idGrn = charIDToTypeID( "Grn " );
        desc17.putDouble( idGrn, 25.003891 );
        var idBl = charIDToTypeID( "Bl  " );
        desc17.putDouble( idBl, 30.000000 );
    var idRGBC = charIDToTypeID( "RGBC" );
    desc16.putObject( idT, idRGBC, desc17 );
executeAction( idsetd, desc16, DialogModes.NO );


Il conviendra donc de vider systématiquement ce fichier Log avant de se lancer dans la réalisation d'un script.

3- Votre premier script
- chargez une photo sous Photoshop
- affichez la fenêtre des calques si elle n'est pas visible sur votre espace de travail (Fenêtre...Calques...ou F7)
- videz de son contenu le fichier ScriptingListener.Log qui se trouve sur votre bureau et sauvegardez-le
- dupliquez le calque d'arrière-plan en le faisant glisser sur l'outil "Créer un calque" (à côté de la poubelle dans la fenêtre des calques)
- appelez la fonction Filtre...Divers...Passe-haut...
- appliquez un rayon de 3 pixels
- choisissez lumière vive dans les options de fusion
- aplatissez l'image (Calque...Aplatir l'image)
Votre script est terminé et votre fichier ScriptingListener.Log doit contenir les instructions suivantes :

Code: Tout sélectionner
// =======================================================
var idDplc = charIDToTypeID( "Dplc" );
    var desc23 = new ActionDescriptor();
    var idnull = charIDToTypeID( "null" );
        var ref11 = new ActionReference();
        var idLyr = charIDToTypeID( "Lyr " );
        var idOrdn = charIDToTypeID( "Ordn" );
        var idTrgt = charIDToTypeID( "Trgt" );
        ref11.putEnumerated( idLyr, idOrdn, idTrgt );
    desc23.putReference( idnull, ref11 );
    var idVrsn = charIDToTypeID( "Vrsn" );
    desc23.putInteger( idVrsn, 5 );
executeAction( idDplc, desc23, DialogModes.NO );

// =======================================================
var idHghP = charIDToTypeID( "HghP" );
    var desc24 = new ActionDescriptor();
    var idRds = charIDToTypeID( "Rds " );
    var idPxl = charIDToTypeID( "#Pxl" );
    desc24.putUnitDouble( idRds, idPxl, 3.000000 );
executeAction( idHghP, desc24, DialogModes.NO );

// =======================================================
var idsetd = charIDToTypeID( "setd" );
    var desc25 = new ActionDescriptor();
    var idnull = charIDToTypeID( "null" );
        var ref12 = new ActionReference();
        var idLyr = charIDToTypeID( "Lyr " );
        var idOrdn = charIDToTypeID( "Ordn" );
        var idTrgt = charIDToTypeID( "Trgt" );
        ref12.putEnumerated( idLyr, idOrdn, idTrgt );
    desc25.putReference( idnull, ref12 );
    var idT = charIDToTypeID( "T   " );
        var desc26 = new ActionDescriptor();
        var idMd = charIDToTypeID( "Md  " );
        var idBlnM = charIDToTypeID( "BlnM" );
        var idvividLight = stringIDToTypeID( "vividLight" );
        desc26.putEnumerated( idMd, idBlnM, idvividLight );
    var idLyr = charIDToTypeID( "Lyr " );
    desc25.putObject( idT, idLyr, desc26 );
executeAction( idsetd, desc25, DialogModes.NO );

// =======================================================
var idFltI = charIDToTypeID( "FltI" );
executeAction( idFltI, undefined, DialogModes.NO );


Et pour finir :
. copiez en mémoire (Ctrl+C) le contenu du fichier ScriptingListener.Log
- lancez l'exécutable ExtendScript Toolkit.exe qui se trouve sur votre bureau
- lancez la fonction Fichier...Nouveau Javascript du menu
- copiez dedans le contenu du presse-papiers (Ctrl+V)
- dans le menu déroulant de gauche sélectionnez "Adobe Photoshop CS5"
- et enregistrez le fichier sous le nom renforcement.jsx dans le dossier c:\Program Files\Adobe\Adobe PhotoShop CS5\Presets\scripts (GB) ou C:\Program Files\Adobe\Photoshop CS5\Paramètres prédéfinis\Scripts (FR)

Pour pouvoir utiliser ce script, vous devez impérativement relancer Photoshop pour pouvoir le voir dans la liste des scripts disponibles.
Un truc : créez un sous-dossier C:\Program Files\Adobe\Photoshop CS5\Paramètres prédéfinis\Scripts\Mes scripts\ et sauvegardez vos scripts dedans. Vous n'aurez même pas besoin de relancer Photoshop pour retrouver un script que vous venez de réaliser, le système de navigation vous le permettra.

Toute observation sera la bienvenue.

Photos: 147
Dormeur74

Membre VIP
Membre VIP

Messages: 1063

Inscription: 21 Oct 2008

Localisation: Haute-Savoie

Publicité

Re: Initiation à la programmation des scripts sous Photoshop

par Zedvd » Dimanche 19 Janvier 2014 23:23

Super intéressant, je ne savais pas qu'on pouvait faire de la programmation au sein même de photoshop. J'étais simplement resté sur les scripts " de base ", où l'on ne fait qu'enregistrer une suite d'action via l'interface. Merci pour ce tuto, qui permet certainement de faire un bon paquet de choses quand on maîtrise la technique

Zedvd

..........
..........

Messages: 4

Inscription: 19 Jan 2014

Localisation: Bordeaux

Poster une réponse

Poster une réponse

Citer la selection
 

Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 1 invité