[Script] Adjust Hue/Saturation

Community Beginner ,
Dec 28, 2018 Dec 28, 2018

Copy link to clipboard

Copied

I've got an image that has its color changed by a clipped mask above it. I am trying to build a script to automate this task, setting different values for the hue, saturation and lightness.

I've managed to create the following script, which creates a Hue/Saturation layer with "Colorize" checkbox enabled, however, I don't know how to initialize the hue, saturation and lightness values.

/////////////

var idMk = charIDToTypeID( "Mk  " );

    var desc43 = new ActionDescriptor();

    var idnull = charIDToTypeID( "null" );

        var ref8 = new ActionReference();

        var idAdjL = charIDToTypeID( "AdjL" );

        ref8.putClass( idAdjL );

    desc43.putReference( idnull, ref8 );

    var idUsng = charIDToTypeID( "Usng" );

        var desc44 = new ActionDescriptor();

        var idType = charIDToTypeID( "Type" );

            var desc45 = new ActionDescriptor();

            var idpresetKind = stringIDToTypeID( "presetKind" );

            var idpresetKindType = stringIDToTypeID( "presetKindType" );

            var idpresetKindDefault = stringIDToTypeID( "presetKindDefault" );

            desc45.putEnumerated( idpresetKind, idpresetKindType, idpresetKindDefault );

           var idClrz = charIDToTypeID( "Clrz" );

            desc45.putBoolean( idClrz, true );

        var idHStr = charIDToTypeID( "HStr" );

        desc44.putObject( idType, idHStr, desc45 );

    var idAdjL = charIDToTypeID( "AdjL" );

    desc43.putObject( idUsng, idAdjL, desc44 );

executeAction( idMk, desc43, DialogModes.NO );

/////////////

Does anyone know how can I set those values? Thanks in advance.

TOPICS
Actions and scripting

Views

1.5K

Likes

Translate

Translate

Report

Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines

correct answers 1 Correct answer

Advocate , Dec 28, 2018 Dec 28, 2018

I do not know if I understand correctly

maybe you're looking for something similar

// =======================================================

var desc2 = new ActionDescriptor();

var desc3 = new ActionDescriptor();

var desc4 = new ActionDescriptor();

var ref1 = new ActionReference();

ref1.putClass( charIDToTypeID( "AdjL" ));

desc2.putReference( charIDToTypeID( "null" ), ref1 );

desc4.putEnumerated( stringIDToTypeID( "presetKind" ), stringIDToTypeID( "presetKindType" ), stringIDToTypeID( "presetKindDefault

...

Likes

Translate

Translate
Advocate ,
Dec 28, 2018 Dec 28, 2018

Copy link to clipboard

Copied

I do not know if I understand correctly

maybe you're looking for something similar

// =======================================================

var desc2 = new ActionDescriptor();

var desc3 = new ActionDescriptor();

var desc4 = new ActionDescriptor();

var ref1 = new ActionReference();

ref1.putClass( charIDToTypeID( "AdjL" ));

desc2.putReference( charIDToTypeID( "null" ), ref1 );

desc4.putEnumerated( stringIDToTypeID( "presetKind" ), stringIDToTypeID( "presetKindType" ), stringIDToTypeID( "presetKindDefault" ));

desc4.putBoolean( charIDToTypeID( "Clrz" ), false );

desc3.putObject( charIDToTypeID( "Type" ), charIDToTypeID( "HStr" ), desc4 );

desc2.putObject( charIDToTypeID( "Usng" ), charIDToTypeID( "AdjL" ), desc3 );

executeAction( charIDToTypeID( "Mk  " ), desc2, DialogModes.NO );

// =======================================================

var desc5 = new ActionDescriptor();

var ref2 = new ActionReference();

ref2.putEnumerated( charIDToTypeID( "Lyr " ), charIDToTypeID( "Ordn" ), charIDToTypeID( "Trgt" ));

desc5.putReference( charIDToTypeID( "null" ), ref2 );

executeAction( charIDToTypeID( "GrpL" ), desc5, DialogModes.NO );

// =======================================================

var desc6 = new ActionDescriptor();

var desc7 = new ActionDescriptor();

var desc8 = new ActionDescriptor();

var list1 = new ActionList();

var ref3 = new ActionReference();

ref3.putEnumerated( charIDToTypeID( "AdjL" ), charIDToTypeID( "Ordn" ), charIDToTypeID( "Trgt" ));

desc6.putReference( charIDToTypeID( "null" ), ref3 );

desc7.putEnumerated( stringIDToTypeID( "presetKind" ), stringIDToTypeID( "presetKindType" ), stringIDToTypeID( "presetKindCustom" ));

desc7.putBoolean( charIDToTypeID( "Clrz" ), true );

desc8.putEnumerated( charIDToTypeID( "Chnl" ), charIDToTypeID( "Chnl" ), charIDToTypeID( "Cmps" ));

desc8.putInteger( charIDToTypeID( "H   " ), 51 );  /// HUE

desc8.putInteger( charIDToTypeID( "Strt" ), 59 ); /// SATURATION

desc8.putInteger( charIDToTypeID( "Lght" ), 0 ); /// LIGHTNESS

list1.putObject( charIDToTypeID( "Hst2" ), desc8 );

desc7.putList( charIDToTypeID( "Adjs" ), list1 );

desc6.putObject( charIDToTypeID( "T   " ), charIDToTypeID( "HStr" ), desc7 );

executeAction( charIDToTypeID( "setd" ), desc6, DialogModes.NO );

Likes

Translate

Translate

Report

Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines
New Here ,
Jul 22, 2022 Jul 22, 2022

Copy link to clipboard

Copied

This is very usefl. Sorry to post on an old post but I can' find the answer anywhere else.

What if I don't want to create the adjustmnent layer, but only edit its parameters?

Because I have it within a for loop and I don't need it to be re-created ecery time.

Likes

Translate

Translate

Report

Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines
Community Expert ,
Jul 23, 2022 Jul 23, 2022

Copy link to clipboard

Copied

@francom27433485 

 

Try this (without colorize):

 

adjustHSL(-180, 50, 0);

function adjustHSL(hue, saturation, lightness) {
    try {
        activeDocument.activeLayer.kind == LayerKind.HUESATURATION;
        var s2t = function (s) {
            return app.stringIDToTypeID(s);
        };
        var descriptor = new ActionDescriptor();
        var descriptor2 = new ActionDescriptor();
        var descriptor3 = new ActionDescriptor();
        var list = new ActionList();
        var reference = new ActionReference();
        reference.putEnumerated(s2t("adjustmentLayer"), s2t("ordinal"), s2t("targetEnum"));
        descriptor.putReference(s2t("null"), reference);
        descriptor3.putInteger(s2t("hue"), hue);
        descriptor3.putInteger(s2t("saturation"), saturation);
        descriptor3.putInteger(s2t("lightness"), lightness);
        list.putObject(s2t("hueSatAdjustmentV2"), descriptor3);
        descriptor2.putList(s2t("adjustment"), list);
        descriptor.putObject(s2t("to"), s2t("hueSaturation"), descriptor2);
        executeAction(s2t("set"), descriptor, DialogModes.NO);
    } catch (e) {
        //alert("The active layer isn't a Hue/Saturation adjustment layer!");
    }
}

 

With colorize:

 

adjustHSLcolorize(true, 360, 50, 0);

function adjustHSLcolorize(colorize, hue, saturation, lightness) {
    try {
        activeDocument.activeLayer.kind == LayerKind.HUESATURATION;
        var s2t = function (s) {
            return app.stringIDToTypeID(s);
        };
        var descriptor = new ActionDescriptor();
        var descriptor2 = new ActionDescriptor();
        var descriptor3 = new ActionDescriptor();
        var list = new ActionList();
        var reference = new ActionReference();
        reference.putEnumerated(s2t("adjustmentLayer"), s2t("ordinal"), s2t("targetEnum"));
        descriptor.putReference(s2t("null"), reference);
        descriptor2.putBoolean(s2t("colorize"), colorize);
        descriptor3.putEnumerated(s2t("channel"), s2t("channel"), s2t("composite"));
        descriptor3.putInteger(s2t("hue"), hue);
        descriptor3.putInteger(s2t("saturation"), saturation);
        descriptor3.putInteger(s2t("lightness"), lightness);
        list.putObject(s2t("hueSatAdjustmentV2"), descriptor3);
        descriptor2.putList(s2t("adjustment"), list);
        descriptor.putObject(s2t("to"), s2t("hueSaturation"), descriptor2);
        executeAction(s2t("set"), descriptor, DialogModes.NO);
    } catch (e) {
        //alert("The active layer isn't a Hue/Saturation adjustment layer!");
    }
}

 

Likes

Translate

Translate

Report

Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines
Community Expert ,
Jul 27, 2022 Jul 27, 2022

Copy link to clipboard

Copied

LATEST

@francom27433485 – how did the code that I posted work for you?

Likes

Translate

Translate

Report

Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines

Save time with Adobe Express quick actions