Создание слоя с изображением одного слоя ,а контуром от другого

  • Автор темы Автор темы goblya
  • Дата начала Дата начала
Статус
Закрыто для дальнейших ответов.

goblya

Участник
Топикстартер
Сообщения
7
Реакции
2
Добрый день. Пытаюсь разобраться с photoshop api, но все форумы и руководства на английском языке.
Подскажите как сделать с помощью скрипта следующее: у меня есть 2 слоя. Как при выделенном 1 слое сделать выделение контура 2 слоя (ctrl+лкм), и создать новый слой (layer via copy). Чтобы в итоге был создан новый слой, у которого изображение было от 1 слоя ,а контур от 2 слоя?
 
1. Что такое (ctrl+лкм)?
2. Можно, пожалуйста, скриншоты слоёв и картинки "до" и "после", для наглядности, а то мне лично не совсем (совсем не) ясно, что и как надо сделать.
 
  • Спасибо
Реакции: dumbm1
Вангую перевод с топикстартерского на человеческий: видимо, он хочет создать слой, в котором изображение одного слоя будет замаскировано маской другого - ась? И делается это достаточно просто безо всякого API - ставится экшн на запись и записывается вся последовательность телодвижений, выполняющая данное действие. При желании можно и скрипт через ScriptListener записать, правда толку от такого записанного скрипта будет чуть поболе, чем от экшна.
 
Прикладываю что я пытаюсь получить.
Layer-2 - слой с исходным изображением.Layer-1 - слой-"контур".Layer-3 - итоговое изображение, которое я хочу получить.На счет экшенов, дело в том что слоев контуров много, а слой с исходным изображением 1, и нужно делать экшн,который будет после каждого раза выбирать слой контур который будет находится ниже предыдущего.
 

Вложения

  • Layer-1.png
    Layer-1.png
    30.6 КБ · Просм.: 982
  • Layer-2.png
    Layer-2.png
    330.2 КБ · Просм.: 947
  • Layer-3.png
    Layer-3.png
    65.1 КБ · Просм.: 632
лучше б psd - до, и после
 
Ну правильно, как я и говорил, маска от Layer-1 применяется к изображению Layer-2
Осталось разобраться зачем
после каждого раза выбирать слой контур который будет находится ниже предыдущего
 
ну я же писал что слоев "контуров"(такие как Layer-1) много,а слой "изображение"(такой как Layer-2). Мне же нужно на основе одного слоя создать маску ,потом перейтив самый низ вкладке слои к слою "изображение" создать новый слой и веренуться к слою контуру .
 
А что на выходе? Многослойный PSD в котором каждому слою-маске соответствует замаскированный слой? Или эта операция выглядит так: выделяется два слоя из которых делается один замаскированный?
 
Пока дождешься ответа, легче самому разобраться. Вдруг кому понадобится. Скрипт по всем слоям ,кроме последнего ,создает новый слой с изображением последнего ,но контуром каждого до последнего.
Код:
#target photoshop

function createnewlayer(layername1, layername2){
var idsetd = charIDToTypeID( "setd" );
    var desc58 = new ActionDescriptor();
    var idnull = charIDToTypeID( "null" );
        var ref56 = new ActionReference();
        var idChnl = charIDToTypeID( "Chnl" );
        var idfsel = charIDToTypeID( "fsel" );
        ref56.putProperty( idChnl, idfsel );
    desc58.putReference( idnull, ref56 );
    var idT = charIDToTypeID( "T   " );
        var ref57 = new ActionReference();
        var idChnl = charIDToTypeID( "Chnl" );
        var idChnl = charIDToTypeID( "Chnl" );
        var idTrsp = charIDToTypeID( "Trsp" );
        ref57.putEnumerated( idChnl, idChnl, idTrsp );
        var idLyr = charIDToTypeID( "Lyr " );
        ref57.putName( idLyr, layername1 );
    desc58.putReference( idT, ref57 );
executeAction( idsetd, desc58, DialogModes.NO );
var idslct = charIDToTypeID( "slct" );
    var desc59 = new ActionDescriptor();
    var idnull = charIDToTypeID( "null" );
        var ref58 = new ActionReference();
        var idLyr = charIDToTypeID( "Lyr " );
        ref58.putName( idLyr, layername2 );
    desc59.putReference( idnull, ref58 );
    var idMkVs = charIDToTypeID( "MkVs" );
    desc59.putBoolean( idMkVs, false );
executeAction( idslct, desc59, DialogModes.NO );
var idCpTL = charIDToTypeID( "CpTL" );
executeAction( idCpTL, undefined, DialogModes.NO );
}

var doc = activeDocument;
var layers_length = doc.layers.length-1;
var last_layer = doc.layers[doc.layers.length-1].name;
for(var a = 0; a < layers_length; a++) {
createnewlayer(doc.layers[a].name, last_layer);
}
 
  • Спасибо
Реакции: _MBK_ и dumbm1
Пока дождешься ответа, легче самому разобраться.
Видите, как все просто оказалось
Я вам еще в 4 сообщении не рыбу, а удочку дал.
Только есть небольшая неточность. Ваш скрипт предполагает, что каждый новый слой создается последним в списке, а это, IMHO, не факт. Наверное, правильнее было бы заводить список исходных слоев и работать уже с ним
 
Последнее редактирование:
новый слой создается предпоследним в моем скрипте. Попробовал на нескольких нужных мне файлов ,вроде все норм работает.
 
Статус
Закрыто для дальнейших ответов.