1

我有一个问题可能无法“开箱即用”解决。我正在运行烟花 8,并希望能够运行:

Commands->Document->Split to layers

并使用为其创建图层的切片的名称创建生成的图层。例如,如果我的 png 中有 3 个切片,分别称为“头”、“肩”和“臂”,我希望该命令创建与切片名称对应的图层名称。就目前而言,在运行此命令时,创建的默认图层名称按顺序命名为“Layer 1”、“Layer 2”、“Layer 3”等。

这个要求的原因是因为我希望使用Export命令将各个图层保存到使用“切片名称('Head.png'等)而不是默认图层名称的命名 png 文件中。现在我知道我可以手动重命名图层以匹配切片,并根据需要导出到文件夹。然而,在我的现实生活场景中,每个文档有超过 50 个切片需要这种处理,并且我一次有 100 个文档来“批处理”过程。所以我的想法是我将能够运行一个命令(或创建某种宏),这将允许我创建与它们包含的切片同名的层。

这将使我的生活变得更加简单,因为我可以根据位于文件夹结构中的一组源图像完全自动化该过程,而不是打开每个文件,运行上述命令,手动重命名每一层(当然容易出错)然后运行导出功能。

任何人都可以提供有关寻找解决方案的建议吗?我希望我不是唯一遇到此要求的人。

4

2 回答 2

1

我在此处的 Split to Layers 命令中添加了一行。如果您将其保存Distribute to Named Layers.jsf在与原始命令相同的文件夹中(在 CS5.5 中我在Configuration/Commands/Document中找到它),我认为这应该可以满足您的需要。

也就是说,jsf 在我的经验中是相当不可预测的(例如,该命令似乎错过了诸如 Rectangles 之类的默认名称,直到它们被重命名),所以我不确定它是否会 100% 工作。此外,该脚本跳过了 5.5 中包含切片的Web 层——我不记得 8 中的设置是否不同。但希望这能让您有所了解。

于 2013-03-25T19:46:54.190 回答
1

仅供参考 - 这是最终programatic修复的内容(感谢大卫米尔)

// This command will take multiple objects and move them to indivdual layers
// and then prompt for a folder location to save the layers as named-layer.png
// files. This is ultra useful if you want to save slices out to individual
// files and wish to have total control over the resulting file names

var curDoc = fw.getDocumentDOM();
// Save the current frame in the document
var curFrameNum = curDoc.currentFrameNum;

// get the total layers minus the web layer
var numLayers = curDoc.layers.length - 1;  // skip the web layer.

var curLayerNum;

// default to d:\ for now
var locFolder = fw.browseForFolderURL("select a folder", "file:///d|/");

// 23/3/2013 add dialog box for file
if (locFolder !== null) {
    // loop through the current number of layers
    for (curLayerNum = numLayers - 1; curLayerNum >= 0; curLayerNum--) {
        // get the current layer
        var curLayer = curDoc.layers[curLayerNum];

        // get the elements on the current layer
        var elements = curLayer.frames[curFrameNum].elements;
        //if layer is locked cannot distribute so continue to next layer.
        if (curLayer.frames[curFrameNum].locked == true)
            continue;
        // get the number of elements
        var numElements = elements.length - 1;
        var i;

        // loop through the number of elements
        for (i = 0; i < numElements; i++) {
            // get the current layer number
            if (i == 0) curDoc.currentLayerNum = curLayerNum;
            // add layers for the number of elements
            curDoc.addNewLayer(null, false);
        }
        // again loop through the number of elements
        for (i = 0; i < numElements; i++) {
            // set the current layer
            curLayer = curDoc.layers[curLayerNum];
            // get the elements on the current layer
            elements = curLayer.frames[curFrameNum].elements;
            // select none
            curDoc.selectNone();
            // create a new array that will hold the selection
            var sel = new Array();
            // populate the array
            sel[0] = elements[elements.length - 2];

            // EDIT - 25/3/2013 rename target layer if element has a name
            curDoc.setLayerName(curLayerNum + i + 1, sel[0].name || "");

            // select all of the elements of the array in Fireworks
            fw.selection = sel;
            // move the selection to its new layer
            curDoc.moveSelectionToLayer(curLayerNum + i + 1, false, "none", -1);
        }
    }

    // EDIT - 25/3/2013 set to png32 export option
    set_export_as_png_32(curDoc);
    fw.exportLayers(curDoc, locFolder);
}


function set_export_as_png_32(targetDoc) {
    targetDoc.setExportOptions(
        {
            animAutoCrop: true,
            animAutoDifference: true,
            applyScale: false,
            colorMode: "32 bit",
            crop: false,
            cropBottom: 0,
            cropLeft: 0,
            cropRight: 0,
            cropTop: 0,
            ditherMode: "none",
            ditherPercent: 100,
            exportFormat: "PNG",
            frameInfo: [],
            interlacedGIF: false,
            jpegQuality: 80,
            jpegSelPreserveButtons: false,
            jpegSelPreserveText: true,
            jpegSelQuality: 90,
            jpegSelQualityEnabled: false,
            jpegSmoothness: 0,
            jpegSubsampling: 0,
            localAdaptive: true,
            lossyGifAmount: 0,
            macCreator: "",
            macFileType: "",
            name: "PNG32",
            numCustomEntries: 0,
            numEntriesRequested: 0,
            numGridEntries: 6,
            optimized: true,
            paletteEntries: null,
            paletteInfo: null,
            paletteMode: "adaptive",
            paletteTransparency: "none",
            percentScale: 100,
            progressiveJPEG: false,
            savedAnimationRepeat: 0,
            sorting: "none",
            useScale: true,
            webSnapAdaptive: false,
            webSnapTolerance: 14,
            xSize: 0,
            ySize: 0
        }
    );
}
于 2013-03-26T14:17:00.787 回答