Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/477.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 用于重命名图层的Photoshop脚本将使其全部可见_Javascript_Photoshop - Fatal编程技术网

Javascript 用于重命名图层的Photoshop脚本将使其全部可见

Javascript 用于重命名图层的Photoshop脚本将使其全部可见,javascript,photoshop,Javascript,Photoshop,我写了一个小JS脚本来重命名层名称,这样它们都是唯一的。它只是递归地遍历你打开的Photoshop文档中的所有图层,并列出所有的名称。如果它发现一个名称已经在该列表中,它将在图层名称后面附加一个数字,直到它找到一个唯一的名称 我有这个功能,但是一个奇怪的行为是,在这个脚本运行的过程中,它使每一层都可见。我的脚本的任何部分都不会影响可见性。在测试中,我添加了线条,在检查/重命名每一层后关闭其可见性,但这不会改变任何东西。每一层在末尾仍然可见 作为参考,我使用Photoshop CS2,脚本通过文件

我写了一个小JS脚本来重命名层名称,这样它们都是唯一的。它只是递归地遍历你打开的Photoshop文档中的所有图层,并列出所有的名称。如果它发现一个名称已经在该列表中,它将在图层名称后面附加一个数字,直到它找到一个唯一的名称

我有这个功能,但是一个奇怪的行为是,在这个脚本运行的过程中,它使每一层都可见。我的脚本的任何部分都不会影响可见性。在测试中,我添加了线条,在检查/重命名每一层后关闭其可见性,但这不会改变任何东西。每一层在末尾仍然可见

作为参考,我使用Photoshop CS2,脚本通过文件>脚本>重命名重复层运行

下面是我用来禁用可见性的两行代码(不起作用):

这是常规脚本的全部内容,它根本不试图改变可见性

function main()
{
    if (app.documents.length <= 0)
    {
        return;
    }

    var doc = app.activeDocument;
    layerNames = [];
    renameLayerNames(doc, layerNames);
    alert("Script complete.");
}

// Recursively iterate over layers to rename them
function renameLayerNames(layerSet, layerNames)
{
    var name = '';
    for (var i = 0; i < layerSet.artLayers.length; i++)
    {
        name = layerSet.artLayers[i].name;
        name = uniqueName(name, layerNames);
        layerSet.artLayers[i].name = name;
    }
    for (var i = 0; i < layerSet.layerSets.length; i++)
    {
        name = layerSet.layerSets[i].name;
        name = uniqueName(name, layerNames);
        layerSet.layerSets[i].name = name;

        // Recurse
        renameLayerNames(layerSet.layerSets[i], layerNames);
    }
}

// Ensure name is unique, or add an incrementing number to it.
function uniqueName(name, layerNames)
{
    dupe = 0;
    original = name;
    while (contains(layerNames, name)){
        dupe++;
        name = original + ' ' + dupe.toString();
    }
    layerNames.push(name);
    return name;
}

// Check if array contains object
function contains(array, object)
{
    for (var i = 0; i < array.length; i++){
        if (array[i] == object){
            return true
        }
    }
    return false
}
函数main()
{

如果(app.documents.length我相信该属性是可见的,而不是可见的,即

layerSet.artLayers[i].visible = false;
layerSet.layerSets[i].visible = false;

啊哈,你说得对,效果很好。你不知道为什么脚本会使层在原始脚本中可见,是吗?我相信通过编程重命名层会将其设置为可见,可能只是一个bug,在以后的版本中不会。
function main()
{
    if (app.documents.length <= 0)
    {
        return;
    }

    var doc = app.activeDocument;
    layerNames = [];
    renameLayerNames(doc, layerNames);
    alert("Script complete.");
}

// Recursively iterate over layers to rename them
function renameLayerNames(layerSet, layerNames)
{
    var name = '';
    for (var i = 0; i < layerSet.artLayers.length; i++)
    {
        name = layerSet.artLayers[i].name;
        name = uniqueName(name, layerNames);
        layerSet.artLayers[i].name = name;
    }
    for (var i = 0; i < layerSet.layerSets.length; i++)
    {
        name = layerSet.layerSets[i].name;
        name = uniqueName(name, layerNames);
        layerSet.layerSets[i].name = name;

        // Recurse
        renameLayerNames(layerSet.layerSets[i], layerNames);
    }
}

// Ensure name is unique, or add an incrementing number to it.
function uniqueName(name, layerNames)
{
    dupe = 0;
    original = name;
    while (contains(layerNames, name)){
        dupe++;
        name = original + ' ' + dupe.toString();
    }
    layerNames.push(name);
    return name;
}

// Check if array contains object
function contains(array, object)
{
    for (var i = 0; i < array.length; i++){
        if (array[i] == object){
            return true
        }
    }
    return false
}
layerSet.artLayers[i].visible = false;
layerSet.layerSets[i].visible = false;