2013-03-09 4 views
1

Похоже, что для изменения размера слоя он должен быть выбран (с точки зрения пользовательского интерфейса) и активен с точки зрения API. В противном случае я получаю ошибку при вызове любой функции, что эта функция не поддерживается.Как выбрать активный слой?

Так перед изменением размера я

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

Это не визуально изменить выбранный слой, следовательно, вызывая функцию изменения размера не удается после этого. Единственный способ заставить его работать, вручную щелкнуть по слою (любой слой), а затем он работает. Каков правильный способ изменения размера слоя без взаимодействия с пользователем?

ответ

5

Вам просто нужно изменить код:

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

Это позволит установить активный слой на один с именем «Ipad». Это стандартный способ выбора слоя (по имени) для последующей обработки изображения, в случае его изменения. Очевидно, я не знаю, что еще в PSD в плане слоев, чтобы выбрать или игнорировать. Другой способ - перебрать все слои и обработать их все.

Вот две полезные функции: Один будет выбрать маску слоя есть один, то другой снимите маску слоя и вернуться к растровому слою

// 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 
+0

Как я могу переключаться между Bitmap и маской, как и активных в слое? – Royi

+0

@Drazick Я добавил две функции, которые помогут вам изменить слой растрового изображения и маску слоя. –

+0

Дурак, спасибо! – Royi

0

Вы можете найти его в браузере данных вид из ExtendScript:

var doc = app.activeDocument; 
 

 
// set active layer 
 
doc.activeLayer = doc.layers.getByName("Layer Name Here");