[PS CC-CC2021] Color Range в JSX

Skvoznyak

Топикстартер
15 лет на форуме
Сообщения
5 500
Реакции
2 168
Такая проблема - нужно делать выделение color range по определенному цвету.

Код из Scripting Listener (пример):

Код:
var idClrR = charIDToTypeID( "ClrR" );
    var desc38 = new ActionDescriptor();
   
    var idFzns = charIDToTypeID( "Fzns" );
    desc38.putInteger( idFzns, 132 );
    var idMnm = charIDToTypeID( "Mnm " );
        var desc39 = new ActionDescriptor();
        var idLmnc = charIDToTypeID( "Lmnc" );
        desc39.putDouble( idLmnc, 81.030000 );
        var idA = charIDToTypeID( "A   " );
        desc39.putDouble( idA, -1.280000 );
        var idB = charIDToTypeID( "B   " );
        desc39.putDouble( idB, -1.010000 );
    var idLbCl = charIDToTypeID( "LbCl" );
    desc38.putObject( idMnm, idLbCl, desc39 );
    var idMxm = charIDToTypeID( "Mxm " );
        var desc40 = new ActionDescriptor();
        var idLmnc = charIDToTypeID( "Lmnc" );
        desc40.putDouble( idLmnc, 81.030000 );
        var idA = charIDToTypeID( "A   " );
        desc40.putDouble( idA, -1.280000 );
        var idB = charIDToTypeID( "B   " );
        desc40.putDouble( idB, -1.010000 );
    var idLbCl = charIDToTypeID( "LbCl" );
    desc38.putObject( idMxm, idLbCl, desc40 );
    var idcolorModel = stringIDToTypeID( "colorModel" );
    desc38.putInteger( idcolorModel, 0 );
executeAction( idClrR, desc38, DialogModes.ALL );


легко убедиться, что режим Sampled Colors кодом не включается, остается тот, что вызывался до этого - например Shadows.

Характерно, что все остальные режимы в ScriptingListener записывают свое включение:

Код:
var idClrR = charIDToTypeID( "ClrR" );
    var desc160 = new ActionDescriptor();
    var idClrs = charIDToTypeID( "Clrs" );
    var idClrs = charIDToTypeID( "Clrs" );
    var idShdw = charIDToTypeID( "Shdw" );
    desc160.putEnumerated( idClrs, idClrs, idShdw );
    var idshadowsFuzziness = stringIDToTypeID( "shadowsFuzziness" );
    desc160.putInteger( idshadowsFuzziness, 20 );
    var idshadowsUpperLimit = stringIDToTypeID( "shadowsUpperLimit" );
    desc160.putInteger( idshadowsUpperLimit, 65 );
    var idcolorModel = stringIDToTypeID( "colorModel" );
    desc160.putInteger( idcolorModel, 0 );
executeAction( idClrR, desc160, DialogModes.NO );

как бы это побороть в случае Sampled color?

константы для него в sdk не нашел, да видимо ее и нет. В экшен пишется с тем же эффектом

пробовал сохранить настройки в файл через save, затем вызывать их перед вызовом кода, исключительно чтобы переключить режим color range - но все равно остается выбранный пользователем до того режим.

загруженные установки применяются нормально, в принципе, можно разобрать файл установок (.axt) и каждый раз его создавать и загружать. Но может кто знает путь попроще?
 
Последнее редактирование:

_MBK_

Пикирующий бомбардировщик
15 лет на форуме
Сообщения
33 138
Реакции
10 835
Это ты уже соседнюю задачу реализовывать начал?
То есть, ты хочешь сказать, что в экшн невозможно записать команду "выделить синий цвет"?
 

Skvoznyak

Топикстартер
15 лет на форуме
Сообщения
5 500
Реакции
2 168
нет, это для другого проекта

в экшен/script listener не записывается переключение режима в Sampled Colors. То есть, если его руками выбрать до запуска экшен и нажать ОК, то все будет работать. А вот если выбрать любой другой режим - то экшен не переключит ничего, и выделит соответственно предыдущему режиму.
 

_MBK_

