Exit
  • Global community
    • Language:
      • Deutsch
      • English
      • Español
      • Français
      • Português
  • 日本語コミュニティ
  • 한국 커뮤니티
0

active selection as layer masks to selected layers ( photoshop scripts )

Participant ,
May 31, 2024 May 31, 2024

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"));  
};

Untitled-3.jpg

 

TOPICS
macOS , Windows
394
Translate
Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines

correct answers 1 Correct answer

Community Expert , Jun 02, 2024 Jun 02, 2024

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
...
Translate
Adobe
Community Expert ,
Jun 02, 2024 Jun 02, 2024

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"));  
};

 

Translate
Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines
Participant ,
Jun 02, 2024 Jun 02, 2024
LATEST

Thank you so much Sir @c.pfaffenbichler  . . . This code very cool

Translate
Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines