我正在使用一个脚本来查找/替换项目中丢失的项目。不幸的是,我遇到了一种情况,即检测然后替换分层图像源(psd,ai等)。
1)除了解析item.name之外,我无法检测到AvItem是否为分层图像中的一层,这是不可靠的,因为用户始终可以在项目面板中重命名项目。
2)一旦我知道它是分层图像的一部分,就无法弄清楚如何将其重新链接到正确的图像,而无需用合并的图像替换该层。 item.replace(new_path)
将用整个图像代替该项目,而不是图像中的图层。例如:
var item = app.project.item(3); //assuming this is the 'layer' we want to replace
item.replace(new_path);
那么某个地方是否有一个秘密属性可以可靠地告诉我某个项目是否是分层图像的一部分,如果可以的话,是否有一种方法可以重新链接它而不用整个合并的图像替换该层?
编辑
这是一个功能,用于猜测图层是否是分层图像的一部分。它不是防弹的,但只要用户不重命名该项目,它就可以工作:
function isSourceLayered (av_item) {
// check if there is a "/"
if (av_item.name.indexOf("/") != -1) {
// check if it is in a "layers" folder
if (av_item.parentFolder.name.indexOf("Layers") != -1) {
return true;
}
}
return false;
}
答案 0 :(得分:0)
我刚刚在Adobeextendscript论坛上询问了same question。除非有未记录的功能(并且我花了一些时间在Extendscript Toolkit的数据浏览器上),否则fileSource对象似乎没有任何属性或方法来实现此目的。
有一种解决方法,您可以使用ImportOptions.importAs(ImportAsType.COMP)
导入文件,这将导入一个comp,并且您可以遍历匹配名称的图层,获取该图层的源并将其用作您的新来源。但是正如您所说,如果源已重命名,则无法使用。
我已经将此代码编写为函数,可以在github上使用。 编辑:我忘记了我改变了函数的工作方式。由于此问题,它不会重新导入图层源,它仅使用 Duplicate (复制)菜单命令。