我有一个问题可能无法解决'开箱即用'。我正在运行烟花8,并希望能够运行:
Commands->Document->Split to layers
并使用为其创建图层的切片名称创建结果图层。因此,例如,如果我的png中有3个切片,称为“Head”,“Shoulder”和“Arm”,我希望该命令创建与切片名称对应的图层名称。目前的情况是,运行此命令时,创建的默认图层名称依次命名为“第1层”,“第2层”,“第3层”等。
这个要求的原因是因为我希望使用Export
命令将单个图层保存到使用'切片名称('Head.png'等)的命名png文件中,而不是默认的图层名称。现在我知道我可以手动重命名图层以匹配切片,并根据需要导出到文件夹。但是,在我的现实生活场景中,每个文档需要超过50个切片需要这种处理,并且我一次有100个文档来“批量”处理。所以我的想法是我能够运行一个命令(或创建某种宏),这将允许我创建与它们包含的切片同名的图层。
这将使我的生活SOO变得更加简单,因为我可以根据位于文件夹结构中的一组源图像完全自动化该过程,而不是打开每个文件,运行上述命令,手动重命名每个层(容易出错)当然)然后运行导出功能。
有人可以提供有关寻找解决方案的建议吗?我希望我不是唯一一个遇到这个要求的人。
答案 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
}
);
}