如何使用打开的图像更新 PSD 文件链接层
How to update a PSD file linked layer with opened image
我有点卡住了。我为 Photoshop 创建了一个脚本,它可以打开一个 PSD 文件,其中包含几个图层和一个链接图层,类似于模板。
到目前为止,我通过创建一个 运行 具有以下步骤和脚本的 droplet 来为我工作:
- 打开掉落的 file/image。
- 正在打开 PSD 文件(打开模板,脚本化)。
- 更新所有智能对象(包括链接层,但受特定名称和位置限制)(非脚本,记录动作)。
- 将模板功能应用于之前已更新(脚本化)的链接层。
- 保存 PNG 文件(脚本化),
- 最后,关闭打开的图像和模板文档(记录的操作)。
到目前为止一切都很好。但这有一个限制。它一次只能处理一个文件,具有特定名称,位于特定位置。因此,例如,要使更新链接层起作用,图像的名称必须 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 - 最后,关闭打开的图像和模板文档(记录的操作)。完成!
我有点卡住了。我为 Photoshop 创建了一个脚本,它可以打开一个 PSD 文件,其中包含几个图层和一个链接图层,类似于模板。
到目前为止,我通过创建一个 运行 具有以下步骤和脚本的 droplet 来为我工作:
- 打开掉落的 file/image。
- 正在打开 PSD 文件(打开模板,脚本化)。
- 更新所有智能对象(包括链接层,但受特定名称和位置限制)(非脚本,记录动作)。
- 将模板功能应用于之前已更新(脚本化)的链接层。
- 保存 PNG 文件(脚本化),
- 最后,关闭打开的图像和模板文档(记录的操作)。
到目前为止一切都很好。但这有一个限制。它一次只能处理一个文件,具有特定名称,位于特定位置。因此,例如,要使更新链接层起作用,图像的名称必须 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 - 最后,关闭打开的图像和模板文档(记录的操作)。完成!