Copy link to clipboard
Copied
I want to have a script that creates the curves layer with specific point but in the channels too.
I found this script here,
It works but i don't know how to then draw points on the red green and blue channels rather than just the composite?
Many Thanks
Matt
{
var c_ADJ_LAYER = charIDToTypeID( "AdjL" );
var c_ADJUSTMENT = charIDToTypeID( "Adjs" );
var c_CHANNEL = charIDToTypeID( "Chnl" );
var c_COMPOSITE = charIDToTypeID( "Cmps" );
var c_CURVE = charIDToTypeID( "Crv " );
var c_CURVE_A = charIDToTypeID( "CrvA" );
var c_CURVES = charIDToTypeID( "Crvs" );
var c_HORIZONTAL = charIDToTypeID( "Hrzn" );
var c_MAKE = charIDToTypeID( "Mk " );
var c_NULL = charIDToTypeID( "null" );
var c_POINT = charIDToTypeID( "Pnt " );
var c_TYPE = charIDToTypeID( "Type" );
var c_USING = charIDToTypeID( "Usng" );
var c_VERTICAL = charIDToTypeID( "Vrtc" );
var d_CURVES_LAYER = new ActionDescriptor();
// Contains all the information necessary to perform the "MAKE" action
var r_CLASS = new ActionReference();
r_CLASS.putClass( c_ADJ_LAYER );
d_CURVES_LAYER.putReference( c_NULL, r_CLASS );
// Class of make action is of an ajdustment layer
var d_TYPE_CURVES = new ActionDescriptor();
// Contains all the information about all the curves
var d_CHANNEL_CURVES = new ActionDescriptor();
var l_CHANNEL_CURVES = new ActionList();
// Contains a list of channel curves
var d_CHANNEL_CURVE = new ActionDescriptor();
// Information for 1 channel curve
var r_CHANNEL = new ActionReference();
r_CHANNEL.putEnumerated( c_CHANNEL, c_CHANNEL, c_COMPOSITE );
// This curve is for the composite channel - VARIES
d_CHANNEL_CURVE.putReference( c_CHANNEL, r_CHANNEL );
// Contains the point list
var l_POINTS = new ActionList();
// List of points for this channel - LENGTH VARIES
var d_POINT = new ActionDescriptor();
// One point on the curve, has INPUT and OUTPUT value
d_POINT.putDouble( c_HORIZONTAL, 0.000000 );
d_POINT.putDouble( c_VERTICAL, 0.000000 );
l_POINTS.putObject( c_POINT, d_POINT );
//var d_POINT2 = new ActionDescriptor();
d_POINT.putDouble( c_HORIZONTAL, 100.000000 );
d_POINT.putDouble( c_VERTICAL, 80.000000 );
l_POINTS.putObject( c_POINT, d_POINT );
//var d_POINT2 = new ActionDescriptor();
d_POINT.putDouble( c_HORIZONTAL, 200.000000 );
d_POINT.putDouble( c_VERTICAL, 150.000000 );
l_POINTS.putObject( c_POINT, d_POINT );
//var d_POINT3 = new ActionDescriptor();
d_POINT.putDouble( c_HORIZONTAL, 255.000000 );
d_POINT.putDouble( c_VERTICAL, 255.000000 );
l_POINTS.putObject( c_POINT, d_POINT );
// Made the list of points
d_CHANNEL_CURVE.putList( c_CURVE, l_POINTS );
// Now have a list of points for a specific channel
l_CHANNEL_CURVES.putObject( c_CURVE_A, d_CHANNEL_CURVE );
// Add to the list of channel curves
d_CHANNEL_CURVES.putList( c_ADJUSTMENT, l_CHANNEL_CURVES );
// All the channel curves are inside here
d_TYPE_CURVES.putObject( c_TYPE, c_CURVES, d_CHANNEL_CURVES );
// .....
d_CURVES_LAYER.putObject( c_USING, c_ADJ_LAYER, d_TYPE_CURVES );
// package the curves and definition of the adjustment layer type
executeAction( c_MAKE, d_CURVES_LAYER, DialogModes.NO );
}
Does this help?
if (app.documents.length > 0) {
var myDocument = app.activeDocument;
var theLayer = rgbCurvesLayer ([[[0,0], [128,150], [255,255]], [[0,0], [128,110], [255,255]], [[0,0], [255,255]]]);
};
////// make rgb curves layer //////
function rgbCurvesLayer (theArray) {
// =======================================================
var idMk = charIDToTypeID( "Mk " );
var idpresetKind = stringIDToTypeID( "presetKind" );
var idpresetKindType = stringIDToTypeID( "presetKindType"
...
Copy link to clipboard
Copied
Does this help?
if (app.documents.length > 0) {
var myDocument = app.activeDocument;
var theLayer = rgbCurvesLayer ([[[0,0], [128,150], [255,255]], [[0,0], [128,110], [255,255]], [[0,0], [255,255]]]);
};
////// make rgb curves layer //////
function rgbCurvesLayer (theArray) {
// =======================================================
var idMk = charIDToTypeID( "Mk " );
var idpresetKind = stringIDToTypeID( "presetKind" );
var idpresetKindType = stringIDToTypeID( "presetKindType" );
var idpresetKindDefault = stringIDToTypeID( "presetKindDefault" );
var idpresetKindCustom = stringIDToTypeID( "presetKindCustom" );
var idadjustmentLayer = stringIDToTypeID( "adjustmentLayer" );
var idordinal = stringIDToTypeID( "ordinal" );
var idtargetEnum = stringIDToTypeID( "targetEnum" );
var idadjustment = stringIDToTypeID( "adjustment" );
var idcurvesAdjustment = stringIDToTypeID( "curvesAdjustment" );
var idcurves = stringIDToTypeID( "curves" );
var idcurve = stringIDToTypeID( "curve" );
var idchannel = stringIDToTypeID( "channel" );
var idAdjL = charIDToTypeID( "AdjL" );
var idOrdn = charIDToTypeID( "Ordn" );
var idTrgt = charIDToTypeID( "Trgt" );
var idChnl = charIDToTypeID( "Chnl" );
var idnull = charIDToTypeID( "null" );
var idCrvs = charIDToTypeID( "Crvs" );
var idCrvA = charIDToTypeID( "CrvA" );
var idCrv = charIDToTypeID( "Crv " );
var idAdjs = charIDToTypeID( "Adjs" );
var desc5 = new ActionDescriptor();
var ref2 = new ActionReference();
ref2.putClass( idAdjL );
desc5.putReference( idnull, ref2 );
var idUsng = charIDToTypeID( "Usng" );
var desc6 = new ActionDescriptor();
var idType = charIDToTypeID( "Type" );
var desc7 = new ActionDescriptor();
desc7.putEnumerated( idpresetKind, idpresetKindType, idpresetKindDefault );
desc6.putObject( idType, idCrvs, desc7 );
desc5.putObject( idUsng, idAdjL, desc6 );
executeAction( idMk, desc5, DialogModes.NO );
// =======================================================
var idset = stringIDToTypeID( "set" );
var desc50 = new ActionDescriptor();
var idnull = stringIDToTypeID( "null" );
var ref5 = new ActionReference();
ref5.putEnumerated( idadjustmentLayer, idordinal, idtargetEnum );
desc50.putReference( idnull, ref5 );
var idto = stringIDToTypeID( "to" );
var desc51 = new ActionDescriptor();
var list5 = new ActionList();
var desc52red = new ActionDescriptor();
var ref6 = new ActionReference();
var idblue = stringIDToTypeID( "red" );
ref6.putEnumerated( idchannel, idchannel, idblue );
desc52red.putReference( idchannel, ref6 );
var list6 = new ActionList();
var thisArray = theArray[0];
for (var m = 0; m < thisArray.length; m++) {
addCurvePoint (list6, thisArray[m])
};
desc52red.putList( idcurve, list6 );
var desc52green = new ActionDescriptor();
var ref6 = new ActionReference();
var thisArray = theArray[1];
var idblue = stringIDToTypeID( "green" );
ref6.putEnumerated( idchannel, idchannel, idblue );
desc52green.putReference( idchannel, ref6 );
var list6 = new ActionList();
for (var m = 0; m < thisArray.length; m++) {
addCurvePoint (list6, thisArray[m])
};
desc52green.putList( idcurve, list6 );
var desc52blue = new ActionDescriptor();
var ref6 = new ActionReference();
var thisArray = theArray[2];
var idblue = stringIDToTypeID( "blue" );
ref6.putEnumerated( idchannel, idchannel, idblue );
desc52blue.putReference( idchannel, ref6 );
var list6 = new ActionList();
for (var m = 0; m < thisArray.length; m++) {
addCurvePoint (list6, thisArray[m])
};
desc52blue.putList( idcurve, list6 );
list5.putObject( idcurvesAdjustment, desc52red );
list5.putObject( idcurvesAdjustment, desc52green );
list5.putObject( idcurvesAdjustment, desc52blue );
desc51.putList( idadjustment, list5 );
desc50.putObject( idto, idcurves, desc51 );
executeAction( idset, desc50, DialogModes.NO );
////////////////////////////////////
return app.activeDocument.activeLayer;
////// add curve point //////
function addCurvePoint (theList, valuePair) {
var desc11 = new ActionDescriptor();
desc11.putDouble( charIDToTypeID( "Hrzn" ), valuePair[0] );
desc11.putDouble( charIDToTypeID( "Vrtc" ), valuePair[1] );
theList.putObject( charIDToTypeID( "Pnt " ), desc11 );
};
};
Copy link to clipboard
Copied
Yes it does!!!!
Thank you, I've been digging around for the last hour and couldn't find anything!
Copy link to clipboard
Copied
You can use ScriptingListener.plugin to record the code and then wrap it into a function that takes arguments in a clearer form.