我正在尝试编写一个脚本(因为我无法找到一个有效的脚本),它会将我所有单独的图层,路径等导出到透明的png文件中。我见过很多脚本,但是它们都不会导出所有图层等等。它们似乎只是尝试导出父图层。因此,如果存在子图层,则会遗漏这些图层。
这是我的剧本:
var doc = app.activeDocument;
var counter = 0;
hideOrShowItems(doc, false);
// processLayers(doc);
// displayLayer(doc, true);
function hideOrShowItems(root, show) {
for(var i = 0; i < root.layers.length; i++) {
var layer = root.layers[i];
var pathCount = layer.pathItems.length;
var layerCount = layer.layers.length;
if (pathCount > 0) {
hideOrShowPaths(layer, show);
}
if (layerCount > 0) {
hideOrShowItems(layer, show);
}
layer.visible = show;
}
}
function hideOrShowPaths(root, show) {
for(var i = 0; i < root.pathItems.length; i++) {
root.pathItems[i].visible = show;
}
}
// -- Removed for brievety
当我运行脚本时,唯一隐藏的是顶层
所有其他都没有动过。 我在 hideOrShowPaths 的for循环中放了一个计数器并执行 counter ++ ,它计数246,所以我知道它可以看到路径并且实际上是试图隐藏它们,但是它们保持可见。
以前有人这样做过吗?我可以隐藏路径,组,剪辑并将它们全部导出为pngs吗?或者我必须手动完成这个吗?
答案 0 :(得分:3)
您要查找的标记看起来是hidden
而不是visible
。
var doc = app.activeDocument;
var root = doc.layers[0];
// just for testing purpose. Change the color
var newRGBColor = new RGBColor();
newRGBColor.red = 255;
newRGBColor.green = 255;
newRGBColor.blue = 255;
// make all items hidden
for (var i = 0; i < root.pathItems.length; i++) {
var item = root.pathItems[i];
item.hidden = true;
item.fillColor = newRGBColor; // just for testing
}
// now loop all pathItems
for (var i = 0; i < root.pathItems.length; i++) {
var item = root.pathItems[i];
item.hidden = !item.hidden; //make one visible
// export visible part
redraw();
item.hidden = !item.hidden; // hide it again
}
在您的脚本中,您需要先隐藏所有项目,然后取消隐藏其中一项,再次导出并隐藏它。 我希望片段有助于解决您的问题