Split Text Photoshop

Voilà un long moment que je cherche comment, sous Photoshop, diviser, scinder, un calque texte en plusieurs calques textes.
Après plusieurs essais et solutions plus ou moins tordus, j’ai trouvé un script… qui ne marche pas. Mais en coupant un peu dedans, j’arrive à une solution suffisante à combler mes besoins.

Mais pourquoi vouloir scinder un calque texte en plusieurs calques textes ?

Quand je dois mettre en page des textes dans une bande dessinée il est pratique de préalablement taper du texte dans un éditeur de texte afin d’en corriger l’orthographe, la syntaxe, de travailler ou récupérer le texte dans un seul fichier.
Dans Photoshop, il est pratique d’avoir le texte de chaque bulle sur un calque séparé afin de pouvoir le déplacer dans la page, le retravailler bulle par bulle.
Une page de BD compte souvent entre 9 et 12 cases, avec entre une et trois bulles par case. Soit, si l’on importe les textes bulle par bulle, entre 9 et 36 « aller-retours » : copier, créer calque texte, coller.
Importer le texte de toutes les bulles en un seul copié/collé est un gain de temps important.

Un seul copier-coller pour importer tous mes textes dans mon document Photoshop.

N’ayant pas trouvé de solutions satisfaisantes jusqu’à maintenant, j’avais bricolé à l’aide du logiciel KeyBoard Maestro, une série d’actions que je déclenchais par une touche. Ce « script » permettait de copier une phrase de la coller dans un texte dans Photoshop puis de revenir dans l’éditeur de texte de copier la phrase suivante et ainsi de suite.
Un peu long compliqué et pas toujours parfait, l’action butant parfois sur des espaces où des retours à la ligne hasardeux ou des coordonnées approximatives. Pour créer un nouveau calque texte à chaque fois dans Photoshop, cela passait par des coordonnées sur l’écran, ce qui ne rendait pas ce script fiable dans toutes les situations. Néanmoins, cette solution m’a quand même fait gagner un peu de temps sur certains travaux de bandes dessinées.


Puis, je l’avais remplacée par un workflow plus simple, mais plutôt efficace, consistant à utiliser des gestionnaires de copier-coller (Copied et Alfred).
Je copiais tous les textes de mes bulles puis dans Photoshop je créais mes calques textes et y collait le texte de chaque bulle, utilisant les coller multiple de Alfred.
J’avais même trouvé un script pour diviser les textes, aux retours à la ligne en plusieurs extraits de texte à coller.
Mais toutes ces méthodes impliquaient de déclencher un certain nombre d’actions sur les fichiers textes.
Sur iOS, j’ai même tenté avec l’application Raccourcis de diviser un texte copié en plusieurs morceaux de texte, mais avec des résultats trop aléatoires pour être exploitables… et sans grand intérêt, Photoshop n’étant pas (encore) disponible sous iOS. Bref.

J’ai longtemps erré à la recherche d’une solution simple et efficace.

Récemment, j’ai relancé une recherche pour voir si quelqu’un n’avait pas développé une solution satisfaisante à ce problème que le monde entier doit partager, à mon avis.

J’ai trouvé ce script javascript :

photoshop-scripts/text-separator.jsx qui me paraît faire ce dont j’ai besoin.
Malheureusement en l’essayant, Photoshop me renvoie un message d’erreur. (Je ne sais si c’est dû à la version de Photoshop CC2018 ou au fait que je sois sur MacOs)
Ce script paraissant assez simple, j’ai fait quelques essais de suppression d’éléments problématiques pour arriver à le faire fonctionner.

Modifié comme cela :

N’ayant que de très très très vagues et lointaines connaissances en javascript, je me suis contenté de supprimer quelques lignes qui semblaient poser problème.

// select text layer and run script
// it will split one text layer to several layers by linebreaks
// showcase: https://www.youtube.com/watch?v=5oQgwZdW9Modoc =

app.activeDocument;
layer = doc.activeLayer;
var text = layer.textItem.contents;
var textArray = text.split(“\r”);
var pos = layer.textItem.position;
var leading = +20;

layer.textItem.contents=textArray[0]
layer.name = textArray[0]
for (var k=1; k<textArray.length;k++)
{
tmp = layer.duplicate();
tmp.textItem.position = [pos[0], pos[1]+(Number(leading)*k)]
tmp.textItem.contents = textArray[k];
}

À écrire dans un fichier texte qu’on nommera text-separator.jsx
Ce script est à placer dans le dossier /Applications/Adobe Photoshop CC 2018/Presets/Scripts/text-separator.jsx

On y accède par le menu Fichier/Scripts.
L’action prend quelques secondes, mais le résultat est là, ça fonctionne, je n’ai plus qu’à déplacer mes calques :

À chaque retour à la ligne un nouveau calque est créé.
Je peux ainsi déplacer mes textes, les retravailler (retours à la ligne) calque par calque, bulle par bulle.
C’est un gain de temps non négligeable, et surtout quelques minutes de travail répétitif et inintéressant de gagné.

Si vous connaissez une solution plus satisfaisante, ou plus complète, n’hésitez pas à me le faire savoir.

En attendant j’ai aussi consacré un podcast / streetcast à ce sujet :