IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

JavaScript Discussion :

[Js Photoshop] Appel d'une variable dans une autre fonction


Sujet :

JavaScript

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Responsable de production
    Inscrit en
    Novembre 2013
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Responsable de production
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Novembre 2013
    Messages : 14
    Points : 8
    Points
    8
    Par défaut [Js Photoshop] Appel d'une variable dans une autre fonction
    Bonjour à tous,

    N'ayant pas trouvé LA catégorie pour poster mon problème, je pense tout de même être dans la plus appropriée.

    Pour info, je suis novice en Js. Et la subtilité etant que ce code permettra de piloter Photoshop, et oui c'est possible.

    Le cahier des charges est de remplacer un élément texte dans un paragraphe, plus exactement dans "les" calques de type texte tout en gardant le texte visible dans un cadre délimité. Le texte doit s'adapter au cadre sans troncature en fonction de la taille du texte remplaçant. (texte prédéfinis à personnaliser avec un prénom par exemple)

    Donc voici ce qui me préoccupe depuis un moment, une partie de mon code fonctionne. Effectivement j'arrive à faire ma recherche+remplacement, tout se passe bien, j'arrive a récupérer le nombre de caractère qui va me servir à évaluer la taille de police à appliquer.

    Mais vue que je débute, je me suis beaucoup renseigner et ai récupéré des parties de code ici et là en les modifiant pour qu'ils s'appliquent à mon usage.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
        if (app.documents.length > 0) {
     
                  for (var n = 0; n < app.documents.length; n++) {
                            app.activeDocument = app.documents[n];
                            app.activeDocument.suspendHistory("replace text", "main()")
                            }
                  };
     
        // S&R by prompt
        function main () {
                  var myDocument = app.activeDocument;
                  var theLayers = collectTextLayers(myDocument, []);
                  if (theLayers.length > 0) {
                            // Texte cible à remplacer //
                            var theArray1 = ["<prenom>"];
                            // Nouveau texte //
                            var theArray2 = [prompt("prénom à insérer","Prenom")];
                            for (var a = 0; a < theLayers.length; a++) {
                                      for (var b = 0; b < theArray1.length; b++) {
                                                var theString = theLayers[a].textItem.contents;
                                                while (theString.indexOf(theArray1[b]) != -1) {
                                                          theString = theString.replace(theArray1[b], theArray2[b])
                                                          };
                                                theLayers[a].textItem.contents = theString;
                                                var namelength = theArray2[b].length
                                                }
                                      }
                            }
                  };
     
     
    ////// collect all layers //////
     
        function collectTextLayers (theParent, allLayers) {
                  if (!allLayers) {var allLayers = new Array};
                  else {};
                  for (var m = theParent.layers.length - 1; m >= 0;m--) {
                            var theLayer = theParent.layers[m];
        // apply the function to layersets;
     
                            if (theLayer.typename == "ArtLayer") {
                                      if (theLayer.kind == LayerKind.TEXT) {allLayers.push(theLayer)};
                                      }
                            else {
                                      allLayers = (collectTextLayers(theLayer, allLayers))
     
        // this line includes the layer groups;
        //                              allLayers.push(theLayer);
                                      }
                            };
                  return allLayers
                  };
     
    /// AutoSize //////
    if (namelength >10)
    var fontsize = 12
     function changeSize(target){
        var layers = target.layers;
        for(var i=0;i<layers.length;i++){
            if(layers[i].typename == "LayerSet"){
                changeSize(layers[i]);
            } else {
                if(layers[i].kind == LayerKind.TEXT){
                    layers[i].textItem.size = fontsize;
                };
            };
        };
    };
    Je butte parce que la dernière partie me renvoie une erreur étant donné que je fais appel à une variable présente dans une autre fonction, la fonction "main".
    Donc comment faire pour récupérer cette variable sans utilisation d'un fichier texte pour le stockage.?

    Soyez indulgent c'est mon premier code, que j'ai réussi a mettre en place en repiquant des morceaux a droite à gauche.

    Merci d'avance pour votre aide.

  2. #2
    Modérateur
    Avatar de Alkhan
    Homme Profil pro
    ingénieur full stack
    Inscrit en
    Octobre 2006
    Messages
    1 232
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : ingénieur full stack

    Informations forums :
    Inscription : Octobre 2006
    Messages : 1 232
    Points : 2 061
    Points
    2 061
    Par défaut
    Bonjour,

    Citation Envoyé par bugg01 Voir le message
    N'ayant pas trouvé LA catégorie pour poster mon problème, je pense tout de même être dans la plus appropriée.
    Pour info, je suis novice en Js.
    En effet tu n'es pas dans la bonne catégorie, tu aura plus de chance d'avoir une réponse sur le forum JavaScript
    Il n'y a pas de problème, il n'y a que des solutions.
    Cependant, comme le disaient les shadoks, s'il n'y a pas de solution, c'est qu'il n'y a pas de problème.
    Si toutefois le problème persiste, la seule solution restante est de changer le périphérique qui se trouve entre la chaise et l'écran

    Mes Articles : Mon premier article est sur le language D
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  3. #3
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 557
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 557
    Points : 21 616
    Points
    21 616
    Par défaut
    La seule question qui se pose, c'est comment PhotoShop s'y prend pour exécuter du JavaScript. Et donc, où trouver des gens qui le savent. Je vois deux candidats :

    - Dans le forum Développement Web / JavaScript, où on trouve des experts de JavaScript et où il y a une chance que l'un d'entre eux s'en soit déjà servi pour PhotoShop. Bien que cela n'ait rien à voir avec du développement web.

    - Dans le forum Logiciels / Imagerie, puisque la question porte sur PhotoShop, en particulier de quelle manière fait-il du JavaScript.

    Je déplace donc en Imagerie et surveille s'il y a besoin de déplacer encore.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  4. #4
    Futur Membre du Club
    Homme Profil pro
    Responsable de production
    Inscrit en
    Novembre 2013
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Responsable de production
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Novembre 2013
    Messages : 14
    Points : 8
    Points
    8
    Par défaut
    Merci Thelvin, effectivement, j'aurais surement plus de chance ici.

  5. #5
    Membre éprouvé Avatar de txuku
    Homme Profil pro
    Inscrit en
    Octobre 2008
    Messages
    980
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 75
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations forums :
    Inscription : Octobre 2008
    Messages : 980
    Points : 1 276
    Points
    1 276
    Par défaut
    Bonjour

    Je pense que tu peux declarer les variables en debut de script en dehors de la fonction main() ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    // Texte cible à remplacer //
                            var theArray1 = ["<prenom>"];
                            // Nouveau texte //
                            var theArray2 = [prompt("prénom à insérer","Trenom")];
    var namelength = theArray2.length;    
     
    if (app.documents.length > 0) {
     
                  for (var n = 0; n < app.documents.length; n++) {
                            app.activeDocument = app.documents[n];
                            app.activeDocument.suspendHistory("replace text", "main()")
                            }
                  };
     
        // S&R by prompt
        function main () {
                  var myDocument = app.activeDocument;
                  var theLayers = collectTextLayers(myDocument, []);
                  if (theLayers.length > 0) {
                            // Texte cible à remplacer //
                            //var theArray1 = ["<prenom>"];
                            // Nouveau texte //
                           // var theArray2 = [prompt("prénom à insérer","Trenom")];
                            for (var a = 0; a < theLayers.length; a++) {
                                      for (var b = 0; b < theArray1.length; b++) {
                                                var theString = theLayers[a].textItem.contents;
                                                while (theString.indexOf(theArray1[b]) != -1) {
                                                          theString = theString.replace(theArray1[b], theArray2[b])
                                                          };
                                                theLayers[a].textItem.contents = theString;
                                                var namelength = theArray2[b].length;
                              //alert(namelength);
                                                }
                                      }
                            }
                  };
     
     
    ////// collect all layers //////
     
        function collectTextLayers (theParent, allLayers) {
                  if (!allLayers) {var allLayers = new Array};
                  else {};
                  for (var m = theParent.layers.length - 1; m >= 0;m--) {
                            var theLayer = theParent.layers[m];
        // apply the function to layersets;
     
                            if (theLayer.typename == "ArtLayer") {
                                      if (theLayer.kind == LayerKind.TEXT) {allLayers.push(theLayer)};
                                      }
                            else {
                                      allLayers = (collectTextLayers(theLayer, allLayers))
     
        // this line includes the layer groups;
        //                              allLayers.push(theLayer);
                                      }
                            };
                  return allLayers
                  };
     
    /// AutoSize //////
    if (namelength >10)
    var fontsize = 12
     function changeSize(target){
        var layers = target.layers;
        for(var i=0;i<layers.length;i++){
            if(layers[i].typename == "LayerSet"){
                changeSize(layers[i]);
            } else {
                if(layers[i].kind == LayerKind.TEXT){
                    layers[i].textItem.size = fontsize;
                };
            };
        };
    };

  6. #6
    Futur Membre du Club
    Homme Profil pro
    Responsable de production
    Inscrit en
    Novembre 2013
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Responsable de production
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Novembre 2013
    Messages : 14
    Points : 8
    Points
    8
    Par défaut
    Merci txuku, ca marche nickel, encore merci.

    Mais pour finir, j'ai une fonction qui est ignorée durant l’exécution, tout marche correctement, les test des lignes 32 à 37 fonctionnent mais la fonction "changeSize" (ligne 39) est ignorée. Est-ce normal? Je pense être passé a coté de quelque chose...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
     
        if (app.documents.length > 0) {
     
                  for (var n = 0; n < app.documents.length; n++) {
                            app.activeDocument = app.documents[n];
                            app.activeDocument.suspendHistory("remplacement texte", " ")
                            }
                  };
     
        // S&R by prompt
     
                  var myDocument = app.activeDocument;
                  var theLayers = collectTextLayers(myDocument, []);
                  if (theLayers.length > 0) {
                            // Texte cible à remplacer //
                            var theArray1 = ["<prenom>"];
                            // Nouveau texte //
                            var theArray2 = [prompt("prénom à insérer","Prenom")];
                            for (var a = 0; a < theLayers.length; a++) {
                                      for (var b = 0; b < theArray1.length; b++) {
                                                var theString = theLayers[a].textItem.contents;
                                                while (theString.indexOf(theArray1[b]) != -1) {
                                                          theString = theString.replace(theArray1[b], theArray2[b])
                                                          };
                                                theLayers[a].textItem.contents = theString;
                                                var namelength = theArray2[b].length
     
                                      }
                            }
                  };
     
    /// test alert suivant condition //////
    if (namelength <15) {
    var fontsize = 12}
    if (namelength >=15) {
    var fontsize = 11}
    if (namelength >=18) {
    var fontsize = 10}
     
     function changeSize(target){
        var layers = target.layers;
        for(var i=0;i<layers.length;i++){
            if(layers[i].typename == "LayerSet"){
                changeSize(layers[i]);
            } else {
                if(layers[i].kind == LayerKind.TEXT){
                    layers[i].textItem.size = fontsize;
                };
            }; 
        };
    };
    alert("Suite de caractère remplaçante : " + theArray2 +"\n"+ "Attention , la suite de caractère entrée contient " + namelength + " caractères","")
     
    ////// collect all layers //////
     
        function collectTextLayers (theParent, allLayers) {
                  if (!allLayers) {var allLayers = new Array};
                  else {};
                  for (var m = theParent.layers.length - 1; m >= 0;m--) {
                            var theLayer = theParent.layers[m];
        // apply the function to layersets;
     
                            if (theLayer.typename == "ArtLayer") {
                                      if (theLayer.kind == LayerKind.TEXT) {allLayers.push(theLayer)};
                                      }
                            else {
                                      allLayers = (collectTextLayers(theLayer, allLayers))
     
        // this line includes the layer groups;
        //                              allLayers.push(theLayer);
                                      }
                            };
                  return allLayers
                  };

  7. #7
    Membre éprouvé Avatar de txuku
    Homme Profil pro
    Inscrit en
    Octobre 2008
    Messages
    980
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 75
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations forums :
    Inscription : Octobre 2008
    Messages : 980
    Points : 1 276
    Points
    1 276
    Par défaut
    Tu crees une fonction plus simple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    /// test alert suivant condition //////
    if (namelength <15) {
    var fontsize = 12}
    if (namelength >=15) {
    var fontsize = 11}
    if (namelength >=18) {
    var fontsize = 10}
    changeSize()
     
    //alert(fontsize)
     
     function changeSize()
    {
    //alert(fontsize)
        //var layers = target.layers;
        for(var i=0;i<theLayers.length;i++)
              {
     
               // if(layers[i].kind == LayerKind.TEXT){
                    theLayers[i].textItem.size = fontsize;
               };
     
    };

  8. #8
    Futur Membre du Club
    Homme Profil pro
    Responsable de production
    Inscrit en
    Novembre 2013
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Responsable de production
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Novembre 2013
    Messages : 14
    Points : 8
    Points
    8
    Par défaut
    Un grand merci txuku!!!
    C'est déjà plus lisible et en plus ça fonctionne a merveille.

  9. #9
    Membre éprouvé Avatar de txuku
    Homme Profil pro
    Inscrit en
    Octobre 2008
    Messages
    980
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 75
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations forums :
    Inscription : Octobre 2008
    Messages : 980
    Points : 1 276
    Points
    1 276
    Par défaut
    Content pour toi !

    Personnellement j utilise l extension .jsx plutot que .js pour les javascripts Photoshop............

  10. #10
    Futur Membre du Club
    Homme Profil pro
    Responsable de production
    Inscrit en
    Novembre 2013
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Responsable de production
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Novembre 2013
    Messages : 14
    Points : 8
    Points
    8
    Par défaut
    J'utilise aussi le .jsx

  11. #11
    Futur Membre du Club
    Homme Profil pro
    Responsable de production
    Inscrit en
    Novembre 2013
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Responsable de production
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Novembre 2013
    Messages : 14
    Points : 8
    Points
    8
    Par défaut
    Cette fois, je voudrais que la variable a remplacer le soit non plus par l'intermédiaire d'une prompt box, mais en allant chercher le contenu d'un calque de type texte. On connait le nom du calque texte contenant l'information à récupérer ("Calque_TXT")

    Donc changer cette partie la :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    var theArray2 = [prompt("prénom à insérer","Prenom")];
    par quelque chose dans ce genre.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    var theArray2 = [layer.Calque_TXT.contents];
    Sauf que cette syntaxe n'est semble-t'il pas la bonne...
    Et je pense qu'il est nécessaire et plus judicieux de déclarer une nouvelle variable pour stocker le contenu du "Calque_TXT"?

    Je sais que le probleme est simple, mais je suis encore un grand débutant !

  12. #12
    Membre éprouvé Avatar de txuku
    Homme Profil pro
    Inscrit en
    Octobre 2008
    Messages
    980
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 75
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations forums :
    Inscription : Octobre 2008
    Messages : 980
    Points : 1 276
    Points
    1 276
    Par défaut
    Hum....

    Toujours se mefier de ce qui est simple...........

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    var layerRef = app.activeDocument.artLayers.getByName("Calque_TXT"); 
    var theArray2 = layerRef.textItem.contents;
    //alert(layerRef.name);
    alert( theArray2 );

  13. #13
    Futur Membre du Club
    Homme Profil pro
    Responsable de production
    Inscrit en
    Novembre 2013
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Responsable de production
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Novembre 2013
    Messages : 14
    Points : 8
    Points
    8
    Par défaut
    Super,
    J'y étais presque ma syntaxe était bonne à 90% il me manquait juste la balise "TextItem" de la ligne 2 et c'était correct.
    Merci monsieur!!

    A oui et j'ai juste mis la valeur de Array2 entre crochets [] sinon ça me récupère que le 1er caractère.

    Encore merci txuku pour ton aide efficace!

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 3
    Dernier message: 26/09/2008, 10h41
  2. Récupérer le nom d'une colonne d'une table dans une variable
    Par mimi51340 dans le forum Général Java
    Réponses: 4
    Dernier message: 13/03/2008, 14h23
  3. Réponses: 4
    Dernier message: 29/01/2008, 11h12
  4. Réponses: 1
    Dernier message: 15/02/2007, 00h24
  5. Mettre une valeur d'une table dans une variable
    Par Raphou96 dans le forum Access
    Réponses: 5
    Dernier message: 06/02/2006, 15h19

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo