批量导出符号到PNG - Illustrator

时间:2015-07-30 13:28:07

标签: javascript png batch-processing symbols adobe-illustrator

我原本打算在https://graphicdesign.stackexchange.com/发布此内容,但由于这是一个代码问题,因此在这里似乎更合适。

我想将打开的Illustrator文档中的所有符号导出为单独 png。

以下javascript(.jsx)脚本非常接近,但是导出的png是空的,这告诉我仍然存在大量遗漏。

缺少的元素是什么?

var doc = app.activeDocument;  
var symbolCount = doc.symbols.length;  

$.writeln(symbolCount + " symbols"); // log symbol count

for(var i = 0; i < doc.symbols.length; i++) {
    $.writeln(doc.symbols[i].name); // log symbol names

   var dir = doc.path; // save to document's folder
   dir.changePath(doc.symbols[i].name + '.png');
   savePNG(dir);
}

// Save PNG file

function savePNG(file) {
   // export SAVE-FOR-WEB options
   var exp = new ExportOptionsPNG24();
   exp.transparency = true;

   // export as SAVE-FOR-WEB
   doc.exportFile(file, ExportType.PNG24, exp);
}

PS。这是Illustrator脚本文档的链接: http://adobe.ly/1JxLlUK

3 个答案:

答案 0 :(得分:2)

<强> @shane

这是一个非常精彩的剧本,感谢你的成功!我建立在它上面以适合我的工作流程。我注意到的一件事是导出的PNG与符号内的图形具有相同的尺寸。下面是图像导出的放大屏幕截图;

since I'm not allowed to post images yet, here's a link

83x83px矢量矩形导出为84x83px PNG

我通过将符号放在文档的0,0引用

来更正此问题
// place a symbol instance - temp
var symbol = doc.symbolItems.add(doc.symbols[i]);
    symbol.top = 0;
    symbol.left = 0;

然后让代码运行它的过程。我自己不是程序员,但它最终会起作用。

答案 1 :(得分:1)

doc.exportFile执行您告诉它的操作 - 因此它会导出文档的PNG

要导出符号,请将每个符号逐个放入文档中,将整个内容导出为PNG(请注意,文档本身的任何内容也将导出!),然后再次删除符号实例

for循环只需要一点点补充:

for(var i = 0; i < doc.symbols.length; i++) {
    $.writeln(doc.symbols[i].name); // log symbol names

    s = doc.symbolItems.add(doc.symbols[i]); // place a Symbol instance

   var dir = doc.path; // save to document's folder
   dir.changePath(doc.symbols[i].name + '.png');
   savePNG(dir);
   s.remove();  // .. and delete it here
}

这导致我的默认符号集的以下文件列表:

symbols png list

答案 2 :(得分:1)

对于其他需要此功能的人,请参阅以下内容:

感谢 Jongware 提供帮助。

/*
 * Export Symbols as PNGs - Illustrator
 * --------------------------------------
 * Created By Shane Parsons - 30PT Design Inc.
 * http://30ptdesign.com/
 */

var doc = app.activeDocument;
var symbolCount = doc.symbols.length;

if (symbolCount >= 1) {

    if (confirm("Are all your layers hidden?")) {

        // choose directory
        var dest = Folder(doc.path).selectDlg();

        // folder chosen
        if (dest) {

            // create temp layer
            doc.layers.add();

            // loop through symbols
            for (var i = 0; i < doc.symbols.length; i++) {

                // place a symbol instance - temp
                var symbol = doc.symbolItems.add(doc.symbols[i]);

                // assign name
                var filename = (doc.symbols[i].name)

                // export symbols
                savePNG(dest, filename);

                // delete temp symbol instance
                symbol.remove();
            }
            // remove temp layer
            doc.layers[0].remove();
        }
    }

    function savePNG(dest, filename) {
        // save options
        var type = ExportType.PNG24;
        var options = new ExportOptionsPNG24();
        options.transparency = true;

        // file
        var file = new File(dest + "/" + filename);

        // export
        doc.exportFile(file, type, options);
    }

} else {
    alert("You don't have any symbols in this document");
}