Пакетный экспорт символов в 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 ответа:
@Шейн
Это действительно замечательный сценарий, спасибо, что сделали его! Я строил на нем, чтобы соответствовать моему рабочему процессу. Одна вещь, которую я заметил, заключается в том, что экспортированные 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 }
Это приводит к следующему списку файлов для моего набора по умолчанию: Условные обозначения:
Для тех, кто еще нуждается в этом, вот что я превратил сценарий в:
Спасибо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"); }