Skip to main content
Gibson Editions
Inspiring
July 28, 2023
Answered

Check empty curves function broken photoshop 24.7.0

  • July 28, 2023
  • 1 reply
  • 1575 views

I have this function as part of a script for finalising photoshop files. It checks for any points on the curve

 

this.checkCurve = function(index){
    
 //if(app.activeDocument.activeLayer.kind !=  LayerKind.CURVES ) return;
var ref = new ActionReference();
 ref.putIndex(s2t("layer"), index)
var rawDesc = executeActionGet( ref ).getList( s2t( 'adjustment' ) ).getObjectValue( 0 ).getData( s2t( 'legacyContentData' ) );
var pointer = 2;                                            // used to read rawData similar to reading a file
var flag = rawDesc.charCodeAt( pointer );       // char at offset 2 always == 1 so use to validate data
if( flag != 1 ) forceError;                             // unknown problem with rawData
   pointer = 6;// update pointer to BCD byte
   var bcd = rawDesc.charCodeAt( pointer );
   if( bcd < 0 || bcd > 15 ) forceError;// check for valid value
   if( bcd == 0 ) return false;// an empty adjustment - no curves to process
   return true;
 }

. The current version of photoshop doesnt seem to allow you to get the rawData. Anybody got some sort of work around or way of determining if a curve has no points on any of composite and component curves? 

This topic has been closed for replies.
Correct answer c.pfaffenbichler

Does this help? 

// check if curves layer has been changed at all;
// based on code by michael l hale;
// 2023, use it at your own risk;
if (app.documents.length > 0) {
var ref = new ActionReference();
ref.putEnumerated( charIDToTypeID("Lyr "), charIDToTypeID("Ordn"), charIDToTypeID("Trgt") ); 
var layerDesc = executeActionGet(ref);
try {
var aList = layerDesc.getList(stringIDToTypeID("adjustment"));
var listStuff = evaluateList (aList);
var listStuff2 = evaluateList (listStuff[0].getList(stringIDToTypeID("adjustment")))
var aaa = evaluateList(listStuff2[0].getList(stringIDToTypeID("curve")));
} catch (e) {
	alert ("either not a curves adjustment layer or at unedited default settings")
}
};
////////////////////////////////////
////// get list values //////
function evaluateList (aList) {
var listStuff = new Array;
for (var x = 0; x < aList.count; x++) {
var theType = aList.getType(x);
switch (theType) {
case DescValueType.ALIASTYPE:
listStuff.push( aList.getPath(x));
break;
case DescValueType.BOOLEANTYPE:
listStuff.push( aList.getBoolean(x));
break;
case DescValueType.CLASSTYPE:
listStuff.push( aList.getClass(x));
break;
case DescValueType.DOUBLETYPE:
listStuff.push( aList.getDouble(x));
break;
case DescValueType.ENUMERATEDTYPE:
listStuff.push( aList.getEnumerationValue(x));
break;
case DescValueType.INTEGERTYPE:
listStuff.push( aList.getInteger(x));
break;
case DescValueType.LISTTYPE:
listStuff.push( aList.getList(x));
break;
case DescValueType.OBJECTTYPE:
listStuff.push( (aList.getObjectValue(x)));
break;
case DescValueType.RAWTYPE:
listStuff.push( aList.getReference(x));
break;
case DescValueType.REFERENCETYPE:
listStuff.push( aList.getReference(x));
break;
case DescValueType.STRINGTYPE:
listStuff.push( aList.getString(x));
break;
case DescValueType.UNITDOUBLE:
listStuff.push( aList.getUnitDoubleValue(x));
break;
default: 
break;
};
};
return listStuff
};

1 reply

c.pfaffenbichler
Community Expert
c.pfaffenbichlerCommunity ExpertCorrect answer
Community Expert
August 21, 2023

Does this help? 

// check if curves layer has been changed at all;
// based on code by michael l hale;
// 2023, use it at your own risk;
if (app.documents.length > 0) {
var ref = new ActionReference();
ref.putEnumerated( charIDToTypeID("Lyr "), charIDToTypeID("Ordn"), charIDToTypeID("Trgt") ); 
var layerDesc = executeActionGet(ref);
try {
var aList = layerDesc.getList(stringIDToTypeID("adjustment"));
var listStuff = evaluateList (aList);
var listStuff2 = evaluateList (listStuff[0].getList(stringIDToTypeID("adjustment")))
var aaa = evaluateList(listStuff2[0].getList(stringIDToTypeID("curve")));
} catch (e) {
	alert ("either not a curves adjustment layer or at unedited default settings")
}
};
////////////////////////////////////
////// get list values //////
function evaluateList (aList) {
var listStuff = new Array;
for (var x = 0; x < aList.count; x++) {
var theType = aList.getType(x);
switch (theType) {
case DescValueType.ALIASTYPE:
listStuff.push( aList.getPath(x));
break;
case DescValueType.BOOLEANTYPE:
listStuff.push( aList.getBoolean(x));
break;
case DescValueType.CLASSTYPE:
listStuff.push( aList.getClass(x));
break;
case DescValueType.DOUBLETYPE:
listStuff.push( aList.getDouble(x));
break;
case DescValueType.ENUMERATEDTYPE:
listStuff.push( aList.getEnumerationValue(x));
break;
case DescValueType.INTEGERTYPE:
listStuff.push( aList.getInteger(x));
break;
case DescValueType.LISTTYPE:
listStuff.push( aList.getList(x));
break;
case DescValueType.OBJECTTYPE:
listStuff.push( (aList.getObjectValue(x)));
break;
case DescValueType.RAWTYPE:
listStuff.push( aList.getReference(x));
break;
case DescValueType.REFERENCETYPE:
listStuff.push( aList.getReference(x));
break;
case DescValueType.STRINGTYPE:
listStuff.push( aList.getString(x));
break;
case DescValueType.UNITDOUBLE:
listStuff.push( aList.getUnitDoubleValue(x));
break;
default: 
break;
};
};
return listStuff
};
Participating Frequently
August 22, 2023

