Photoshop 脚本:如何按名称导出 PathItem

Photoshop Scripting: How to export PathItem by its name

我拼命想弄清楚如何为 photoshop 编写一个 js,它只导出一个特定的路径,而不是我的 PS 文档中“路径”选项卡下的所有包含路径到 Illustrator文件。 例如这里的图片:

我只想使用脚本导出名称为“2 Acryl”的路径。 我已经有了一个可以将所有路径导出到一个 AI 文件中的工作脚本。 我只是不知道如何通过名称引用单个路径并将其导出。

function unSaved() {
try {
    activeDocument.path;
    /* Finish Unsaved Document Error Check - Part A: Try */

    /* Main Code Start */

    /* Based on the following topic thread:
    https://community.adobe.com/t5/photoshop/exporting-all-paths-to-illustrator-error/m-p/8796143 */

    var doc = app.activeDocument;
    var docPath = doc.path;
    var docName = doc.name.replace(/\.[^\.]+$/, '');
    var newFile = File(docPath + '/' + docName + '_Paths' + '.ai');
    var expOptions = new ExportOptionsIllustrator;
    expOptions.path = IllustratorPathType.ALLPATHS;
    doc.exportDocument(newFile, ExportType.ILLUSTRATORPATHS, expOptions);
    // alert('All Photoshop paths have been exported as a single Illustrator file in:' + '\r' + docPath);

    /* Main Code Finish */

    /* Start Unsaved Document Error Check - Part B: Catch */
} catch (err) {
    alert('An image must be both open and/or saved before running this script!')
}

}

这可以通过根据需要更改 ExportOptionsIllustrator 对象来完成。

 var expOptions = new ExportOptionsIllustrator;

要导出单个路径,ExportOptionsIllustrator.path 属性 必须设置为

 expOptions.path = IllustratorPathType.NAMEDPATH;

之后,您可以使用名称选择您想要的路径:

expOptions.pathName = '2 Acryl';

编辑:

显然由于 Photoshop 本身的错误,导出选项 IllustratorPathType.NAMEDPATH 被简单地忽略了。无论如何,Photoshop 总是会导出所有路径。

这里有一个 hacky 解决方法。 Photoshop 脚本提供 PathItems 对象,其中包含文档中所有路径的列表。所以想法是这样的:

  1. 创建当前文档的克隆
  2. 遍历克隆中的所有路径
  3. 删除除您要保留的单个路径之外的所有内容
  4. 将克隆的路径导出为 Illustrator 文件
  5. 关闭克隆而不保存

这是更新后的脚本:

try {
    var doc = app.activeDocument;
    var docPath = doc.path;
    var docName = doc.name.replace(/\.[^\.]+$/, '');
    var newFile = File(docPath + '/' + docName + '_Paths' + '.ai');
    var expOptions = new ExportOptionsIllustrator;
    
    var duplicate = app.activeDocument.duplicate('duplicate');
    
    for(a = duplicate.pathItems.length-1; a>=0; a--)
    {
        if(duplicate.pathItems[a].name != '2 Acryl')
        {
            duplicate.pathItems[a].remove();
        }
    }
    
    duplicate.exportDocument(newFile, ExportType.ILLUSTRATORPATHS, expOptions);
    duplicate.close(SaveOptions.DONOTSAVECHANGES);
    
} catch (err) {
    alert('An image must be both open and/or saved before running this script!')
}

编辑2:

如果还是不行,那就只有最后一招了。 Photoshop 具有将路径导出到 Illustrator 的内置功能。只需前往:

文件 * 导出 * 路径 -> Illustrator...

然后在弹出的对话框中选择你想要的路径。

仅作记录:@obscure的第一个答案编辑效果很好。如果它不适用于确切的代码,请尝试在以下之后添加延迟: duplicate.exportDocument(newFile, ExportType.ILLUSTRATORPATHS, expOptions);

在关闭 ps 文件之前,或者只是不执行关闭 ps 文档的代码行。

再次感谢!