est ici une solution aki, il crée une copie temporaire du groupe, se confond, obtenir ses limites, supprime et ramène au groupe ce traitera des couches invisibles
var mfDoc = activeDocument;
var mflayer = activeDocument.activeLayer; // currently active layer
var mfnewdLayer = mfDoc.activeLayer.duplicate(); // Dublicates active layer or group (creating a temp layer)
mfDoc.activeLayer = mfnewdLayer; // sets the temp layer as the active layer
mfnewdLayer.merge(); // merges it, this leaves only visible layers
var mfmlayer = activeDocument.activeLayer; //Grab the currently selected layer
var mfheight = mfmlayer.bounds[2]-mfmlayer.bounds[0]; //Grab the H value
var mfwidth = mfmlayer.bounds[3]-mfmlayer.bounds[1]; //Grab the W value
mfmlayer.remove(); // delete the temp layer
mfDoc.activeLayer = mflayer; // gets back to the layer that was active at the begining
mflayer.name = mfheight + " x " + mfwidth // set it's name to the dimintions we now have
maintenant si vous voulez pour faire face aux masques le script devient un peu plus:
var mfDoc = activeDocument;
var mflayer = activeDocument.activeLayer; // currently active layer
var mfnewdLayer = mfDoc.activeLayer.duplicate(); // Dublicates active layer or group (creating a temp layer)
mfDoc.activeLayer = mfnewdLayer; // sets the temp layer as the active layer
mfnewdLayer.merge(); // merges it, this leaves only visible layers
var mfmlayer = activeDocument.activeLayer; //Grab the currently selected layer
if (hasVectorMask() == true){ // Only if it has a layer mask
selectVectorMask(); // Select the vector mask
rasterizeVectorMask(); // rasterize the vector mask
applyLayerMask(); // Apply the layer mask
}
if (hasLayerMask() == true){ // Only if it has a layer mask
selectLayerMask(); // Select the layer mask
applyLayerMask(); // Apply the layer mask
}
if (hasFilterMask() == true){ // Only if it has a Smart Filter mask
}
var mfheight = mfmlayer.bounds[2]-mfmlayer.bounds[0]; //Grab the H value
var mfwidth = mfmlayer.bounds[3]-mfmlayer.bounds[1]; //Grab the W value
mfmlayer.remove(); // delete the temp layer
mfDoc.activeLayer = mflayer; // gets back to the layer that was active at the begining
mflayer.name = mfheight + " x " + mfwidth // set it's name to the dimintions we now have
function hasLayerMask() {
var hasLayerMask = false;
try {
var ref = new ActionReference();
var keyUserMaskEnabled = app.charIDToTypeID('UsrM');
ref.putProperty(app.charIDToTypeID('Prpr'), keyUserMaskEnabled);
ref.putEnumerated(app.charIDToTypeID('Lyr '), app.charIDToTypeID('Ordn'), app.charIDToTypeID('Trgt'));
var desc = executeActionGet(ref);
if (desc.hasKey(keyUserMaskEnabled)) {
hasLayerMask = true;
}
}catch(e) {
hasLayerMask = false;
}
return hasLayerMask;
}
function hasVectorMask() {
var hasVectorMask = false;
try {
var ref = new ActionReference();
var keyVectorMaskEnabled = app.stringIDToTypeID('vectorMask');
var keyKind = app.charIDToTypeID('Knd ');
ref.putEnumerated(app.charIDToTypeID('Path'), app.charIDToTypeID('Ordn'), keyVectorMaskEnabled);
var desc = executeActionGet(ref);
if (desc.hasKey(keyKind)) {
var kindValue = desc.getEnumerationValue(keyKind);
if (kindValue == keyVectorMaskEnabled) {
hasVectorMask = true;
}
}
}catch(e) {
hasVectorMask = false;
}
return hasVectorMask;
}
function hasFilterMask() {
var hasFilterMask = false;
try {
var ref = new ActionReference();
var keyFilterMask = app.stringIDToTypeID("hasFilterMask");
ref.putProperty(app.charIDToTypeID('Prpr'), keyFilterMask);
ref.putEnumerated(app.charIDToTypeID('Lyr '), app.charIDToTypeID('Ordn'), app.charIDToTypeID('Trgt'));
var desc = executeActionGet(ref);
if (desc.hasKey(keyFilterMask) && desc.getBoolean(keyFilterMask)) {
hasFilterMask = true;
}
}catch(e) {
hasFilterMask = false;
}
return hasFilterMask;
}
function selectLayerMask() {
try{
var id759 = charIDToTypeID("slct");
var desc153 = new ActionDescriptor();
var id760 = charIDToTypeID("null");
var ref92 = new ActionReference();
var id761 = charIDToTypeID("Chnl");
var id762 = charIDToTypeID("Chnl");
var id763 = charIDToTypeID("Msk ");
ref92.putEnumerated(id761, id762, id763);
desc153.putReference(id760, ref92);
var id764 = charIDToTypeID("MkVs");
desc153.putBoolean(id764, false);
executeAction(id759, desc153, DialogModes.NO);
}catch(e) {
; // do nothing
}
}
function selectVectorMask() {
try{
var id55 = charIDToTypeID("slct");
var desc15 = new ActionDescriptor();
var id56 = charIDToTypeID("null");
var ref13 = new ActionReference();
var id57 = charIDToTypeID("Path");
var id58 = charIDToTypeID("Path");
var id59 = stringIDToTypeID("vectorMask");
ref13.putEnumerated(id57, id58, id59);
var id60 = charIDToTypeID("Lyr ");
var id61 = charIDToTypeID("Ordn");
var id62 = charIDToTypeID("Trgt");
ref13.putEnumerated(id60, id61, id62);
desc15.putReference(id56, ref13);
executeAction(id55, desc15, DialogModes.NO);
}catch(e) {
; // do nothing
}
}
function applyLayerMask() {
try{
var id765 = charIDToTypeID("Dlt ");
var desc154 = new ActionDescriptor();
var id766 = charIDToTypeID("null");
var ref93 = new ActionReference();
var id767 = charIDToTypeID("Chnl");
var id768 = charIDToTypeID("Ordn");
var id769 = charIDToTypeID("Trgt");
ref93.putEnumerated(id767, id768, id769);
desc154.putReference(id766, ref93);
var id770 = charIDToTypeID("Aply");
desc154.putBoolean(id770, true);
executeAction(id765, desc154, DialogModes.NO);
}catch(e) {
; // do nothing
}
}
Crédits: l'ensemble traitant script masques est de Aplatir Tous Masks.jsx par LeZuse
En pensant à cela maintenant, il existe une solution beaucoup plus simple pour appliquer des masques et rasteriser. vous venez de créer un nouveau calque, sélectionnez-le avec le calque temporaire et fusionnez. puis obtenir des limites, supprimer la couche temporaire. –
J'ai fini par faire presque la même chose - je groupais le calque et fusionnais le groupe pour obtenir les limites du calque. Au lieu de dupliquer la couche, je travaille simplement sur la couche elle-même et puis je restaure l'état de l'historique que j'ai sauvegardé avant de changer quoi que ce soit. Je ne suis pas sûr lequel est le plus rapide - dupliquer et supprimer ou restaurer un état de l'histoire, mais je suis allé pour l'état de l'histoire. – jedivader
Je suppose que votre chemin devrait être plus rapide. Je crois qu'il doit y avoir un autre moyen, mais il y a juste trop de variables à gérer pour une chose simple. –