Copy link to clipboard
Copied
I found a script written by Sir @c.pfaffenbichler . . . The properties of the selected layers are reset...
for example, Let's say the Density (or ) feather values of the selected layer's properties are changing.
It works fine to change the mask when running the scripts, but the porperties value is reset
If you can fix this, please help.
// apply active selection as layer masks to selected layers;
// 2020, use it at your own risk;
if(app.documents.length != 0) {
applyLayerMasksToLayers();
};
////// apply layer masks to selected layers //////
function applyLayerMasksToLayers(){
var theLayers = getSelectedLayersIdx();
var selection = hasSelection();
if (selection == true) {app.activeDocument.selection.deselect()};
for(i = 0; i < theLayers.length; i++){
selectLayerByIndex(theLayers[i], false);
// remove existing mask;
if (hasLayerMask (theLayers[i]) == true) {
var desc8 = new ActionDescriptor();
var ref5 = new ActionReference();
var idchannel = stringIDToTypeID( "channel" );
ref5.putEnumerated( idchannel, idchannel, stringIDToTypeID( "mask" ) );
desc8.putReference( stringIDToTypeID( "null" ), ref5 );
executeAction( stringIDToTypeID( "delete" ), desc8, DialogModes.NO );
};
// load selection;
reselect ();
// apply layer mask;
if (selection == true) {makeLayerMask('RvlS')}
else {makeLayerMask('RvlA')};
}
};
////// by paul mr //////
function getSelectedLayersIdx(){
var selectedLayers = new Array;
var ref = new ActionReference();
ref.putEnumerated( charIDToTypeID("Dcmn"), charIDToTypeID("Ordn"), charIDToTypeID("Trgt") );
var desc = executeActionGet(ref);
if( desc.hasKey( stringIDToTypeID( 'targetLayers' ) ) ){
desc = desc.getList( stringIDToTypeID( 'targetLayers' ));
var c = desc.count
var selectedLayers = new Array();
for(var i=0;i<c;i++){
try{
activeDocument.backgroundLayer;
selectedLayers.push( desc.getReference( i ).getIndex() );
}catch(e){
selectedLayers.push( desc.getReference( i ).getIndex()+1 );
}
}
}else{
var ref = new ActionReference();
ref.putProperty( charIDToTypeID("Prpr") , charIDToTypeID( "ItmI" ));
ref.putEnumerated( charIDToTypeID("Lyr "), charIDToTypeID("Ordn"), charIDToTypeID("Trgt") );
try{
activeDocument.backgroundLayer;
selectedLayers.push( executeActionGet(ref).getInteger(charIDToTypeID( "ItmI" ))-1);
}catch(e){
selectedLayers.push( executeActionGet(ref).getInteger(charIDToTypeID( "ItmI" )));
}
}
return selectedLayers;
};
////// by mike hale, via paul riggott //////
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);
}
};
////// add layer mask //////
function makeLayerMask(maskType) {
try {
if( maskType == undefined) maskType = 'RvlA' ; //from selection
// =======================================================
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 ref1 = new ActionReference();
var idChnl = charIDToTypeID( "Chnl" );
var idChnl = charIDToTypeID( "Chnl" );
var idMsk = charIDToTypeID( "Msk " );
ref1.putEnumerated( idChnl, idChnl, idMsk );
desc3.putReference( idAt, ref1 );
var idUsng = charIDToTypeID( "Usng" );
var idUsrM = charIDToTypeID( "UsrM" );
var idRvlA = charIDToTypeID(maskType);
desc3.putEnumerated( idUsng, idUsrM, idRvlA );
executeAction( idMk, desc3, DialogModes.NO );
} catch (e) {return false};
};
////// check for selection //////
function hasSelection(){
var ref10 = new ActionReference();
ref10.putProperty(stringIDToTypeID("property"), stringIDToTypeID("selection"));
ref10.putEnumerated( charIDToTypeID( "Dcmn" ), charIDToTypeID( "Ordn" ), charIDToTypeID( "Trgt" ) );
var docDesc = executeActionGet(ref10);
return docDesc.hasKey(stringIDToTypeID("selection"));
};
////// reselect //////
function reselect () {
try {
var idsetd = charIDToTypeID( "setd" );
var desc7 = new ActionDescriptor();
var idnull = charIDToTypeID( "null" );
var ref2 = new ActionReference();
var idChnl = charIDToTypeID( "Chnl" );
var idfsel = charIDToTypeID( "fsel" );
ref2.putProperty( idChnl, idfsel );
desc7.putReference( idnull, ref2 );
var idT = charIDToTypeID( "T " );
var idOrdn = charIDToTypeID( "Ordn" );
var idPrvs = charIDToTypeID( "Prvs" );
desc7.putEnumerated( idT, idOrdn, idPrvs );
executeAction( idsetd, desc7, DialogModes.NO );
} catch (e) {return false}
};
////// has layer mask //////
function hasLayerMask (theIndex) {
var m_Dsc01, m_Ref01;
m_Ref01 = new ActionReference();
m_Ref01.putIndex(charIDToTypeID("Lyr "), theIndex);
//m_Ref01.putEnumerated(sTID("layer"), cTID("Ordn"), cTID("Trgt"));
m_Dsc01 = executeActionGet(m_Ref01);
return m_Dsc01.hasKey(charIDToTypeID("Usrs"));
};
Technically the settings are not »reset«, the existing Layer Masks are removed outright.
Edit: I haven’t tested this extensively, so please do your own testing.
// apply active selection as layer masks to selected layers;
// 2024, use it at your own risk;
if (app.documents.length > 0) {
applyLayerMasksToLayers();
};
////// apply layer masks to selected layers //////
function applyLayerMasksToLayers(){
var theLayers = getSelectedLayersIdx();
var selection = hasSelection();
if (selection
...
Copy link to clipboard
Copied
Technically the settings are not »reset«, the existing Layer Masks are removed outright.
Edit: I haven’t tested this extensively, so please do your own testing.
// apply active selection as layer masks to selected layers;
// 2024, use it at your own risk;
if (app.documents.length > 0) {
applyLayerMasksToLayers();
};
////// apply layer masks to selected layers //////
function applyLayerMasksToLayers(){
var theLayers = getSelectedLayersIdx();
var selection = hasSelection();
if (selection == true) {app.activeDocument.selection.deselect()};
for(i = 0; i < theLayers.length; i++){
selectLayerByIndex(theLayers[i], false);
// remove existing mask;
if (hasLayerMask (theLayers[i]) == true) {
// determine density and feather;
var ref = new ActionReference();
ref.putEnumerated( charIDToTypeID("Lyr "), charIDToTypeID("Ordn"), charIDToTypeID("Trgt") );
var layerDesc = executeActionGet(ref);
var theDensity = Math.round(layerDesc.getInteger(stringIDToTypeID("userMaskDensity")) / 255 * 100);
var theFeatherValue = layerDesc.getUnitDoubleValue(stringIDToTypeID("userMaskFeather"));
var theFeatherType = layerDesc.getUnitDoubleType(stringIDToTypeID("userMaskFeather"));
alert (theDensity+"\n"+theFeatherValue+"\n"+theFeatherType);
// delete mask;
var desc8 = new ActionDescriptor();
var ref5 = new ActionReference();
var idchannel = stringIDToTypeID( "channel" );
ref5.putEnumerated( idchannel, idchannel, stringIDToTypeID( "mask" ) );
desc8.putReference( stringIDToTypeID( "null" ), ref5 );
executeAction( stringIDToTypeID( "delete" ), desc8, DialogModes.NO );
};
// load selection;
reselect ();
// apply layer mask;
if (selection == true) {makeLayerMask('RvlS')}
else {makeLayerMask('RvlA')};
// apply density;
var desc14 = new ActionDescriptor();
var ref2 = new ActionReference();
ref2.putEnumerated( stringIDToTypeID( "layer" ), stringIDToTypeID( "ordinal" ), stringIDToTypeID( "targetEnum" ) );
desc14.putReference( stringIDToTypeID( "null" ), ref2 );
var desc15 = new ActionDescriptor();
desc15.putUnitDouble( stringIDToTypeID( "userMaskDensity" ), stringIDToTypeID( "percentUnit" ), theDensity );
desc14.putObject( idto = stringIDToTypeID( "to" ), stringIDToTypeID( "layer" ), desc15 );
executeAction( stringIDToTypeID( "set" ), desc14, DialogModes.NO );
// apply feather;
var desc14 = new ActionDescriptor();
var ref2 = new ActionReference();
ref2.putEnumerated( stringIDToTypeID( "layer" ), stringIDToTypeID( "ordinal" ), stringIDToTypeID( "targetEnum" ) );
desc14.putReference( stringIDToTypeID( "null" ), ref2 );
var desc15 = new ActionDescriptor();
desc15.putUnitDouble( stringIDToTypeID( "userMaskFeather" ), theFeatherType, theFeatherValue );
desc14.putObject( idto = stringIDToTypeID( "to" ), stringIDToTypeID( "layer" ), desc15 );
executeAction( stringIDToTypeID( "set" ), desc14, DialogModes.NO );
}
};
////// by paul mr //////
function getSelectedLayersIdx(){
var selectedLayers = new Array;
var ref = new ActionReference();
ref.putEnumerated( charIDToTypeID("Dcmn"), charIDToTypeID("Ordn"), charIDToTypeID("Trgt") );
var desc = executeActionGet(ref);
if( desc.hasKey( stringIDToTypeID( 'targetLayers' ) ) ){
desc = desc.getList( stringIDToTypeID( 'targetLayers' ));
var c = desc.count
var selectedLayers = new Array();
for(var i=0;i<c;i++){
try{
activeDocument.backgroundLayer;
selectedLayers.push( desc.getReference( i ).getIndex() );
}catch(e){
selectedLayers.push( desc.getReference( i ).getIndex()+1 );
}
}
}else{
var ref = new ActionReference();
ref.putProperty( charIDToTypeID("Prpr") , charIDToTypeID( "ItmI" ));
ref.putEnumerated( charIDToTypeID("Lyr "), charIDToTypeID("Ordn"), charIDToTypeID("Trgt") );
try{
activeDocument.backgroundLayer;
selectedLayers.push( executeActionGet(ref).getInteger(charIDToTypeID( "ItmI" ))-1);
}catch(e){
selectedLayers.push( executeActionGet(ref).getInteger(charIDToTypeID( "ItmI" )));
}
}
return selectedLayers;
};
////// by mike hale, via paul riggott //////
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);
}
};
////// add layer mask //////
function makeLayerMask(maskType) {
try {
if( maskType == undefined) maskType = 'RvlA' ; //from selection
// =======================================================
var desc3 = new ActionDescriptor();
desc3.putClass( charIDToTypeID( "Nw " ), charIDToTypeID( "Chnl" ) );
var ref1 = new ActionReference();
ref1.putEnumerated( charIDToTypeID( "Chnl" ), charIDToTypeID( "Chnl" ), charIDToTypeID( "Msk " ) );
desc3.putReference( charIDToTypeID( "At " ), ref1 );
desc3.putEnumerated( charIDToTypeID( "Usng" ), charIDToTypeID( "UsrM" ), charIDToTypeID(maskType) );
executeAction( charIDToTypeID( "Mk " ), desc3, DialogModes.NO );
} catch (e) {return false};
};
////// check for selection //////
function hasSelection(){
var ref10 = new ActionReference();
ref10.putProperty(stringIDToTypeID("property"), stringIDToTypeID("selection"));
ref10.putEnumerated( charIDToTypeID( "Dcmn" ), charIDToTypeID( "Ordn" ), charIDToTypeID( "Trgt" ) );
var docDesc = executeActionGet(ref10);
return docDesc.hasKey(stringIDToTypeID("selection"));
};
////// reselect //////
function reselect () {
try {
var idsetd = charIDToTypeID( "setd" );
var desc7 = new ActionDescriptor();
var idnull = charIDToTypeID( "null" );
var ref2 = new ActionReference();
var idChnl = charIDToTypeID( "Chnl" );
var idfsel = charIDToTypeID( "fsel" );
ref2.putProperty( idChnl, idfsel );
desc7.putReference( idnull, ref2 );
var idT = charIDToTypeID( "T " );
var idOrdn = charIDToTypeID( "Ordn" );
var idPrvs = charIDToTypeID( "Prvs" );
desc7.putEnumerated( idT, idOrdn, idPrvs );
executeAction( idsetd, desc7, DialogModes.NO );
} catch (e) {return false}
};
////// has layer mask //////
function hasLayerMask (theIndex) {
var m_Dsc01, m_Ref01;
m_Ref01 = new ActionReference();
m_Ref01.putIndex(charIDToTypeID("Lyr "), theIndex);
//m_Ref01.putEnumerated(sTID("layer"), cTID("Ordn"), cTID("Trgt"));
m_Dsc01 = executeActionGet(m_Ref01);
return m_Dsc01.hasKey(charIDToTypeID("Usrs"));
};
Copy link to clipboard
Copied
Thank you so much Sir @c.pfaffenbichler . . . This code very cool
Find more inspiration, events, and resources on the new Adobe Community
Explore Now