2

レイヤーのサイズを変更するには、(UIの観点から)選択し、APIの観点からアクティブにする必要があるようです。そうしないと、この関数がサポートされていないという関数呼び出しでエラーが発生します。

サイズを変更する前に

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

これは選択されたレイヤーを視覚的に変更しないため、その後、サイズ変更関数の呼び出しは失敗します。それを機能させる唯一の方法は、手動でレイヤー(任意のレイヤー)をクリックしてから機能します。ユーザーの操作なしでレイヤーのサイズを変更する適切な方法は何ですか?

4

2 に答える 2

8

コードを修正する必要があります。

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

これにより、アクティブなレイヤーが「ipad」という名前のレイヤーに設定されます。これは、レイヤーを(名前で)選択して、画像をさらに処理し、場合によってはサイズを変更する標準的な方法です。明らかに、選択または無視するレイヤーに関して、PSDの他に何が含まれているのかわかりません。もう1つの方法は、すべてのレイヤーを反復処理してすべてを処理することです。

2つの便利な機能を次に示します。1つはレイヤーマスクを選択し、もう1つはレイヤーマスクの選択を解除してビットマップレイヤーに戻ります。

// 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
于 2013-03-11T12:35:51.663 に答える
1

これは、extendscriptのデータブラウザビューで見つけることができます。

var doc = app.activeDocument;

// set active layer
doc.activeLayer = doc.layers.getByName("Layer Name Here");
于 2017-03-17T10:01:28.233 に答える