-
-
Save labodj/3865016 to your computer and use it in GitHub Desktop.
Photoshop script to output Android XHDPI, HDPI, MDPI, LDPI PNGs from XHDPI PNG or PSD Sources
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
// Output Android Assets.jsx | |
// 2012 Jacopo Labardi www.facebook.com/jacopo.labardi | |
// License: none (public domain) | |
// v1.1 | |
// | |
// The Original script is made by Todd Linkner, but I found it quite buggy | |
// I modified it to correct some bugs | |
// | |
// This scrip is for Photoshop CS6 only (32 & 64bit). | |
// It outputs Android XHDPI, HDPI, MDPI, and LDPI PNG assets | |
// from XHDPI source files in psd or png format. | |
// The resulting PNGs will be placed in sub-folders within your target folder. | |
// My XHDPI all screen format is: 720x1280 320ppi | |
/* | |
// BEGIN__HARVEST_EXCEPTION_ZSTRING | |
<javascriptresource> | |
<name>$$$/JavaScripts/OutputAndroidAssets/MenuAlt=Output Android Assets</name> | |
<category>mobile</category> | |
</javascriptresource> | |
// END__HARVEST_EXCEPTION_ZSTRING | |
*/ | |
// open Photoshop | |
#target "photoshop" | |
main(); | |
function main() { | |
// Ask user for source deletion | |
var cleanup = confirm("This script outputs Android XHDPI, HDPI, MDPI, " | |
+ "and LDPI PNG assets from XHDPI source files.\r\r" | |
+ "Do you want to delete your original files when " | |
+ "complete?"); | |
if (cleanup) { | |
var cleanup2 = confirm("Are you REALLY sure you want to delete" | |
+ "your .PSD SOURCE files?"); } | |
// Ask user which format for source files | |
var sformat = confirm("which is the extension of the source files? \r\r" | |
+"Yes = psd\r" | |
+"No = png") | |
// Ask user for input folder | |
var inputFolder = Folder.selectDialog("Select a folder to process"); | |
if (inputFolder == null) { | |
alert ("No folder selected. Exting script.","Error!"); | |
return (0); | |
} | |
// get all PSD files in the input folder | |
if (sformat) var fileList = inputFolder.getFiles("*.psd"); | |
else var fileList = inputFolder.getFiles("*.png") | |
// Make output folders | |
var dirxhdpi = Folder(inputFolder+"/drawable-xhdpi"); | |
if(!dirxhdpi.exists) dirxhdpi.create(); | |
var dirhdpi = Folder(inputFolder+"/drawable-hdpi"); | |
if(!dirhdpi.exists) dirhdpi.create(); | |
var dirmdpi = Folder(inputFolder+"/drawable-mdpi"); | |
if(!dirmdpi.exists) dirmdpi.create(); | |
var dirldpi = Folder(inputFolder+"/drawable-ldpi"); | |
if(!dirldpi.exists) dirldpi.create(); | |
// Open each file in turn | |
for (var i = 0; i < fileList.length; i++) { | |
// Open file | |
open(fileList[i]); | |
// Make XHDPI | |
resize(dirxhdpi); | |
// Make HDPI | |
resize(dirhdpi,'75%'); | |
// Make MDPI | |
resize(dirmdpi,'50%'); | |
// Make LDPI | |
resize(dirldpi,'37.5%'); | |
// Close and do not save | |
app.activeDocument.close(SaveOptions.DONOTSAVECHANGES); | |
// Delete the original if required | |
if (cleanup2) fileList[i].remove(); | |
} | |
alert("Job Done!","Success"); | |
} | |
function resize(dir,percent) { | |
var ShowExtension = "n"; | |
// Setup file name | |
var fname = app.activeDocument.name.replace(/\s+/g, '_').replace(/([a-z\d])([A-Z])/g, '$1_$2').toLowerCase(); | |
di=(fname).indexOf("."); | |
fname2 = (fname).substr(0, di); | |
//use extension if set | |
if ( ShowExtension == "y" ) | |
{ | |
fname2 = fname | |
} | |
// Set export options | |
var opts, file; | |
opts = new ExportOptionsSaveForWeb(); | |
opts.format = SaveDocumentType.PNG | |
opts.transparency = true; | |
opts.blur = 0.0 | |
opts.interlaced = false; | |
opts.optimized = true; | |
opts.includeProfile = false; | |
opts.quality = 100 | |
opts.PNG8 = false; | |
// Duplicate, resize and export | |
var tempfile = app.activeDocument.duplicate(); | |
if (percent != undefined) tempfile.resizeImage(percent,percent); | |
file = new File(dir+"/"+fname2+".png"); | |
tempfile.exportDocument(file, ExportType.SAVEFORWEB, opts); | |
tempfile.close(SaveOptions.DONOTSAVECHANGES); | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment