как подавить всплывающее сообщение в скрипте Photoshop "Пиксели не выбраны". - PullRequest
0 голосов
/ 29 декабря 2018

У меня есть скрипт для циклического просмотра документа и проверки на каждом слое наличия пустой маски слоя, а затем удаления этой маски слоя.

Я не уверен, что существует лучший подход кпроверьте, является ли маска слоя пустой, чем получение выделения и его инвертирование.

После инвертирования, если выделения нет, в Photoshop появляется предупреждающее сообщение о том, что «пиксели не выбраны».

Как избежать этого сообщения без галочки «Больше не показывать»?

for ( var a =0; a<activeDocument.artLayers.length; a++ ){
    activeDocument.activeLayer = activeDocument.artLayers[a];
    checkLayerMask();
};

function checkLayerMask() {
    // has layer mask
    var ref = new ActionReference();
    ref.putEnumerated(charIDToTypeID("Lyr "), charIDToTypeID("Ordn"), charIDToTypeID("Trgt"));
    var desc = executeActionGet(ref);
    var hasLayerMask = desc.hasKey(charIDToTypeID("UsrM")); // bool

    if (hasLayerMask) {
        // make layer mask active
        var desc = new ActionDescriptor();
        var ref = new ActionReference();
        ref.putEnumerated( charIDToTypeID( "Chnl" ), charIDToTypeID( "Chnl" ), charIDToTypeID( "Msk " ) );
        desc.putReference( charIDToTypeID( "null" ),  ref );
        desc.putBoolean( charIDToTypeID( "MkVs" ), false );
        executeAction( charIDToTypeID( "slct" ), desc, DialogModes.NO );

        // get selection from layer mask
        var desc = new ActionDescriptor();
        var ref = new ActionReference();
        ref.putProperty( charIDToTypeID( "Chnl" ), charIDToTypeID( "fsel" ) );
        desc.putReference( charIDToTypeID( "null" ), ref );
        var ref = new ActionReference();
        ref.putEnumerated( charIDToTypeID( "Chnl" ), charIDToTypeID( "Ordn" ), charIDToTypeID( "Trgt" ) );
        desc.putReference( charIDToTypeID( "T   " ), ref );
        executeAction( charIDToTypeID( "setd" ), desc, DialogModes.NO );

        // invert selection
        activeDocument.selection.invert(); 
        try { activeDocument.selection.bounds}
        catch(e) {
            // delete active layer mask
            var desc = new ActionDescriptor();
            var ref = new ActionReference();
            ref.putEnumerated( charIDToTypeID( "Chnl" ), charIDToTypeID( "Ordn" ), charIDToTypeID( "Trgt" ) );
            desc.putReference( charIDToTypeID( "null" ), ref );
            executeAction( charIDToTypeID( "Dlt " ), desc, DialogModes.NO );
        };
    }
    app.activeDocument.selection.deselect();
};

1 Ответ

0 голосов
/ 29 декабря 2018
Команда

AM с DialogModes, установленным на NO, не выдаст это сообщение:

executeAction(charIDToTypeID('Invs'), undefined, DialogModes.NO);
...