【问题标题】:Replace keyword in Photoshop from Smart Objects and Layers从智能对象和图层替换 Photoshop 中的关键字
【发布时间】:2015-02-23 01:01:18
【问题描述】:

我有一个包含多个 PSD 文件的 PSD Web 模板,我需要在所有这些文件中替换一个关键字。如果我使用内置的查找和替换,它一次只会替换一个 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 &lt; doc.artLayers.length; j++) {)。

【问题讨论】:

  • 您是否在包含不在智能对象中的任何文本层的文档上运行该代码?该代码不会编辑智能对象。
  • 是的,我正在尝试的 psd 包含进出智能对象的文本,并且文本不会替换其中的任何内容。不确定。
  • 在 lyr.kind == LayerKind.TEXT 行放置一个断点,看看当 'lyr' 是您认为是文本层的图层之一时 lyr.kind 返回的类型。跨度>

标签: javascript photoshop psd photoshop-script


【解决方案1】:

至少在我编写脚本的最后一个版本的 Photoshop 中,智能对象不是 DOM 的一部分——您必须使用脚本侦听器代码来访问这些对象的内容。

所以下面的 sn-p 应该开始编辑智能对象:

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

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

【讨论】:

  • 谢谢安娜,我对脚本很陌生,所以我必须将之前的脚本和你刚才提到的脚本结合起来,或者我可以单独使用上面的脚本。再次感谢。
  • 您需要将两者结合起来并做一些其他工作将它们粘合在一起。此答案中的 sn-p 只会让您访问智能对象内容 - 您需要使用之前找到的答案中的脚本来实际更改内容。如果您想将这些部分组合在一起并发布您的代码 - 我会帮助您完成它。
  • 嘿,实际上我最终发布了这篇文章。一旦我有了脚本就会分享。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-03-16
  • 2019-09-06
  • 1970-01-01
  • 1970-01-01
  • 2021-09-20
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多