Skip to content

Instantly share code, notes, and snippets.

@hmiorroi
Created April 19, 2016 23:27
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save hmiorroi/a8a1c68ab40d215096d8e82a66985606 to your computer and use it in GitHub Desktop.
Save hmiorroi/a8a1c68ab40d215096d8e82a66985606 to your computer and use it in GitHub Desktop.
//
// png export script for Adobe Illustrator
//
// Created by hmiorroi on 10/9/14
// Modified by hmiorroi on 4/20/16
#include "json2.js"
// reqire json2.js see http://www.JSON.org/js.html
var docName = app.activeDocument.name.slice(0,-3);
var prefPath = '~/Applications/ia_exporter_pref.txt';
var option;
var defOption = {
"start" : 1,
"end" : 0,
"transparency" : false,
"scale" : 3,
"ios" : false,
"android" : false
}
var formats = {
"android":[
{
"folder":"drawable-mdpi",
"scale": 1
},
{
"folder":"drawable-hdpi",
"scale": 1.5
},
{
"folder":"drawable-xhdpi",
"scale": 2
},
{
"folder":"drawable-xxhdpi",
"scale": 3
}],
"ios" : [
{
"suffix":"",
"scale": 1
},
{
"suffix":"@2x",
"scale": 2
},
{
"suffix":"@3x",
"scale": 3
}
]};
function loadPref() {
var file = new File(prefPath);
if (file && file.exists) {
file.open('r');
var str = file.read();
option = JSON.parse(str);
file.close();
} else {
option = defOption;
}
}
function savePref() {
var file = new File(prefPath);
if (file) {
file.open('w');
file.write(JSON.stringify(option));
file.close();
}
}
function exportPNG24(exportFolder, fileName, scale, transparency) {
var opt = new ExportOptionsPNG24();
var type = ExportType.PNG24;
opt.artBoardClipping = true;
opt.antiAliasing = true;
opt.transparency = transparency;
opt.horizontalScale = scale || 100.0;
opt.verticalScale = scale || 100.0;
var saveFile = new File(exportFolder + '/' + fileName + ".png")
if(saveFile.exists) saveFile.remove();
app.activeDocument.exportFile(saveFile, type, opt);
}
function createFolder(exportFolder, name) {
var folder_path = exportFolder + "/" + name;
var fodler_to_save = new Folder(folder_path);
if(!fodler_to_save.exists) fodler_to_save.create();
return folder_path;
}
function exportiOS(exportFolder, fileName, transparency) {
var folderPath = createFolder(exportFolder, docName + "_ios");
var iosFormat = formats.ios
for (var i = 0; i < iosFormat.length; i++) {
exportPNG24(folderPath, fileName + iosFormat[i].suffix, iosFormat[i].scale * 100, transparency);
}
}
function exportAndroid(exportFolder, fileName, transparency) {
var folderPath = createFolder(exportFolder, docName + "_android");
var androidFormat = formats.android
for (var i = 0; i < androidFormat.length; i++) {
var path = createFolder(folderPath, androidFormat[i].folder);
exportPNG24(path, fileName, androidFormat[i].scale * 100, transparency);
}
}
function exportFile(option){
var op = option || {}
var doc = app.activeDocument;
var artboards_length = doc.artboards.length;
start = op.start || 1;
end = op.end || op.start;
if(start < 1) start = 1;
if(end > artboards_length) end = artboards_length;
var folder = Folder.selectDialog('Select Folder to Save Files');
for (var i = start - 1; i < end; i++) {
var artboardName = doc.artboards[i].name;
doc.artboards.setActiveArtboardIndex(i)
if (op.ios) exportiOS(folder.fsName, artboardName, op.transparency);
if (op.android) exportAndroid(folder.fsName, artboardName, op.transparency);
if (!op.ios && !op.android) {
exportPNG24(folder.fsName, artboardName, op.scale * 100, op.transparency);
}
};
}
// Dialog
loadPref();
function updateScaleField() {
if (dialog.os_ios.value || dialog.os_android.value) {
dialog.scale_value.enabled = false;
} else {
dialog.scale_value.enabled = true;
}
}
var dialog = new Window('dialog', 'Export Artboards');
dialog.start = dialog.add('statictext', undefined, 'start:');
dialog.start.size = [150,20]
dialog.start_index = dialog.add('edittext', undefined, '' );
dialog.start_index.size = [150, 40]
dialog.start_index.text = option.start;
dialog.end = dialog.add('statictext', undefined, 'end:');
dialog.end.size = [150,20]
dialog.end_index = dialog.add('edittext', undefined, '' );
dialog.end_index.size = [150, 40]
if (option.end) dialog.end_index.text = option.end;
dialog.os_ios = dialog.add('checkbox', [0,0,150,15], 'iOS');
dialog.os_ios.value = option.ios;
dialog.os_ios.onClick = function() {
updateScaleField()
}
dialog.os_android = this.dialog.add('checkbox', [0,0,150,15], 'Android');
dialog.os_android.value = option.android;
dialog.os_android.onClick = function() {
updateScaleField()
}
dialog.scale = dialog.add('statictext', undefined, 'scale:');
dialog.scale.size = [150,10]
dialog.scale_value = dialog.add('edittext', undefined, '' );
dialog.scale_value.size = [150, 40]
dialog.scale_value.text = option.scale;
dialog.transparency = dialog.add('checkbox', [0,0,150,30], 'transparency');
dialog.transparency.value = option.transparency;
updateScaleField();
dialog.okBtn = dialog.add('button', undefined, 'OK', {name:'ok'});
dialog.okBtn.size = [150, 40]
dialog.okBtn.onClick = function() {
dialog.close()
option.start = parseInt(dialog.start_index.text);
option.end = parseInt(dialog.end_index.text);
option.scale = parseInt(dialog.scale_value.text);
option.transparency = dialog.transparency.value;
option.ios = dialog.os_ios.value;
option.android = dialog.os_android.value;
exportFile(option)
savePref();
}
dialog.cancelBtn = dialog.add('button', undefined, 'Cancel', {name:'cancel'});
dialog.cancelBtn.size = [150, 40]
dialog.cancelBtn.onClick = function() {
dialog.close()
};
dialog.show()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment