-
-
Save ma11hew28/708892 to your computer and use it in GitHub Desktop.
| // Photoshop Script to Resize & Tile Images | |
| // | |
| // WARNING!!! This script will overwrite (delete perminently) files in the | |
| // selected output folder in the rare case that there are name collisions. | |
| // Therefore, to be safe, it's best to choose an empty output folder. | |
| // | |
| // Copyright (c) 2010 Matt Di Pasquale | |
| // | |
| // Permission is hereby granted, free of charge, to any person obtaining a copy | |
| // of this software and associated documentation files (the "Software"), to deal | |
| // in the Software without restriction, including without limitation the rights | |
| // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell | |
| // copies of the Software, and to permit persons to whom the Software is | |
| // furnished to do so, subject to the following conditions: | |
| // | |
| // The above copyright notice and this permission notice shall be included in | |
| // all copies or substantial portions of the Software. | |
| // | |
| // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR | |
| // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, | |
| // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE | |
| // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER | |
| // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, | |
| // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN | |
| // THE SOFTWARE. | |
| // | |
| // Install - Save Tile Images.jsx to: | |
| // Win: C:\Program Files\Adobe\Adobe Utilities\ExtendScript Toolkit CS5\SDK | |
| // Mac: /Applications/Utilities/Adobe Utilities/ExtendScript Toolkit CS5/SDK | |
| // * Restart Photoshop. | |
| // | |
| // Update: | |
| // * Just modify & save, no need to resart Photoshop once it's installed. | |
| // | |
| // Run: | |
| // * With Photoshop open, select File > Scripts > Tile Images | |
| // * When prompted, select the input folder where your JPEGs are; click Choose. | |
| // * Then, do the same for the ouput folder, where the tiles will be saved. | |
| // * To stop the script, close the active document, i.e., click the "x" in the | |
| // upper left hand corner of the active window, and it should error out. | |
| // | |
| // Adobe Photoshop JavaScript Reference | |
| // http://www.adobe.com/devnet/photoshop/scripting.html | |
| // Turn debugger on. 0 is off. | |
| // $.level = 1; | |
| // Ask the user for the input and output folders. | |
| var inputFolder = Folder.selectDialog("Select a folder for the input files."); | |
| if (inputFolder !== null) { // clicking "Cancel" returns null | |
| var outputFolder = Folder.selectDialog("Select a folder for the output files."); | |
| if (outputFolder !== null) { | |
| var inputFiles = inputFolder.getFiles("*.jpg"); | |
| var initialPrefs = app.preferences.rulerUnits; // will restore at end | |
| app.preferences.rulerUnits = Units.PIXELS; // use pixels | |
| // Save the outputs as JPEGs using Save for Web. | |
| var sfw = new ExportOptionsSaveForWeb(); | |
| sfw.format = SaveDocumentType.JPEG; | |
| sfw.quality = 100; | |
| // Construct Tiler object to store variables. | |
| var Tiler = function (width, height, tileSize, levels) { | |
| this.width = width; | |
| this.height = height; | |
| this.tileSize = (typeof tileSize === "undefined") ? 256 : tileSize; | |
| this.levels = (typeof levels === "undefined") ? 2 : levels; | |
| this.cols = Math.ceil(width/this.tileSize); | |
| this.rows = Math.ceil(height/this.tileSize); | |
| }; | |
| var tiler = new Tiler(1024, 1536); | |
| // Resize each input file to initial size, save as tiles, and close. | |
| var f, l, r, c; // loop counters: file, level, row, column | |
| var doc, docName; // activeDocument & its name | |
| var resizedImage; // historyState after image has been resized | |
| var x1, y1, x2, y2; // cropping bounds | |
| var scale, cols, rows; // scale values | |
| for (f = 0; f < inputFiles.length; f++) { | |
| doc = open(inputFiles[f]); | |
| doc.info = null; // delete metadata | |
| docName = doc.name.slice(0, -4); // strip .jpg from name | |
| scale = 1; cols = tiler.cols; rows = tiler.rows; // reset scale | |
| for (l = 0; l < tiler.levels; l++) { | |
| doc.resizeImage(tiler.width/scale, tiler.height/scale, | |
| 326, ResampleMethod.BICUBICSHARPER); | |
| resizedImage = doc.activeHistoryState; // save for undo | |
| y1 = 0; y2 = tiler.tileSize; // start with top row | |
| for (r = 0; r < rows; r++) { | |
| x1 = 0; x2 = tiler.tileSize; // reset to left on new row | |
| for (c = 0; c < cols; c++) { | |
| doc.crop([x1, y1, x2, y2]); | |
| doc.exportDocument(new File(outputFolder+"/"+docName+"_"+ | |
| 1000/scale+"_"+c+"_"+r+".jpg"), ExportType.SAVEFORWEB, sfw); | |
| doc.activeHistoryState = resizedImage; // undo crop | |
| x1 += tiler.tileSize; x2 += tiler.tileSize; | |
| } | |
| y1 += tiler.tileSize; y2 += tiler.tileSize; // go down to next row | |
| x1 = 0; x2 = tiler.tileSize; // reset to left on new row | |
| } | |
| // Scale down for the next level. | |
| scale = scale * 2; cols = Math.ceil(cols/2); rows = Math.ceil(rows/2); | |
| } | |
| doc.close(SaveOptions.DONOTSAVECHANGES); | |
| } | |
| app.preferences.rulerUnits = initialPrefs; // restore prefs | |
| } | |
| } |
I'm not sure. Check out the Adobe Photoshop JavaScript Reference => http://www.adobe.com/devnet/photoshop/scripting.html
Thanks for this wonderful script! Great help!
I had a long search today on how to avoid this random limit of 8192 pixel width given when you save slices "for web" in Photoshop. Strange - your script uses the "save for web" feature but handles bigger pixel sizes! Cool!
I managed to adjust many parameters due to your comments. But after it now opens Tiff images I cannot figure out how to save the slices as .tif. For my pipeline I´d love to have it that way. I found snippets like
//TIFF File Save Options
var saveTIFF= new TiffSaveOptions();
saveTIFF.alphaChannels = false;
saveTIFF.annotations = false;
// Options: IBM, MACOS (default is based on OS)
saveTIFF.byteOrder = ByteOrder.MACOS
saveTIFF.embedColorProfile = false;
// Options: NONE, JPEG, TIFFLZW, TIFFZIP
saveTIFF.imageCompression = TIFFEncoding.NONE;
// Only valid for imageCompression.JPEG encoded TIFF Documents ( value of 0 - 12 )
saveTIFF.jpegQuality = 12
// Options: ZIP, RLE should only be used when you are saving layers
saveTIFF.layerCompression = LayerCompression.ZIP
saveTIFF.layers = true;
saveTIFF.saveImagePyramid = false;
saveTIFF.spotColors = false;
saveTIFF.transparency = false;
or
function SaveTIFF(saveFile){
tiffSaveOptions = new TiffSaveOptions();
tiffSaveOptions.embedColorProfile = true;
tiffSaveOptions.alphaChannels = true;
tiffSaveOptions.layers = true;
tiffSaveOptions.imageCompression = TIFFEncoding.JPEG;
tiffSaveOptions.jpegQuality=10;
activeDocument.saveAs(saveFile, tiffSaveOptions, true, Extension.LOWERCASE);
}
but unfortunately I have not the faintest experience with programming or scripting - total rookie! So sorry for this rather basic question. Can you possibly give me a hint...?
ah - I found a way:
// Save the outputs as Tiffs using Save as.
var tiffSaveOptions = new TiffSaveOptions();
tiffSaveOptions = new TiffSaveOptions();
tiffSaveOptions.embedColorProfile = true;
tiffSaveOptions.alphaChannels = false;
tiffSaveOptions.layers = false;
tiffSaveOptions.imageCompression = TIFFEncoding.TIFFLZW;
and some lines further down
doc.saveAs(new File(outputFolder+"/"+docName+""+(r+1)+""+(c+1)+".tif"), tiffSaveOptions, true, Extension.LOWERCASE);
Thanks again for the script - works perfectly!
GREAT script. I have a question regarding the initial size and the row. My sizes will vary and my code treats rows up/down - not left to right. How would I set the var tiler = new Tiler(1024, 1536); to be based on the doc size? Like: this.width = doc.width; ?