Photoshop中查找和替换文字问题
Find and replace text problem in Photoshop
在 photoshop 中,假设我有几个文本图层,内容如下:
Text layer 1: 1@@text01@@abc
Text layer 2: 2@@text02@@cef
Text layer 3: 3@@text03@@hgi
我想替换所有以 first@
和 end@
开头的图层文本(画板中每个文本图层的内容,而不是图层面板的名称),即 @@text..@@
到 ##
这样结果就是:
Text layer 1: 1##abc
Text layer 2: 2##cef
Text layer 3: 3##hgi
我能做到吗?
谢谢。
你基本上需要做3个操作:
- 层层遍历,select一层一层;
- 使用regular expression模式替换图层名称的一部分;
- 用新名称重命名图层;
它的基本*版本可能如下所示:
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
}
更新:替换图层文字内容
基本上是一样的,只是增加了一些内容。您需要检查 layer.kind
是否为 LayerKind.TEXT
而不是更改 layer.name
您需要更改 layer.textItem.contents
*。请注意,activeDocument.layers
集合仅包含顶层图层。如果您的文档有组(又名文件夹)或画板,您需要通过具有不同功能的嵌套图层:类似于 this
我尝试了下面的脚本,它确实有效,但不知道我是否遗漏了任何结构:
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
layer.textItem.contents = layer.textItem.contents.replace(/@.*@/,''); // replacing the layer name. @.*@ regex pattern will select anything between two @ symbols
}
在 photoshop 中,假设我有几个文本图层,内容如下:
Text layer 1: 1@@text01@@abc
Text layer 2: 2@@text02@@cef
Text layer 3: 3@@text03@@hgi
我想替换所有以 first@
和 end@
开头的图层文本(画板中每个文本图层的内容,而不是图层面板的名称),即 @@text..@@
到 ##
这样结果就是:
Text layer 1: 1##abc
Text layer 2: 2##cef
Text layer 3: 3##hgi
我能做到吗?
谢谢。
你基本上需要做3个操作:
- 层层遍历,select一层一层;
- 使用regular expression模式替换图层名称的一部分;
- 用新名称重命名图层;
它的基本*版本可能如下所示:
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
}
更新:替换图层文字内容
基本上是一样的,只是增加了一些内容。您需要检查 layer.kind
是否为 LayerKind.TEXT
而不是更改 layer.name
您需要更改 layer.textItem.contents
*。请注意,activeDocument.layers
集合仅包含顶层图层。如果您的文档有组(又名文件夹)或画板,您需要通过具有不同功能的嵌套图层:类似于 this
我尝试了下面的脚本,它确实有效,但不知道我是否遗漏了任何结构:
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
layer.textItem.contents = layer.textItem.contents.replace(/@.*@/,''); // replacing the layer name. @.*@ regex pattern will select anything between two @ symbols
}