Skip to content

Instantly share code, notes, and snippets.

@Arahnoid
Forked from zaphire/exportSprites.js
Last active April 21, 2019 22:55
Show Gist options
  • Save Arahnoid/94760890dc956a0870c1 to your computer and use it in GitHub Desktop.
Save Arahnoid/94760890dc956a0870c1 to your computer and use it in GitHub Desktop.
[Exports as sprites]Exports photoshop layers as individual sprites, by Tuba #Photoshop
/*Maximum spriteSheet width -> FIXED*/
var maxWidth = 256;
var filename = activeDocument.name.replace(".psd","");
var file = new File(activeDocument.fullName.path+"/"+filename+".xml");
var AD = activeDocument;
var output = new File(activeDocument.fullName.path+"/"+filename+".png");
var pngOptions = new PNGSaveOptions();
/*Global control variables*/
var finalWidth = maxWidth;
var finalHeight = 0;
var nextWidth = 0;
var nextHeight = 0;
function getSpriteFromLayer(layer)
{
if (layer.typename == "LayerSet") //Layer is a Folder
{
for (var i=0; i < layer.artLayers.length; i++)
{
layer.artLayers[i].visible = true;
getSpriteFromLayer(layer.artLayers[i]);
}
}
else
{
var spriteWidth = layer.bounds[2].value - layer.bounds[0].value;
var spriteHeight = layer.bounds[3].value - layer.bounds[1].value;
if (nextWidth + spriteWidth > maxWidth)
{ //maximum width achieved, start a new row
nextWidth = 0;
nextHeight = finalHeight;
layer.translate(nextWidth - layer.bounds[0].value,nextHeight - layer.bounds[1].value);
}
else
{
layer.translate(nextWidth - layer.bounds[0].value ,nextHeight - layer.bounds[1].value);
}
if (nextHeight + spriteHeight > finalHeight)
finalHeight = nextHeight + spriteHeight;
//write the sprite data
file.writeln("<sprite>");
file.writeln("<name>"+layer.name+"</name>");
file.writeln("<x>"+(layer.bounds[0].value)+"</x>");
file.writeln("<y>"+(layer.bounds[1].value)+"</y>");
file.writeln("<width>"+spriteWidth+"</width>");
file.writeln("<height>"+spriteHeight+"</height>");
file.writeln("</sprite>");
nextWidth += spriteWidth + 1;
}
}
preferences.rulerUnits = Units.PIXELS;
pngOptions.formatOptions = FormatOptions.STANDARDBASELINE;
file.open("w");
file.writeln("<?xml version=\"1.0\" encoding=\"UTF-8\"?>");
file.writeln("<spritesheet>");
file.writeln("<sheetfile>"+filename+".png</sheetfile>");
for (var i=0; i < AD.layers.length; i++)
{
AD.layers[i].visible = true; //Make sure that the layer is visible
getSpriteFromLayer(AD.layers[i]);
}
file.writeln("</spritesheet>");
file.close();
AD.resizeCanvas(finalWidth, finalHeight, AnchorPosition.TOPLEFT);
AD.saveAs(output ,pngOptions ,true, Extension.LOWERCASE);
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment