创建以切片命名的图层

时间:2013-03-25 16:40:35

标签: fireworks

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

Commands->Document->Split to layers

并使用为其创建图层的切片名称创建结果图层。因此,例如,如果我的png中有3个切片,称为“Head”,“Shoulder”和“Arm”,我希望该命令创建与切片名称对应的图层名称。目前的情况是,运行此命令时,创建的默认图层名称依次命名为“第1层”,“第2层”,“第3层”等。

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

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

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

2 个答案:

答案 0 :(得分:1)

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

那就是说,jsf在我的经验中是相当不可预测的(例如,该命令似乎错过了像Rectangles这样的东西的默认名称,直到它们被重命名),所以我不确定它是否会100%工作时间。此外,该脚本会跳过 Web Layer ,其中包含5.5中的切片 - 我不记得8中的设置是否有所不同。希望这会让你有一些方法。

答案 1 :(得分: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
        }
    );
}