Created
April 19, 2016 23:27
-
-
Save hmiorroi/a8a1c68ab40d215096d8e82a66985606 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// | |
// 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