|
// save tifs without transparency but with alpha channels of pixel and type layers;
// 2014, use it at your own risk;
#target photoshop
if (app.documents.length > 0) {
var myDocument = app.activeDocument;
var basename = myDocument.name.match(/(.*)\.[^\.]+$/)[1];
try {var docPath = myDocument.path}
catch (e) {var docPath = "~/Desktop"};
var theDup = myDocument.duplicate("thecopy", false);
deleteAlphaChannels();
main(theDup, docPath, basename);
theDup.close(SaveOptions.DONOTSAVECHANGES);
};
////////////////////////////////////
// getAllLayersBounds.jsx
function main (theFile, docPath, basename) {
showAllLayers();
// get number of layers;
var ref = new ActionReference();
ref.putEnumerated( charIDToTypeID("Dcmn"), charIDToTypeID("Ordn"), charIDToTypeID("Trgt") );
var applicationDesc = executeActionGet(ref);
var theNumber = applicationDesc.getInteger(stringIDToTypeID("numberOfLayers"));
//////
for (var m = 0; m <= theNumber; m++) {
try {
var ref = new ActionReference();
ref.putIndex( charIDToTypeID( "Lyr " ), m);
var layerDesc = executeActionGet(ref);
var layerSet = typeIDToStringID(layerDesc.getEnumerationValue(stringIDToTypeID("layerSection")));
var isBackground = layerDesc.getBoolean(stringIDToTypeID("background"));
var layerKind = layerDesc.getInteger(stringIDToTypeID("layerKind"));
var theName = layerDesc.getString(stringIDToTypeID('name'));
// "adjustment"
// if not layer group;
if (layerSet != "layerSectionEnd" && layerSet != "layerSectionStart" /*&& isBackground != true*/) {
if (layerKind == 1 || layerKind == 3) {
hideOthers (m);
// make duplicate;
var theDup2 = theFile.duplicate("thecopy2", true);
addTransparencyAsChannelaAndFlatten();
// save and close;
saveCopyAsTif (theDup2, docPath+"/"+basename+"_"+theName+".tif");
theDup2.close(SaveOptions.DONOTSAVECHANGES);
hideOthers (m)
};
//
};
}
catch (e) {};
};
};
////// stuff //////
function addTransparencyAsChannelaAndFlatten () {
try {
// layer mask from transparency;
// =======================================================
var idMk = charIDToTypeID( "Mk " );
var desc3 = new ActionDescriptor();
var idNw = charIDToTypeID( "Nw " );
var idChnl = charIDToTypeID( "Chnl" );
desc3.putClass( idNw, idChnl );
var idAt = charIDToTypeID( "At " );
var ref2 = new ActionReference();
var idChnl = charIDToTypeID( "Chnl" );
var idChnl = charIDToTypeID( "Chnl" );
var idMsk = charIDToTypeID( "Msk " );
ref2.putEnumerated( idChnl, idChnl, idMsk );
desc3.putReference( idAt, ref2 );
var idUsng = charIDToTypeID( "Usng" );
var idUsrM = charIDToTypeID( "UsrM" );
var idTrns = charIDToTypeID( "Trns" );
desc3.putEnumerated( idUsng, idUsrM, idTrns );
executeAction( idMk, desc3, DialogModes.NO );
// alpha channel from layer mask;
// =======================================================
var idDplc = charIDToTypeID( "Dplc" );
var desc4 = new ActionDescriptor();
var idnull = charIDToTypeID( "null" );
var ref3 = new ActionReference();
var idChnl = charIDToTypeID( "Chnl" );
var idOrdn = charIDToTypeID( "Ordn" );
var idTrgt = charIDToTypeID( "Trgt" );
ref3.putEnumerated( idChnl, idOrdn, idTrgt );
desc4.putReference( idnull, ref3 );
executeAction( idDplc, desc4, DialogModes.NO );
// remove layer mask;
// =======================================================
var idDlt = charIDToTypeID( "Dlt " );
var desc5 = new ActionDescriptor();
var idnull = charIDToTypeID( "null" );
var ref4 = new ActionReference();
var idChnl = charIDToTypeID( "Chnl" );
var idChnl = charIDToTypeID( "Chnl" );
var idMsk = charIDToTypeID( "Msk " );
ref4.putEnumerated( idChnl, idChnl, idMsk );
desc5.putReference( idnull, ref4 );
executeAction( idDlt, desc5, DialogModes.NO );
// flatten;
// =======================================================
var idFltI = charIDToTypeID( "FltI" );
executeAction( idFltI, undefined, DialogModes.NO );
} catch (e) {}
};
// by mike hale, via paul riggott;
// http://forums.adobe.com/message/1944754#1944754
function selectLayerByIndex(index,add){
add = undefined ? add = false:add
var ref = new ActionReference();
ref.putIndex(charIDToTypeID("Lyr "), index);
var desc = new ActionDescriptor();
desc.putReference(charIDToTypeID("null"), ref );
if(add) desc.putEnumerated( stringIDToTypeID( "selectionModifier" ), stringIDToTypeID( "selectionModifierType" ), stringIDToTypeID( "addToSelection" ) );
desc.putBoolean( charIDToTypeID( "MkVs" ), false );
try{
executeAction(charIDToTypeID("slct"), desc, DialogModes.NO );
}catch(e){
alert(e.message);
}
};
////// delete alpha channels //////
function deleteAlphaChannels () {
var ref = new ActionReference();
//ref.putEnumerated( charIDToTypeID("Lyr "), charIDToTypeID("Ordn"), charIDToTypeID("Trgt") );
ref.putEnumerated( charIDToTypeID("Dcmn"), charIDToTypeID("Ordn"), charIDToTypeID("Trgt") );
var docDesc = executeActionGet(ref);
var theChannels = docDesc.getString(stringIDToTypeID("numberOfChannels"));
// check channels;
for (var m = theChannels; m > 0; m--) {
var ref2 = new ActionReference();
ref2.putIndex( charIDToTypeID("Chnl"), m);
var channelDesc = executeActionGet(ref2);
var alpha = channelDesc.hasKey(stringIDToTypeID("alphaChannelOptions"));
// delete alpha channels;
if (alpha ==true) {
// keep spot channels;
if (channelDesc.getObjectValue(stringIDToTypeID("alphaChannelOptions")).getObjectValue(stringIDToTypeID("color")).hasKey(stringIDToTypeID("book")) == false) {
// =======================================================
var idDlt = charIDToTypeID( "Dlt " );
var desc7 = new ActionDescriptor();
var idnull = charIDToTypeID( "null" );
var ref1 = new ActionReference();
ref1.putIndex( charIDToTypeID("Chnl"), m);
desc7.putReference( idnull, ref1 );
executeAction( idDlt, desc7, DialogModes.NO );
};
};
};
};
////// save pdf //////
function saveCopyAsTif (myDocument, thePath) {
// tif options;
tifOpts = new TiffSaveOptions();
tifOpts.embedColorProfile = true;
tifOpts.imageCompression = TIFFEncoding.TIFFLZW;
tifOpts.alphaChannels = true;
tifOpts.byteOrder = ByteOrder.MACOS;
tifOpts.layers = true;
// save copy;
myDocument.saveAs((new File(thePath)), tifOpts, true);
};
////// hide others //////
function hideOthers (theIndex) {
// hide others;
// =======================================================
var idShw = charIDToTypeID( "Shw " );
var desc10 = new ActionDescriptor();
var idnull = charIDToTypeID( "null" );
var list4 = new ActionList();
var ref7 = new ActionReference();
ref7.putIndex( charIDToTypeID( "Lyr " ), theIndex );
list4.putReference( ref7 );
desc10.putList( idnull, list4 );
var idTglO = charIDToTypeID( "TglO" );
desc10.putBoolean( idTglO, true );
executeAction( idShw, desc10, DialogModes.NO );
};
// by mike hale, via paul riggott;
// http://forums.adobe.com/message/1944754#1944754
function selectLayerByIndex(index,add){
add = undefined ? add = false:add
var ref = new ActionReference();
ref.putIndex(charIDToTypeID("Lyr "), index);
var desc = new ActionDescriptor();
desc.putReference(charIDToTypeID("null"), ref );
if(add) desc.putEnumerated( stringIDToTypeID( "selectionModifier" ), stringIDToTypeID( "selectionModifierType" ), stringIDToTypeID( "addToSelection" ) );
desc.putBoolean( charIDToTypeID( "MkVs" ), false );
try{
executeAction(charIDToTypeID("slct"), desc, DialogModes.NO );
}catch(e){
alert(e.message);
}
};
////// show all layers //////
function showAllLayers () {
// get number of layers;
var ref = new ActionReference();
ref.putEnumerated( charIDToTypeID("Dcmn"), charIDToTypeID("Ordn"), charIDToTypeID("Trgt") );
var applicationDesc = executeActionGet(ref);
var theNumber = applicationDesc.getInteger(stringIDToTypeID("numberOfLayers"));
//////
for (var m = 0; m <= theNumber; m++) {
try {
// =======================================================
var idHd = charIDToTypeID( "Shw " );
var desc9 = new ActionDescriptor();
var idnull = charIDToTypeID( "null" );
var list1 = new ActionList();
var ref3 = new ActionReference();
ref3.putIndex( charIDToTypeID( "Lyr " ), m );
list1.putReference( ref3 );
desc9.putList( idnull, list1 );
executeAction( idHd, desc9, DialogModes.NO );
}
catch (e) {};
};
};
|