[FIXED] Wie wähle ich aktive Schicht aus?

Ausgabe

Es scheint, dass, um die Größe der Ebene zu ändern, sie (aus der UI-Perspektive) ausgewählt und aus der API-Perspektive aktiv sein muss. Andernfalls erhalte ich bei jedem Funktionsaufruf eine Fehlermeldung, dass diese Funktion nicht unterstützt wird.

Also bevor ich die Größe ändere

var a = doc.artLayers.getByName("iPad");
app.activeDocument.activeLayer = a;

Dadurch wird die ausgewählte Ebene nicht visuell geändert, daher schlägt der Aufruf der Größenänderungsfunktion danach fehl. Die einzige Möglichkeit, es zum Laufen zu bringen, klicken Sie manuell auf eine Ebene (jede Ebene), dann funktioniert es. Was ist der richtige Weg, um die Größe der Ebene ohne Benutzerinteraktion zu ändern?

Lösung

Sie müssen nur Ihren Code ändern:

var doc = app.activeDocument;
doc.activeLayer = doc.artLayers.getByName("iPad");

Dadurch wird die aktive Ebene auf die Ebene mit dem Namen “ipad” gesetzt. Dies ist eine Standardmethode, um eine Ebene (nach Namen) auszuwählen, um das Bild dann weiter zu bearbeiten und in Ihrem Fall die Größe zu ändern. Offensichtlich weiß ich nicht, was sonst noch in der PSD in Bezug auf Ebenen enthalten ist, die ausgewählt oder ignoriert werden sollen. Eine andere Möglichkeit wäre, alle Schichten zu durchlaufen und alle zu verarbeiten.

Hier sind zwei nützliche Funktionen: Eine wählt die Ebenenmaske aus, wenn eine vorhanden ist, die andere deaktiviert die Ebenenmaske und kehrt zur Bitmap-Ebene zurück

// FUNCTION DESELECT LAYER MASK AND SELECT IMAGE LAYER
// --------------------------------------------------------
function deselectLayerMaskAndSelectImageLayer()
{
  // =======================================================
  var id248 = charIDToTypeID( "slct" );
  var desc48 = new ActionDescriptor();
  var id249 = charIDToTypeID( "null" );
  var ref36 = new ActionReference();
  var id250 = charIDToTypeID( "Chnl" );
  var id251 = charIDToTypeID( "Chnl" );
  var id252 = charIDToTypeID( "RGB " );
  ref36.putEnumerated( id250, id251, id252 );
  desc48.putReference( id249, ref36 );
  var id253 = charIDToTypeID( "MkVs" );
  desc48.putBoolean( id253, false );
  executeAction( id248, desc48, DialogModes.NO );
}


// FUNCTION SELECT MASK
// --------------------------------------------------------
function selectMask(LayerName)
{
  try
  {
    var desc = new ActionDescriptor();
    var ref = new ActionReference();
    ref.putEnumerated( charIDToTypeID('Chnl'), charIDToTypeID('Chnl'), charIDToTypeID('Msk ') );
    ref.putName( charIDToTypeID('Lyr '), LayerName );
    desc.putReference( charIDToTypeID('null'), ref );
    desc.putBoolean( charIDToTypeID('MkVs'), true );
    executeAction( charIDToTypeID('slct'), desc, DialogModes.NO );

    // =======================================================
    var id1083 = charIDToTypeID( "setd" );
    var desc238 = new ActionDescriptor();
    var id1084 = charIDToTypeID( "null" );
    var ref161 = new ActionReference();
    var id1085 = charIDToTypeID( "Chnl" );
    var id1086 = charIDToTypeID( "fsel" );
    ref161.putProperty( id1085, id1086 );
    desc238.putReference( id1084, ref161 );
    var id1087 = charIDToTypeID( "T   " );
    var ref162 = new ActionReference();
    var id1088 = charIDToTypeID( "Chnl" );
    var id1089 = charIDToTypeID( "Ordn" );
    var id1090 = charIDToTypeID( "Trgt" );
    ref162.putEnumerated( id1088, id1089, id1090 );
    desc238.putReference( id1087, ref162 );
    executeAction( id1083, desc238, DialogModes.NO );
  }
  catch(e)
  {
  //alert(e)
  //alert( "This layer has NO layer mask!" );
  activeDocument.selection.deselect();
  }
} //end function


Beantwortet von –
Ghoul Fool


Antwort geprüft von –
Mary Flores (FixError Volunteer)

0 Shares:
Leave a Reply

Your email address will not be published. Required fields are marked *

You May Also Like