Ausgabe
Nehmen wir an, ich habe in Photoshop ein paar Textebenen mit Inhalten wie diesem:
Text layer 1: 1@@text01@@abc
Text layer 2: 2@@text02@@cef
Text layer 3: 3@@text03@@hgi
Ich möchte alle Ebenentexte (den Inhalt jeder Textebene innerhalb der Zeichenfläche, nicht die Namen des Ebenenbedienfelds) ersetzen, beginnend mit dem first@
und dem end@
, das heißt @@text..@@
, ##
damit die Ergebnisse wie folgt aussehen:
Text layer 1: 1##abc
Text layer 2: 2##cef
Text layer 3: 3##hgi
Wie kann ich das erreichen?
Vielen Dank.
Lösung
Sie müssen im Wesentlichen 3 Operationen ausführen:
- durchqueren Sie die Ebenen und wählen Sie sie nacheinander aus;
- Ersetzen Sie einen Teil des Ebenennamens durch ein reguläres Ausdrucksmuster .
- benennen Sie die Ebene mit dem neuen Namen um;
Eine einfache* Version davon könnte so aussehen:
var layer;
// looping through top layers
for (var i = 0; i < activeDocument.layers.length; i++) {
layer = activeDocument.layers[i]; // for ease of read
activeDocument.activeLayer = layer; // making the layer active
layer.name = layer.name.replace(/@.*@/,'##'); // replacing the layer name. @.*@ regex pattern will select anything between two @ symbols
}
Update : Ersetzen des Ebenentextinhalts.
Im Grunde dasselbe mit einigen Ergänzungen. Sie müssen überprüfen, ob dies der Fall layer.kind
ist , LayerKind.TEXT
und anstatt sich zu ändern layer.name
, müssen Sie sich ändernlayer.textItem.contents
*. Beachten Sie, dass die activeDocument.layers
Sammlung nur Ebenen der obersten Ebene enthält. Wenn Ihr Dokument Gruppen (auch bekannt als Ordner) oder Zeichenflächen enthält, müssen Sie verschachtelte Ebenen mit einer anderen Funktion durchlaufen: etwa so
Beantwortet von – Sergey Kritskiy
Antwort geprüft von – Pedro (FixError Volunteer)