// レベル補正
function act_level () {
    var setPoint= function (pt){
        var list= new ActionList();
        list.putInteger( pt[0] );
        list.putInteger( pt[1] );
        return list;
    }
    var subDesc= function (prop){
        var channel= {'MS':'Cmps', 'RD':'Rd  ', 'GR':'Grn ', 'BL':'Bl  ', 'CY':'Cyn ', 'MG':'Mgnt', 'YW':'Yllw', 'K':'Blck', 'GY':'Trgt', 'L':'Lght', 'A':'A   ', 'B':'B   ' };
        var desc= new ActionDescriptor();
        var ref= new ActionReference();
        if (channel=='GY') {
             ref1.putEnumerated( charIDToTypeID('Chnl'), charIDToTypeID('Ordn'), charIDToTypeID('Trgt') );
        } else {
            ref.putEnumerated( charIDToTypeID('Chnl'), charIDToTypeID('Chnl'), charIDToTypeID( channel [prop.ch] ) );
        }
        desc.putReference( charIDToTypeID('Chnl'), ref );
        desc.putList( charIDToTypeID('Inpt'), setPoint( [prop.inp[0],prop.inp[2]] ) ); // 入力レベル(レンジ)
        desc.putDouble( charIDToTypeID('Gmm '), prop.inp[1] ); // 入力レベル(ガンマ)
        desc.putList( charIDToTypeID('Otpt'), setPoint( prop.otp ) ); // 出力レベル
        return desc;
    }
    var cList= new ActionList();
    if (arguments.length == 0) {
        // 自動補正
        var desc= new ActionDescriptor();
        var ref= new ActionReference();
        ref.putEnumerated( charIDToTypeID('Chnl'), charIDToTypeID('Chnl'), charIDToTypeID('Cmps') );
        desc.putReference( charIDToTypeID('Chnl'), ref );
        desc.putBoolean( stringIDToTypeID('autoMachineLearning'), true );
        desc.putBoolean( stringIDToTypeID('autoFaces'), true );
        cList.putObject( charIDToTypeID('LvlA'), desc );
    } else {
        // チャンネルの数だけ繰り返す
        for (var i=0; i < arguments.length; i++) {
            cList.putObject( charIDToTypeID('LvlA'), subDesc( arguments[i] ) );
        }
    }
    var actDesc= new ActionDescriptor();
    actDesc.putList( charIDToTypeID('Adjs'), cList );
    executeAction( charIDToTypeID('Lvls'), actDesc, DialogModes.NO ); 
}
// RGB
var ms= { ch: 'MS', inp: [0, 1.0, 255], otp: [0, 255] }
var r= { ch: 'RD', inp: [0, 1.0, 255], otp: [0, 255] }
var g= { ch: 'GR', inp: [0, 1.0, 255], otp: [0, 255] }
var b= { ch: 'BL', inp: [0, 1.0, 255], otp: [0, 255] }
act_level(ms, r, g, b); // デフォルト値
// CMYK
var ms= { ch: 'MS', inp: [0, 1.0, 255], otp: [0, 255] }
var c= { ch: 'CY', inp: [0, 1.0, 255], otp: [0, 255] }
var m= { ch: 'MG', inp: [0, 1.0, 255], otp: [0, 255] }
var y= { ch: 'YW', inp: [0, 1.0, 255], otp: [0, 255] }
var k= { ch: 'K', inp: [0, 1.0, 255], otp: [0, 255] }
act_level(ms, c, m, y, k); // デフォルト値
// グレー
var gy= { ch: 'GY', inp: [0, 1.0, 255], otp: [0, 255] }
act_level(gy); // デフォルト値
// Lab
var l= { ch: 'L', inp: [0, 1.0, 255], otp: [0, 255] }
var a= { ch: 'A', inp: [0, 1.0, 255], otp: [0, 255] }
var b= { ch: 'B', inp: [0, 1.0, 255], otp: [0, 255] }
act_level(l, a, b); // デフォルト値

 

<引数>

調整したいチャンネルの設定を連想配列オブジェクトにして渡します。

ch string チャンネル識別子
inp array 入力レベル [low, gamma, hi]
otp array 出力レベル [low, hi]

 

「ch」は設定値がどのチャンネルのものなのかを識別する文字列です(下記の表参照)。「MS」はモードがRGB / CMYK時のマスターチャンネルです。なお、CMYKのときにRGBの値で渡すなど、異なるモードの値を渡すとエラーになります。

「inp」は入力レベルの配列で、ダイアログ上の設定値を左から並べたものになります。

「otp」は出力レベルの配列で、ダイアログ上の設定値を左から並べたものになります。

チャンネル 文字列
master
(RGB/CMYK時)
MS
R RD
G GR
B BL
C CY
M MG
Y YW
K K
グレー GY
L L
a A
b B

 

引数のオブジェクトは設定したいチャンネルだけを渡すことができます。

// マスターチャンネルのみ
var ms= { ch: 'MS', inp: [0, 1.0, 255], otp: [0, 255] }
act_level(ms);

// Rチャンネルのみ
var r= { ch: 'RD', inp: [0, 1.0, 255], otp: [0, 255] }
act_level(r);

// マスターチャンネルとBチャンネル
var ms= { ch: 'MS', inp: [0, 1.0, 255], otp: [0, 255] }
var b= { ch: 'BL', inp: [0, 1.0, 255], otp: [0, 255] }
act_level(ms, b);

 

まったく引数を渡さない場合は自動補正になります。

act_level(); // 自動補正

 

この関数はRGB、CMYK、Lab、グレースケールに対応しています。ほかのモードについては各自で作り変えてみてください。

 

 

 

Joomla templates by a4joomla