// Put this file in Program Files\Adobe\Photoshop\Presets\Scripts\layersToSprite.js // Run in PhotoShop: File > Automate > Scripts: layersToSprite.js // Arrange layers into a sprite sheet. if (documents.length > 0) { var cols = 3; windowResource = "dialog { \ orientation: 'column', \ alignChildren: ['fill', 'top'], \ preferredSize:[300, 130], \ text: 'Set number of colums for spritesheet', \ margins:15, \ sliderPanel: Panel { \ orientation: 'row', \ alignChildren: 'right', \ margins:15, \ text: ' Columns ', \ st: StaticText { text: 'Value:' }, \ sl: Slider { minvalue: 1, maxvalue: 32, value: 4, size:[220,20] }, \ te: EditText { text: '4', characters: 2, justify: 'left'} \ } \ \ bottomGroup: Group{ \ cancelButton: Button { text: 'Cancel', properties:{name:'cancel'}, size: [120,24], alignment:['right', 'center'] }, \ applyButton: Button { text: 'Apply', properties:{name:'ok'}, size: [120,24], alignment:['right', 'center'] }, \ }\ }" win = new Window(windowResource); win.sliderPanel.sl.onChange = function() { win.sliderPanel.te.text = Math.round(this.value); } win.bottomGroup.cancelButton.onClick = function() { return win.close(); }; win.bottomGroup.applyButton.onClick = function() { cols = win.sliderPanel.sl.value; docRef = activeDocument; var activeLayer = docRef.activeLayer; numLayers = docRef.artLayers.length; var rows = Math.ceil(numLayers/cols); var spriteX = docRef.width; var spriteY = docRef.height; // put things in order app.preferences.rulerUnits = Units.PIXELS; // resize the canvas newX = spriteX * cols; newY = spriteY * rows; docRef.resizeCanvas( newX, newY, AnchorPosition.TOPLEFT ); // move the layers around var rowi = 0; var coli = 0; for (i=(numLayers - 1); i >= 0; i--) { docRef.artLayers[i].visible = 1; var movX = spriteX*coli; var movY = spriteY*rowi; docRef.artLayers[i].translate(movX, movY); coli++; if (coli > (cols - 1)) { rowi++; coli = 0; } } return win.close(); }; win.show(); // -------------------------- }