Second volet dédié à la programmation de Photoshop, nous allons voir comment créer des scripts permettant de passer outre l’orientation d’une image et gérant la rotation conditionnelle de manière automatique, en détectant l’orientation de l’image et le cas échéant, en faisant tourner de 90° l’image, en y appliquant son traitement, puis ensuite en la redressant si nécessaire…
Gérer les conditions dans Photoshop
À CONSULTER ÉGALEMENT : Pour en savoir plus sur la retouche photo…
La conditionnalité d’exécution des scripts, dans Photoshop, passe inévitablement par l’utilisation de scripts spécifiques programmés (au choix en AppleScript, VBScript ou Javascript ; nous utiliserons ce dernier langage car c’est le seul compatible avec les deux plates-formes PC et Mac, concernant la programmation de Photoshop) ; le concept est très simple : mesurer une condition (qui sera vraie ou fausse) et selon le résultat, exécuter telle ou telle action.
Pour cela, nous allons très simplement utiliser la clause if
:
if(<condition>) { <action si vrai> } else { <action si fausse> }
Langage du code : JavaScript (javascript)
Nous allons ici prendre un cas pratique, qui va nous permettre de détecter si une photographie est orientée en portrait ou en paysage, et le cas échéant, la « forcer » à se retrouver en paysage pour y appliquer un script (nous verrons dans notre exemple comment marquer une image avec un filigrane aligné sur son plus grand côté, de manière automatique quelle que soit son orientation). Notre conditions sera donc basée sur la comparaison de la largeur et de la hauteur de l’image active, tout simplement 😉 :
- si l’image est plus large que haute, alors nous ne faisons rien
- si l’image est plus haute que large, alors nous la basculons de 90° horaires
Ce qui se traduit par le code suivant, où nous utilisons les propriétés height
(hauteur) et width
(largeur) du document actif et les comparons dans notre condition :
#target photoshop // Script dédié à Photoshop app.bringToFront(); // On place Photoshop au premier plan displayDialogs = DialogModes.NO; // Désactivation des boîtes de dialogue // Définition du document actif var DocActif = activeDocument; if(DocActif.height&gt;DocActif.width) { // L'image est en mode portrait } else { // L'image est en mode paysage };
Langage du code : JavaScript (javascript)
À partir de là, nous pouvons donc faire tourner notre image de 90° horaires si nécessaire. Le code pour faire tourner la composition complète est très simplement le suivant :
// Rotation du document de 90° DocActif.rotateCanvas(90);
Langage du code : JavaScript (javascript)
Vous devinerez que la valeur indiquée peut être négative, et que pour redresser notre image, il suffira d’indiquer -90
dans la fonction rotateCanvas
. Voilà ! Nous avons nos deux éléments « techniques » pour commencer à programmer sérieusement notre script ! Mais… Il y a un « mais » 😉
Tourner une image… et détecter si nous devons la redresser ensuite !
La problématique de ce genre de situation est que nous n’avons que deux solutions pratiques pour gérer la rotation conditionnelle d’une image que nous devrons ensuite remettre d’aplomb :
- créer un script (programmé) gérant les opérations à effectuer sur l’image de A à Z (avec l’inconvénient de devoir connaître la programmation, sans possibilité de réutiliser certaines parties du code simplement…)
- créer deux scripts programmés (un pour tourner l’image, le second pour éventuellement la redresser) que nous utiliserons librement mais ensembles dans des actions Photoshop !
La seconde solution me paraît bien plus élégante, mais nous nous trouvons alors confronté à un « léger » problème : comment savoir si l’image a été tournée ou non, au moment où nous devrons éventuellement la redresser ? Une solution (celle que je vais utiliser ici) consiste à simplement « marquer » quelque part dans l’image si elle a été sujette à une rotation ou non 😉
Pour cela, nous pouvons utiliser les métadonnées de l’image, par exemple en écrivant une valeur dans un champs IPTC peu utilisé, tel que le champs provinceState
(qui sert usuellement à stocker la région / province où a été prise la photographie… Usitée aux USA, mais bien peu utilisée en Europe !) ; je n’irai pas jusqu’à gérer la sauvegarde de la valeur initiale (très simple au demeurant) et j’irai donc au plus rapide. On accède à ce champs avec la propriété info.provinceState
du document actif.
Nous allons donc finalement avoir DEUX scripts programmés :
- Le premier, qui va détecter grâce au code vu au chapitre précédent si l’image doit être tournée ou pas, et qui inscrira une valeur « 1 » si l’image est tournée, « 0 » si l’image est laissée telle que, dans notre champs IPTC
- Le second, qui sera à exécuter en fin de script action, qui ira lire la valeur de notre champs IPTC, afin de voir s’il faut redresser l’image ou pas (si ce champs est égal à « 1 », alors on redressera l’image)
Je n’irai pas plus loin dans les détails, voici donc le code de nos deux scripts : tout d’abord, le premier script que nous allons appeler Rotation – Début :
///////////////////////////////////////////////////////////////////////////// ///// Script de gestion conditionnelle de rotation d'images (1ère partie) ///// Définit si l'image doit être tournée de 90° horaires ou non (si verticale, oui) ///// ///// © Cédric Girard - https://blog.aube-nature.com ///////////////////////////////////////////////////////////////////////////// #target photoshop // Script dédié à Photoshop app.bringToFront(); // On place Photoshop au premier plan displayDialogs = DialogModes.NO; // Désactivation des boîtes de dialogue // Définition du document actif var DocActif = activeDocument; if(DocActif.height&gt;DocActif.width) { // Rotation de l'image et marquage spécifique // Marquage de l'image comme ayant été tournée de 90° // On utilise le champs IPTC ProvinceState, très souvent inutilisé (normalement !) DocActif.info.provinceState = "1"; // Rotation du document de 90° DocActif.rotateCanvas(90); } else { // Pas de rotation de l'image, marquage spécifique // Marquage de l'image comme n'ayant pas été touchée en terme de rotation // On utilise le champs IPTC ProvinceState, très souvent inutilisé (normalement !) DocActif.info.provinceState = "0"; };
Langage du code : JavaScript (javascript)
Et le second script, que nous allons appeler Rotation – Fin, qui va simplement aller lire notre valeur dans le champs provinceState
pour décider s’il faut redresser l’image :
//////////////////////////////////////////////////////////////////////////// ///// Script de gestion conditionnelle de rotation d'images (2ème partie) ///// S'exécute en dernier lieu de manière à éventuellement redresser une image ///// ///// © Cédric Girard - https://blog.aube-nature.com ///////////////////////////////////////////////////////////////////////////// #target photoshop // Script dédié à Photoshop app.bringToFront(); // On place Photoshop au premier plan displayDialogs = DialogModes.NO; // Désactivation des boîtes de dialogue // Définition du document actif var DocActif = activeDocument; if(DocActif.info.provinceState == "1") { // L'image a été tournée, donc on la redresse de -90° // Rotation du document de -90° DocActif.rotateCanvas(-90); } // Par soucis de "propreté" on efface le contenu du champs IPTC ProvinceState, même s'il ne sert pas DocActif.info.ProvinceState = "";
Langage du code : JavaScript (javascript)
Nous avons désormais nos deux scripts, que nous allons sauvegarder avec l’extension .jsx
dans le sous-répertoire \Paramètres prédéfinis\Scripts
du répertoire d’installation de Photoshop, ce qui permettra de les utiliser directement dans des actions enregistrables en les accédant par le menu Fichiers / Scripts ! Vous pouvez télécharger ces deux scripts (fichier ZIP, avec les scripts fonctionnels pour Photoshop CS2, CS3, CS4 et CS5) en cliquant ici.
Exemple d’utilisation pratique
Comme je l’ai expliqué au début de ce billet, nous allons utiliser la rotation conditionnelle pour « marquer » une image avec un filigrane, qui sera aligné sur le plus long côté de notre image, de manière à donner ce genre de résultat :
Exemple de photo horizontale (ici notre mâle mainecoon) :
Exemple de photo verticale (toujours notre mâle maine coon) :
Pour cela, il faut procéder de la manière suivante en enregistrant un script (basé sur des manipulations pour images horizontalement orientées), en exécutant en début d’action le script Rotation – Début.jsx, puis en toute fin d’actions, le script Rotation – Fin.jsx : tout simplement ^_^
Voici ce que nous obtenons dans notre palette « Scripts », concernant l’action qui permet d’obtenir le résultat ci-dessus (vous remarquerez que j’ai encapsulé toutes les commandes de manière à préparer mes images en une seule étape : réduction en 3 passes, accentuation légère à chaque passe, conversion en sRVB, test de rotation – à la première flèche rouge – puis apposition du filigrane aligné en bas de l’image et centré, puis deuxième partie du test de rotation – à la seconde flèche rouge) :
Conclusion
Je vous ai présenté une méthode pour gérer la rotation conditionnelle des images et pouvoir simplement l’utiliser au sein de vos actions Photoshop, désormais à vous de bien la mettre à contribution (vous remarquerez que je n’ai pas proposé cette fois de scripts prêts à l’emploi : à vous d’y travailler ^_^ !)
Au niveau des utilisations possibles de ce genre de fonctionnalité : comme montré dans l’exemple ci-dessus, apposition d’un filigrane sur le côté précis d’une image (le plus petit, ou le plus grand, à votre guise), uniformisation d’un traitement comme la mise en place d’un encadrement à partir d’un dessin ou d’un fichier externe nécessitant une orientation précise de l’image, etc…
Bonjour
dans un script photoshop comment est-ce que je fait pour insérer un javascript tel que je l’ai téléchargé de votre site (script début ou fin)? merci
Bonjour Robert
Il faut les déposer dans un répertoire précis, c’est précisé plus haut dans l’article (juste sous les deux pavés de code)