Пакетный экспорт символов в PNG-Illustrator


Первоначально я собирался опубликовать это в https://graphicdesign.stackexchange.com/, но поскольку это кодовый вопрос, он кажется более уместным здесь.

Я хочу экспортировать все символы в открытом документе Illustrator в отдельный pngs.

Следующий 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);
}

ПС. Вот ссылка на документацию по сценариям Illustrator: http://adobe.ly/1JxLlUK

3 2

3 ответа:

@Шейн

Это действительно замечательный сценарий, спасибо, что сделали его! Я строил на нем, чтобы соответствовать моему рабочему процессу. Одна вещь, которую я заметил, заключается в том, что экспортированные PNGs не имеют того же размера, что и графика внутри символа. Ниже приведен увеличенный скриншот экспорта изображения;

Поскольку я пока не могу публиковать изображения, вот ссылка

Векторный прямоугольник 83x83px был экспортирован как 84X83PX PNG

Я исправил это, поместив символ в 0,0 ссылка на документ

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

Тогда пусть код выполняет свой курс. Я сам не программист, но это работает на моей стороне.

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
}

Это приводит к следующему списку файлов для моего набора по умолчанию: Условные обозначения:

символы png список

Для тех, кто еще нуждается в этом, вот что я превратил сценарий в:

Спасибо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");
}