从智能对象和图层替换Photoshop中的关键字

时间:2015-02-23 01:01:18

标签: javascript photoshop psd photoshop-script

我有一个带有多个PSD文件的PSD Web模板,我需要在所有这些文件中替换一个关键字。如果我使用内置的Find&替换它只会一次替换一个PSD文件,而且它不会替换智能对象中的文本。

是否有任何此类脚本可以帮助从PSD(​​也包括文件夹中的多个PSD)中的任何地方(包括智能对象)替换关键字?

我在这里找到的最近的是Find and replace text in multiple Photoshop files?

var dir = new Folder('/c/temp')
var files = dir.getFiles("*.psd");

for (var i = 0; i < files.length; i++) {
    var doc = app.open(files[i]);

    for (var j= 0; j < doc.artLayers.length; j++) {
        var lyr = doc.artLayers[j];

        if (lyr.kind == LayerKind.TEXT) {
            var lyr = doc.artLayers[j];
            lyr.textItem.contents = lyr.textItem.contents.replace("search","replace"); 
        }
     }

    doc.close(SaveOptions.SAVECHANGES)
}

但由于某种原因,该脚本会打开PSD文件,然后关闭它而不进行任何更改。我尝试一次播放一行脚本,然后转到第10行(if (lyr.kind == LayerKind.TEXT) {)并循环回到第7行(for (var j= 0; j < doc.artLayers.length; j++) {)。

1 个答案:

答案 0 :(得分:0)

至少在上一版本的Photoshop I脚本中,智能对象不是DOM的一部分 - 您必须使用scriptlistener代码来访问这些对象的内容。

因此,以下代码段应该开始编辑智能对象:

var id401 = stringIDToTypeID( "placedLayerEditContents" );
    var desc24 = new ActionDescriptor();
executeAction( id401, desc24, DialogModes.NO );

从那里你需要遍历新活动文档中的所有图层,这些图层应该包含智能对象的内容,根据需要进行修改并保存&amp;关闭它会将活动文档返回到原始文档。根据智能对象的嵌套方式,您可能需要多次执行此操作。