Skip to content

Instantly share code, notes, and snippets.

@pdalfarr
Forked from labodj/Output Android Assets.jsx
Last active October 9, 2020 19:52
Show Gist options
  • Star 2 You must be signed in to star a gist
  • Fork 2 You must be signed in to fork a gist
  • Save pdalfarr/10271735 to your computer and use it in GitHub Desktop.
Save pdalfarr/10271735 to your computer and use it in GitHub Desktop.
// 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 \r\r"
+ " -> XXHDPI, XXXHDPI, XHDPI, XHDPI, HDPI, TVDPI, MDPI, and LDPI <-\r\r"
+ "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 dirxxxhdpi = Folder(inputFolder+"/drawable-xxxhdpi");
if(!dirxxxhdpi.exists) dirxxxhdpi.create();
var dirxxhdpi = Folder(inputFolder+"/drawable-xxhdpi");
if(!dirxxhdpi.exists) dirxxhdpi.create();
var dirxhdpi = Folder(inputFolder+"/drawable-xhdpi");
if(!dirxhdpi.exists) dirxhdpi.create();
var dirhdpi = Folder(inputFolder+"/drawable-hdpi");
if(!dirhdpi.exists) dirhdpi.create();
var dirtvdpi = Folder(inputFolder+"/drawable-tvdpi");
if(!dirtvdpi.exists) dirtvdpi.create();
var dirmdpi = Folder(inputFolder+"/drawable-mdpi");
if(!dirmdpi.exists) dirmdpi.create();
var dirldpi = Folder(inputFolder+"/drawable-ldpi");
if(!dirldpi.exists) dirldpi.create();
// ldpi | mdpi | tvdpi | hdpi | xhdpi | xxhdpi | xxxhdpi
// 0.75 | 1 | 1.33 | 1.5 | 2 | 3 | 4
// Open each file in turn
for (var i = 0; i < fileList.length; i++) {
// Open file
open(fileList[i]);
// Make XXXHDPI
resize(dirxxxhdpi);
// Make XXHDPI
resize(dirxxhdpi, '75%');
// Make XHDPI
resize(dirxhdpi, '50%');
// Make HDPI
resize(dirhdpi,'37.5%');
// Make TVDPI
resize(dirtvdpi,'33.25%');
// Make MDPI
resize(dirmdpi,'25%');
// Make LDPI
resize(dirldpi,'18.75%');
// 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