Пикирующий бомбардировщик
15 лет на форуме
Сообщения
33 138
Реакции
10 835
А я вообще сути проблемы не понял.
У меня все записывает вроде это ли не то что нам надо? 'hmmm''hz'
Код:
// =======================================================
var id60 = charIDToTypeID( "ClrR" );
    var desc10 = new ActionDescriptor();
    var id61 = charIDToTypeID( "Fzns" );
    desc10.putInteger( id61, 67 );
    var id62 = charIDToTypeID( "Mnm " );
        var desc11 = new ActionDescriptor();
        var id63 = charIDToTypeID( "Lmnc" );
        desc11.putDouble( id63, 54.290000 );
        var id64 = charIDToTypeID( "A   " );
        desc11.putDouble( id64, 80.800000 );
        var id65 = charIDToTypeID( "B   " );
        desc11.putDouble( id65, 69.900000 );
    var id66 = charIDToTypeID( "LbCl" );
    desc10.putObject( id62, id66, desc11 );
    var id67 = charIDToTypeID( "Mxm " );
        var desc12 = new ActionDescriptor();
        var id68 = charIDToTypeID( "Lmnc" );
        desc12.putDouble( id68, 54.290000 );
        var id69 = charIDToTypeID( "A   " );
        desc12.putDouble( id69, 80.800000 );
        var id70 = charIDToTypeID( "B   " );
        desc12.putDouble( id70, 69.900000 );
    var id71 = charIDToTypeID( "LbCl" );
    desc10.putObject( id67, id71, desc12 );
executeAction( id60, desc10, DialogModes.NO );


// =======================================================
var id79 = charIDToTypeID( "ClrR" );
    var desc14 = new ActionDescriptor();
    var id80 = charIDToTypeID( "Clrs" );
    var id81 = charIDToTypeID( "Clrs" );
    var id82 = charIDToTypeID( "Mdtn" );
    desc14.putEnumerated( id80, id81, id82 );
executeAction( id79, desc14, DialogModes.NO );

// =======================================================
var id90 = charIDToTypeID( "ClrR" );
    var desc16 = new ActionDescriptor();
    var id91 = charIDToTypeID( "Clrs" );
    var id92 = charIDToTypeID( "Clrs" );
    var id93 = charIDToTypeID( "Hghl" );
    desc16.putEnumerated( id91, id92, id93 );
executeAction( id90, desc16, DialogModes.NO );
 

Skvoznyak

Топикстартер
15 лет на форуме
Сообщения
5 500
Реакции
2 168
А я вообще сути проблемы не понял.
У меня все записывает вроде это ли не то что нам надо? 'hmmm''hz'

видишь, в первом случае нет указания режима, как в остальных

Код:
    var desc14 = new ActionDescriptor();
    var id80 = charIDToTypeID( "Clrs" );
    var id81 = charIDToTypeID( "Clrs" );
    var id82 = charIDToTypeID( "Mdtn" );


при запуске экшена либо кода с выделением Sampled Colors в cc2017 это выглядит вот так

Screenshot 2018-01-26 13.28.04.png
 

Skvoznyak

Топикстартер
15 лет на форуме
Сообщения
5 500
Реакции
2 168
посмотрел cs6. в нем по умолчанию всегда включен Sampled Colors, он не запоминает предыдущий, поэтому проблема не вылезает
 

_MBK_

Пикирующий бомбардировщик
15 лет на форуме
Сообщения
33 138
Реакции
10 835
А, вононо что
У меня тоже CS6
 

Skvoznyak

Топикстартер
15 лет на форуме
Сообщения
5 500
Реакции
2 168
чую, придется AXT разбирать
хорошо он небольшой. но я пока не совсем въехал где там что, и в каком он вообще виде пишет данные - в Lab или другом чем-то. Fuzziness тоже не вижу

Screenshot 2018-01-26 13.54.45.png
 

Skvoznyak

Топикстартер
15 лет на форуме
Сообщения
5 500
Реакции
2 168
Так, экспериментально выяснил, параметры записываются 4-байтными значениями начиная с 5 байта, L, L, a, a, b, b, fuzziness. Дублируется потому что может быть range от min до max

вопрос на миллион - что это за представление чисел такое, когда например fuzziness 200 выглядит как "00 00 64 64",
fuzziness 60 - "00 00 1E 1E"
получается, значение делят пополам и записывают два раза (?)

L 100 пишется как 00 00 80 00 - диапазон от 0 до 128, это более-менее понятно. (хотя опять же зачем 4 байта..)