如何使用打开的图像更新 PSD 文件链接层

How to update a PSD file linked layer with opened image

我有点卡住了。我为 Photoshop 创建了一个脚本,它可以打开一个 PSD 文件,其中包含几个图层和一个链接图层,类似于模板。

到目前为止,我通过创建一个 运行 具有以下步骤和脚本的 droplet 来为我工作:

  1. 打开掉落的 file/image。
  2. 正在打开 PSD 文件(打开模板,脚本化)。
  3. 更新所有智能对象(包括链接层,但受特定名称和位置限制)(非脚本,记录动作)。
  4. 将模板功能应用于之前已更新(脚本化)的链接层。
  5. 保存 PNG 文件(脚本化),
  6. 最后,关闭打开的图像和模板文档(记录的操作)。

到目前为止一切都很好。但这有一个限制。它一次只能处理一个文件,具有特定名称,位于特定位置。因此,例如,要使更新链接层起作用,图像的名称必须 1.png 仅在下载文件夹中,在这种情况下。

所以我的问题是:如何将此脚本编写为 运行 链接层上的更新迭代,使用作为源的图像放到 Droplet 上,无论文件类型如何(png、 jpg 等)、名称、位置和索引输出保存的 PNG 文件? (1.png、2.png、3.png,等等。)

我开始研究我的方法,以及前面提到的步骤:

1 - 打开拖放到 Photoshop droplet 上的 file/image。

这会随着文件自动发生——Photoshop 将打开拖放到 droplet 上的文件,从而触发规定的特定动作序列。第一步解决。下一个!

2 - 打开 PSD 文件(打开模板,脚本)

通过这一步,我写了一个打开模板文件的脚本。动作序列的第一步是这样的!

var template = new File("/Users/name/Desktop/Folder/Template.psd"); // Of course, you can have your template file anywhere on your computer as long as the path to find it is correct. I have selected my desktop for testing purposes.
app.open(template);

这是另一个毫不费力的。下一个!

3 - 更新所有智能对象(包括链接层,但受特定名称和位置限制)(非脚本,记录动作)

我需要确保模板能够轻松找到其之前链接的图层位置,以便第三步进行更新。我知道有一些方法可以用脚本更新它,但我不想修改它。在这个阶段,以我有限的知识,这对我来说太麻烦了。因此,我决定提供必要的内容,以便模板在触发“更新所有修改的内容”操作时找到一个熟悉的文件名。

在此阶段,在 Photoshop 中打开了两个文件,一个是用作模板新源的初始图像,另一个是 template.psd,其中包含需要链接的层用第一个文件的内容更新。

首先,我使用模板在搜索链接层名称时查找的名称保存了图像副本。接下来,我使用第一个图像文件的位置保存了模板的副本,以确保初始模板免受所有这些操作的影响。第三,我触发了“更新所有修改的内容”操作。瞧,一切正常。初始模板旁边有链接文件。因此,新模板副本将搜索并找到它旁边的文件,在同一个地方,folder/location,因为它发生在帮助保存它的预览步骤中。

// The following script will retrieve the path of the opened image and will save a copy that matches the name of the linked layer in the template in the same location.

var image_doc = app.documents[0]; //If two or more documents are opened, this approach will help switch between them.
var image_name = image_doc.name;
var image_path = app.documents[0].path.fsName;
var temp_image = new File("" + image_path + "/" + image_name + "");

var opts, file;
opts = new ExportOptionsSaveForWeb();
opts.format = SaveDocumentType.PNG;

var image_temp_name = "link.png";
pngFile = new File("" + image_path + "/" + image_temp_name + "");
image_doc.exportDocument(pngFile, ExportType.SAVEFORWEB, opts);


// Save a copy of the template.psd in the same location as the image and the link.png file needed to update the linked layer.

var temp_template = new File("" + image_path + "/" + image_name + "");
app.open(template);

var opts, file;
opts = new PhotoshopSaveOptions();
opts.format = SaveDocumentType.PHOTOSHOP;

var template_temp_name = "template.psd";
psdFile = new File(image_path + "/" + template_temp_name);
psdSaveOptions = new PhotoshopSaveOptions();
psdSaveOptions.embedColorProfile = true;
psdSaveOptions.alphaChannels = true;
activeDocument.saveAs(psdFile, psdSaveOptions, false, Extension.LOWERCASE);

// After these Update all Modified Content action

现在四五六就直白了:

4 - 将模板功能应用于之前刚刚更新(脚本化)的链接层。完成!

5 - 将新形成的模板另存为 PNG 文件(脚本化)。完成!

6 - 最后,关闭打开的图像和模板文档(记录的操作)。完成!