thank you ! but for me only the alert is shown 

Participating Frequently
September 10, 2023

And again: Please provide the file you are testing on. 


//var aDoc = app.activeDocument;
//aDoc.activeLayer = aDoc.layers['Tonwertkorrektur 1'];





//https://community.adobe.com/t5/photoshop-ecosystem-discussions/modifying-levels-adjustment-layer/m-p/5587180

// working code before update
/*
var ref = new ActionReference();

//ref.putEnumerated( charIDToTypeID("Lyr "), charIDToTypeID("Ordn"), charIDToTypeID("Trgt") );
//var data = executeActionGet(ref).getList(charIDToTypeID("Adjs")).getObjectValue(0).getData(stringIDToTypeID('legacyContentData'));

//var ref = new ActionReference();
ref.putEnumerated( charIDToTypeID( 'Lyr ' ), charIDToTypeID( 'Ordn' ), charIDToTypeID( 'Trgt' ) );
var data = executeActionGet( ref ).getList( stringIDToTypeID( 'adjustment' ) ).getObjectValue( 0 ).getData( stringIDToTypeID( 'legacyContentData' ) );

//var data = get_prop_value("layer", null, "adjustment", 0, "legacyContentData");
var check = getShortFromStream( data, 0 ); // Prüfen ob Daten abgerufen werden können
if(check != 2 ) throwError;// if not 2 then something is wrong
var levelsOptions = {};
levelsOptions.inBlack = getShortFromStream( data, 2 );
levelsOptions.inWhite = getShortFromStream( data, 4 );
levelsOptions.outBlack = getShortFromStream( data, 6 );
levelsOptions.outWhite = getShortFromStream( data, 8 );
levelsOptions.gamma = getShortFromStream( data, 10 )/100;

//alert(levelsOptions.inBlack);

function getShortFromStream( stream, pointer ) {
    var hi, low;
    hi = stream.charCodeAt( pointer ) << 8 ;
    low = stream.charCodeAt( pointer + 1 );
    
    return hi + low;
 };

var inBlackLevel = levelsOptions.inBlack;
var inWhiteLevel = levelsOptions.inWhite;
var outBlackLevel = levelsOptions.outBlack;
var outWhiteLevel = levelsOptions.outWhite;
var gammaLevel = levelsOptions.gamma;
alert(gammaLevel);

*/

if (app.documents.length > 0) {
    var ref = new ActionReference();
    ref.putEnumerated( charIDToTypeID("Lyr "), charIDToTypeID("Ordn"), charIDToTypeID("Trgt") );
    var layerDesc = executeActionGet(ref);
    try {
        var aList = layerDesc.getList(stringIDToTypeID("adjustment"));
        var listStuff = evaluateList (aList);
        var listStuff2 = evaluateList (listStuff[0].getList(stringIDToTypeID("adjustment")))
       // var aaa = evaluateList(listStuff2[0].getList(stringIDToTypeID("levels")));
        alert (listStuff2);
    } catch (e) {
        alert ("either not a curves adjustment layer or at unedited default settings")
    }
    
   
};
////////////////////////////////////
////// get list values //////
function evaluateList (aList) {
    var listStuff = new Array;
    for (var x = 0; x < aList.count; x++) {
        var theType = aList.getType(x);
        switch (theType) {
            case DescValueType.ALIASTYPE:
                listStuff.push( aList.getPath(x));
                break;
            case DescValueType.BOOLEANTYPE:
                listStuff.push( aList.getBoolean(x));
                break;
            case DescValueType.CLASSTYPE:
                listStuff.push( aList.getClass(x));
                break;
            case DescValueType.DOUBLETYPE:
                listStuff.push( aList.getDouble(x));
                break;
            case DescValueType.ENUMERATEDTYPE:
                listStuff.push( aList.getEnumerationValue(x));
                break;
            case DescValueType.INTEGERTYPE:
                listStuff.push( aList.getInteger(x));
                break;
            case DescValueType.LISTTYPE:
                listStuff.push( aList.getList(x));
                break;
            case DescValueType.OBJECTTYPE:
                listStuff.push( (aList.getObjectValue(x)));
                break;
            case DescValueType.RAWTYPE:
                listStuff.push( aList.getReference(x));
                break;
            case DescValueType.REFERENCETYPE:
                listStuff.push( aList.getReference(x));
                break;
            case DescValueType.STRINGTYPE:
                listStuff.push( aList.getString(x));
                break;
            case DescValueType.UNITDOUBLE:
                listStuff.push( aList.getUnitDoubleValue(x));
                break;
            default:
                break;
        };
    };
    return listStuff
};